Example #1
0
    /**
     * @return ValidationResult
     */
    protected function validate()
    {
        if (!$this->TypeID) {
            $this->assignEventType();
        }
        $valid = parent::validate();
        if (!$valid->valid()) {
            return $valid;
        }
        $summit_id = isset($_REQUEST['SummitID']) ? $_REQUEST['SummitID'] : $this->SummitID;
        $summit = Summit::get()->byID($summit_id);
        // validate that each speakers is assigned one time at one location
        $start_date = $summit->convertDateFromTimeZone2UTC($this->getStartDate());
        $end_date = $summit->convertDateFromTimeZone2UTC($this->getEndDate());
        $presentation_id = $this->getIdentifier();
        $location_id = $this->LocationID;
        $speakers_id = array();
        $speakers = $this->Speakers();
        foreach ($speakers as $speaker) {
            array_push($speakers_id, $speaker->ID);
        }
        $speakers_id = implode(', ', $speakers_id);
        if (empty($start_date) || empty($end_date) || empty($speakers_id)) {
            return $valid;
        }
        $query = <<<SQL
SELECT COUNT(P.ID) FROM Presentation P
INNER JOIN SummitEvent E ON E.ID = P.ID
WHERE
E.Published = 1              AND
E.StartDate <= '{$end_date}'  AND
'{$start_date}' <= E.EndDate AND
E.ID <> {$presentation_id}     AND
E.LocationID = {$location_id}  AND
E.LocationID <> 0            AND
EXISTS
(
\tSELECT PS.ID FROM Presentation_Speakers PS WHERE PresentationSpeakerID IN ({$speakers_id}) AND
\tPresentationID = P.ID
);
SQL;
        $qty = intval(DB::query($query)->value());
        if ($qty > 0) {
            return $valid->error('There is a speaker assigned to another presentation on that date/time range !');
        }
        return $valid;
    }