public function editPromoCodeSponsor(SS_HTTPRequest $request)
 {
     $summit_id = intval($request->param('SummitID'));
     $summit = Summit::get()->byID($summit_id);
     $sponsor_id = $request->param('SponsorID');
     $sponsor = is_numeric($sponsor_id) ? Company::get_by_id('Company', $sponsor_id) : null;
     $promocodes = is_numeric($sponsor_id) ? $this->promocode_repository->getBySponsor($summit_id, $sponsor_id) : array();
     Requirements::css('summit/css/simple-sidebar.css');
     Requirements::css('summit/css/summit-admin-edit-promocode.css');
     Requirements::css('themes/openstack/bower_assets/chosen/chosen.min.css');
     Requirements::css('themes/openstack/bower_assets/sweetalert/dist/sweetalert.css');
     Requirements::css('themes/openstack/bower_assets/awesome-bootstrap-checkbox/awesome-bootstrap-checkbox.css');
     // tag input
     Requirements::css('themes/openstack/bower_assets/bootstrap-tagsinput/dist/bootstrap-tagsinput.css');
     Requirements::css('themes/openstack/bower_assets/bootstrap-tagsinput/dist/bootstrap-tagsinput-typeahead.css');
     Requirements::javascript('themes/openstack/bower_assets/sweetalert/dist/sweetalert.min.js');
     Requirements::javascript('themes/openstack/bower_assets/jquery-validate/dist/jquery.validate.min.js');
     Requirements::javascript('themes/openstack/bower_assets/jquery-validate/dist/additional-methods.min.js');
     Requirements::javascript('themes/openstack/bower_assets/chosen/chosen.jquery.min.js');
     Requirements::javascript('summit/javascript/simple-sidebar.js');
     Requirements::javascript('//tinymce.cachefly.net/4.3/tinymce.min.js');
     Requirements::javascript('themes/openstack/bower_assets/typeahead.js/dist/typeahead.bundle.min.js');
     Requirements::javascript('themes/openstack/bower_assets/bootstrap-tagsinput/dist/bootstrap-tagsinput.min.js');
     Requirements::javascript('summit/javascript/summitapp-editpromocode-sponsor.js');
     return $this->getViewer('editPromoCodeSponsor')->process($this->customise(array('Summit' => $summit, 'PromoCodes' => $promocodes, 'Sponsor' => $sponsor)));
 }
 public function exportRegistrationCodes(SS_HTTPRequest $request)
 {
     try {
         $query_string = $request->getVars();
         $code_type = isset($query_string['type']) ? $query_string['type'] : '';
         $term = isset($query_string['term']) ? $query_string['term'] : '';
         $summit_id = intval($request->param('SUMMIT_ID'));
         $summit = $this->summit_repository->getById($summit_id);
         if (is_null($summit)) {
             throw new NotFoundEntityException('Summit', sprintf(' id %s', $summit_id));
         }
         $ext = 'csv';
         list($page, $page_size, $count, $codes) = $this->code_repository->searchByTermAndSummitPaginated($summit_id, $code_type, 1, 0, $term);
         $results = array();
         foreach ($codes as $row) {
             $code_array = array('Code' => $row['code'], 'Type' => $row['type'], 'Owner' => $row['owner'], 'Email' => $row['owner_email'], 'Sponsor' => $row['sponsor'], 'Emailed' => $row['email_sent'], 'Redeemed' => $row['redeemed']);
             if (!$code_type) {
                 $this_type = $row['type'];
                 if (!isset($results[$this_type])) {
                     $results[$this_type] = array();
                 }
                 $results[$this_type][] = $code_array;
             } else {
                 array_push($results, $code_array);
             }
         }
         $filename = "promocodes_report-" . date('Ymd') . "." . $ext;
         $delimiter = $ext == 'xls' ? "\t" : ",";
         if (!$code_type) {
             // if we export all codes we put each type on a different sheet
             $objPHPExcel = new PHPExcel();
             $objPHPExcel->getProperties()->setCreator("OpenStack");
             $objPHPExcel->getProperties()->setTitle("PromoCodes");
             $sheet_no = 0;
             foreach ($results as $type => $codes) {
                 if ($sheet_no > 0) {
                     $active_sheet = $objPHPExcel->createSheet();
                 } else {
                     $objPHPExcel->setActiveSheetIndex(0);
                     $active_sheet = $objPHPExcel->getActiveSheet();
                 }
                 $sheet_title = $type ? $type : 'No Type';
                 $active_sheet->setTitle($sheet_title);
                 $active_sheet->fromArray(array('Code', 'Type', 'Owner', 'Email', 'Sponsor', 'Emailed', 'Redeemed'), NULL, 'A1');
                 foreach ($codes as $key => $code) {
                     $row = $key + 2;
                     $active_sheet->fromArray($code, NULL, 'A' . $row);
                 }
                 $sheet_no++;
             }
             $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
             header('Content-type: application/vnd.ms-excel');
             header('Content-Disposition: attachment; filename="' . $filename . '"');
             $objWriter->save('php://output');
             return;
         } else {
             return CSVExporter::getInstance()->export($filename, $results, $delimiter);
         }
     } catch (NotFoundEntityException $ex2) {
         SS_Log::log($ex2->getMessage(), SS_Log::WARN);
         return $this->notFound($ex2->getMessage());
     } catch (Exception $ex) {
         SS_Log::log($ex->getMessage(), SS_Log::ERR);
         return $this->serverError();
     }
 }