/**
  * @param PresentationSpeaker $speaker
  * @param Presentation $presentation
  * @return bool
  */
 public function canAddSpeakerOnPresentation(PresentationSpeaker $speaker, Presentation $presentation)
 {
     $category = $presentation->Category();
     $summit = $category->Summit();
     if ($summit->isCallForSpeakersOpen() && $summit->isPublicCategory($category)) {
         $max_per_summit = intval($summit->MaxSubmissionAllowedPerUser);
         //zero means infinity
         if ($max_per_summit === 0) {
             $max_per_summit = PHP_INT_MAX;
         }
         $presentation_count = intval($speaker->getPublicCategoryPresentationsBySummit($summit)->count()) + intval($speaker->getPublicCategoryOwnedPresentationsBySummit($summit)->count());
         return $presentation_count < $max_per_summit;
     }
     if ($summit->isPrivateCategory($category) && ($group = $summit->getPrivateGroupFor($category))) {
         if ($group->isSubmissionOpen()) {
             $max_per_group = intval($group->MaxSubmissionAllowedPerUser);
             //zero means infinity
             if ($max_per_group === 0) {
                 $max_per_group = PHP_INT_MAX;
             }
             $group_presentation_count = intval($speaker->getPrivateCategoryPresentationsBySummit($summit, $group)->count()) + intval($speaker->getPrivateCategoryOwnedPresentationsBySummit($summit, $group)->count());
             return $group_presentation_count < $max_per_group;
         }
     }
     return false;
 }
    /**
     * @param SS_HTTPRequest $r
     * @return SS_HTTPResponse|void
     * @throws SS_HTTPResponse_Exception
     */
    public function handleEmailSpeakers(SS_HTTPRequest $r)
    {
        if (!Member::currentUser()) {
            return $this->httpError(403);
        }
        $email = $r->postVar('email');
        if ($email != null) {
            $current_user = Member::currentUser();
            $toAdresses = [];
            $ccAddresses = ['*****@*****.**'];
            foreach ($this->presentation->getSpeakersAndModerators() as $s) {
                $toAddresses[] = $s->getEmail();
            }
            $chairs = $this->presentation->Category()->TrackChairs()->exclude('MemberID', $current_user->ID);
            foreach ($chairs as $chair) {
                $ccAddresses[] = $chair->Member()->Email;
            }
            $subject = "Track chair {$current_user->getName()} has a question about your presentation";
            $body = $email;
            $email = EmailFactory::getInstance()->buildEmail(null, implode(',', $toAddresses), $subject, $body);
            $email->setCC(implode(',', $ccAddresses));
            $email->replyTo($current_user->Email);
            try {
                $email->send();
                $this->presentation->addNotification('
	        		{member} emailed the speakers
	        	');
                return new SS_HTTPResponse('OK');
            } catch (Exception $e) {
                return new SS_HTTPResponse($e->getMessage(), 400);
            }
        }
        return $this->httpError(400, "Invalid comment");
    }