/**
  * @param SS_HTTPRequest $r
  * @return SS_HTTPRequest
  */
 public function handlePresentations(SS_HTTPRequest $r)
 {
     $presentations = [];
     $offset = $r->getVar('offset') ?: 0;
     $m = Member::currentUser();
     $list = $m ? $m->getRandomisedPresentations(null, $this->summit) : $this->summit->VoteablePresentations();
     if ($list) {
         if ($r->getVar('category')) {
             $list = $list->filter(['CategoryID' => $r->getVar('category')]);
         }
         if ($r->getVar('search')) {
             $list = Presentation::apply_search_query($list, $r->getVar('search'));
         }
         $total = $list->count();
         $list = $list->limit($this->limit, $offset);
     } else {
         $list = [];
         $total = 0;
     }
     foreach ($list as $p) {
         $vote = $p->getUserVote();
         $presentations[] = ['id' => $p->ID, 'title' => $p->Title, 'user_vote' => $vote ? $vote->Vote : null];
     }
     $result = ['presentations' => $presentations, 'total' => $total];
     return (new SS_HTTPResponse(Convert::array2json($result), 200))->addHeader('Content-Type', 'application/json');
 }