Exemplo n.º 1
0
    public function getGroupedDates($singledate = null, $metadate = null)
    {
        $i = 0;
        $first_event = FALSE;
        $semesterData = new SemesterData();
        $all_semester = $semesterData->getAllSemesterData();

        if (Config::get()->RESOURCES_HIDE_PAST_SINGLE_DATES) {
            // filtering
            foreach ($all_semester as $semester) {
                if ($semester['ende'] > time()) {
                    $new_as[] = $semester;
                }
            }
            $all_semester = $new_as;
        }

        if (!$singledate) {
            foreach ($all_semester as $semester) {
                foreach ($this->metadate->cycles as $metadate_id => $cycle) {
                    if ($metadate && $metadate_id != $metadate) continue;
                    $group = $cycle->getSingleDates();
                    $metadate_has_termine = 0;
                    $single = true;
                    foreach ($group as $termin) {
                        if (!$termin->isExTermin() && $termin->getStartTime() >= $semester['beginn'] && $termin->getStartTime() <= $semester['ende'] && (!Config::get()->RESOURCES_HIDE_PAST_SINGLE_DATES || $termin->getStartTime() >= time()) && $termin->isPresence()) {
                            if (empty($first_event)) {
                                $first_event = $termin->getStartTime();
                            }
                            $groups[$i]["termin_ids"][$termin->getSingleDateId()] = TRUE;
                            $metadate_has_termine = 1;

                            if (empty($info[$i]['raum'])) {
                                $info[$i]['raum'] = $termin->resource_id;
                            } else if ($info[$i]['raum'] != $termin->resource_id) {
                                $single = false;
                            }
                        }
                    }

                    if ($metadate_has_termine) {
                        $info[$i]['name'] = $cycle->toString('long').' ('.$semester['name'].')';
                        $info[$i]['weekend'] = ($cycle->getDay() == 6 || $cycle->getDay() == 0);
                        $this->applyTimeFilter($semester['beginn'], $semester['ende']);
                        $raum = $this->getDatesTemplate('dates/seminar_predominant_html', array('cycle_id' => $metadate_id));
                        if ($raum) {
                            $info[$i]['name'] .= '<br>&nbsp;&nbsp;&nbsp;&nbsp;'.$raum;
                            $room_stat = $this->getStatOfNotBookedRooms($cycle->getMetadateId());
                            $info[$i]['name'] .= sprintf(_(" (%s von %s belegt)"), $room_stat['all'] - $room_stat['open'] , $room_stat['all']);
                            $groups[$i]['complete'] = ($room_stat['all'] - $room_stat['open'] >= sizeof($groups[$i]['termin_ids'])) ? true : false;
                        }
                        if (!$single) unset($info[$i]['raum']);
                        $i++;
                    }
                }
            }
            if (!$metadate) {
                $irreg = $this->getSingleDates();

                if (Config::get()->RESOURCES_HIDE_PAST_SINGLE_DATES) {
                    $anzahl = 0;
                    foreach ($irreg as $termin_id => $termin) {
                        if ($termin->getStartTime() > time() - 3600) {
                            $anzahl++;
                        }
                    }
                } else {
                    $anzahl = sizeof($irreg);
                }

                if ($anzahl > Config::get()->RESOURCES_ALLOW_SINGLE_DATE_GROUPING) {
                    $single = true;
                    $first = true;
                    foreach ($irreg as $termin_id => $termin) {
                        if ($termin->isPresence()) {
                            if (!Config::get()->RESOURCES_HIDE_PAST_SINGLE_DATES || $termin->getStartTime() > time() - 3600) {
                                if (empty($first_event)) {
                                    $first_event = $termin->getStartTime();
                                }
                                $groups[$i]["termin_ids"][$termin->getSingleDateId()] = TRUE;
                                if (!$first) $info[$i]['name'] .= '<br>&nbsp;&nbsp;&nbsp;&nbsp;';
                                $info[$i]['name'] .= $termin->toString();
                                $resObj = ResourceObject::Factory($termin->resource_id);

                                if ($link = $resObj->getFormattedLink($termin->getStartTime())) {
                                    $info[$i]['name'] .= '<br>&nbsp;&nbsp;&nbsp;&nbsp;'.$link;
                                    if (empty($info[$i]['raum'])) {
                                        $info[$i]['raum'] = $termin->resource_id;
                                    } else if ($info[$i]['raum'] != $termin->resource_id) {
                                        $single = false;
                                    }
                                }

                                if (date('w', $termin->getStartTime()) == 6 || date('w', $termin->getStartTime()) == 0) {
                                    $info[$i]['weekend'] = true;
                                }
                                $first = false;
                            }
                        }
                    }
                    if (!$single) unset($info[$i]['raum']);
                } else {
                    foreach ($irreg as $termin_id => $termin) {
                        if ($termin->isPresence()) {
                            if (!Config::get()->RESOURCES_HIDE_PAST_SINGLE_DATES || $termin->getStartTime() > time() - 3600) {
                                if (empty($first_event)) {
                                    $first_event = $termin->getStartTime();
                                }
                                $groups[$i]["termin_ids"][$termin->getSingleDateId()] = TRUE;
                                $info[$i]['name'] = $termin->toString();
                                $resObj = ResourceObject::Factory($termin->resource_id);

                                if ($link = $resObj->getFormattedLink($termin->getStartTime())) {
                                    $info[$i]['name'] .= '<br>&nbsp;&nbsp;&nbsp;&nbsp;'.$link;
                                    $info[$i]['raum'] = $termin->resource_id;
                                }

                                $info[$i]['weekend'] = (date('w', $termin->getStartTime()) == 6 || date('w', $termin->getStartTime()) == 0);
                                $i++;
                            }
                        }
                    }
                }
            }
        } else {    // we have a single date
            $termin = new SingleDate($singledate);
            $groups[0]['termin_ids'][$termin->getSingleDateID()] = TRUE;
            $info[0]['name'] = $termin->toString();
            $info[0]['raum'] = $termin->resource_id;
            $info[0]['weekend'] = (date('w', $termin->getStartTime()) == 6 || date('w', $termin->getStartTime()) == 0);
            $first_event = $termin->getStartTime();
        }

        return array('first_event' => $first_event, 'groups' => $groups, 'info' => $info);
    }