diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitPromoCodesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitPromoCodesApiController.php index 5bb1390d..f3b7057b 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitPromoCodesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitPromoCodesApiController.php @@ -210,7 +210,23 @@ final class OAuth2SummitPromoCodesApiController extends OAuth2ProtectedControlle */ public function getAllBySummitCSV($summit_id){ $values = Input::all(); - $rules = [ + $rules = []; + $allowed_columns = [ + "id", + "created", + "last_edited", + "code", + "redeemed", + "email_sent", + "source", + "summit_id", + "creator_id", + "class_name", + "type", + "speaker_id", + "owner_name", + "owner_email", + "sponsor_name" ]; try { @@ -281,10 +297,19 @@ final class OAuth2SummitPromoCodesApiController extends OAuth2ProtectedControlle 'code', ]); } + $columns_param = Input::get("columns", ""); + $columns = []; + if(!empty($columns_param)) + $columns = explode(',', $columns_param); + $diff = array_diff($columns, $allowed_columns); + if(count($diff) > 0){ + throw new ValidationException(sprintf("columns %s are not allowed!", implode(",", $diff))); + } $data = $this->promo_code_repository->getBySummit($summit, new PagingInfo($page, $per_page), $filter, $order); $filename = "promocodes-" . date('Ymd'); - $list = $data->toArray(); + $list = $data->toArray(Input::get("expand", "")); + return $this->export ( 'csv', @@ -295,9 +320,9 @@ final class OAuth2SummitPromoCodesApiController extends OAuth2ProtectedControlle 'last_edited' => new EpochCellFormatter, 'redeemed' => new BooleanCellFormatter, 'email_sent' => new BooleanCellFormatter, - ] + ], + $columns ); - } catch (ValidationException $ex1) { diff --git a/app/Http/Controllers/JsonController.php b/app/Http/Controllers/JsonController.php index 851fcc72..449606b9 100644 --- a/app/Http/Controllers/JsonController.php +++ b/app/Http/Controllers/JsonController.php @@ -127,10 +127,11 @@ abstract class JsonController extends Controller * @param string $filename * @param array $items * @param array $formatters + * @param array $columns * @return \Illuminate\Http\Response */ - protected function export($format, $filename, array $items, array $formatters = []){ - if($format == 'csv') return $this->csv($filename, $items, $formatters); + protected function export($format, $filename, array $items, array $formatters = [], array $columns = []){ + if($format == 'csv') return $this->csv($filename, $items, $formatters, ",", 'application/vnd.ms-excel', $columns); } /** @@ -139,9 +140,10 @@ abstract class JsonController extends Controller * @param array $formatters * @param string $field_separator * @param string $mime_type + * @param array $columns * @return \Illuminate\Http\Response */ - private function csv($filename, array $items, array $formatters = [], $field_separator = ",", $mime_type = 'application/vnd.ms-excel'){ + private function csv($filename, array $items, array $formatters = [], $field_separator = ",", $mime_type = 'application/vnd.ms-excel', array $columns = []){ $headers = [ 'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0', 'Content-type' => $mime_type, @@ -151,6 +153,6 @@ abstract class JsonController extends Controller 'Pragma' => 'public', ]; - return Response::make(CSVExporter::getInstance()->export($items, $field_separator, [] , $formatters), 200, $headers); + return Response::make(CSVExporter::getInstance()->export($items, $field_separator, $columns, $formatters), 200, $headers); } } \ No newline at end of file diff --git a/app/ModelSerializers/Summit/PromoCodes/MemberSummitRegistrationPromoCodeSerializer.php b/app/ModelSerializers/Summit/PromoCodes/MemberSummitRegistrationPromoCodeSerializer.php index 2e720b13..7a344abc 100644 --- a/app/ModelSerializers/Summit/PromoCodes/MemberSummitRegistrationPromoCodeSerializer.php +++ b/app/ModelSerializers/Summit/PromoCodes/MemberSummitRegistrationPromoCodeSerializer.php @@ -60,6 +60,18 @@ class MemberSummitRegistrationPromoCodeSerializer } } break; + case 'owner_name': { + if($code->hasOwner()){ + $values['owner_name'] = $code->getOwner()->getFullName(); + } + } + break; + case 'owner_email': { + if($code->hasOwner()){ + $values['owner_email'] = $code->getOwner()->getEmail(); + } + } + break; } } } diff --git a/app/ModelSerializers/Summit/PromoCodes/SpeakerSummitRegistrationPromoCodeSerializer.php b/app/ModelSerializers/Summit/PromoCodes/SpeakerSummitRegistrationPromoCodeSerializer.php index 8c07edf2..42505e85 100644 --- a/app/ModelSerializers/Summit/PromoCodes/SpeakerSummitRegistrationPromoCodeSerializer.php +++ b/app/ModelSerializers/Summit/PromoCodes/SpeakerSummitRegistrationPromoCodeSerializer.php @@ -56,6 +56,18 @@ final class SpeakerSummitRegistrationPromoCodeSerializer )->serialize($expand); } } + case 'owner_name': { + if($code->hasSpeaker()){ + $values['owner_name'] = $code->getSpeaker()->getFullName(); + } + } + break; + case 'owner_email': { + if($code->hasSpeaker()){ + $values['owner_email'] = $code->getSpeaker()->getEmail(); + } + } + break; break; } } diff --git a/app/ModelSerializers/Summit/PromoCodes/SponsorSummitRegistrationPromoCodeSerializer.php b/app/ModelSerializers/Summit/PromoCodes/SponsorSummitRegistrationPromoCodeSerializer.php index 0822a490..d26cb788 100644 --- a/app/ModelSerializers/Summit/PromoCodes/SponsorSummitRegistrationPromoCodeSerializer.php +++ b/app/ModelSerializers/Summit/PromoCodes/SponsorSummitRegistrationPromoCodeSerializer.php @@ -58,6 +58,10 @@ extends MemberSummitRegistrationPromoCodeSerializer } } break; + case 'sponsor_name':{ + $values['sponsor_name'] = $code->getSponsor()->getName(); + } + break; } } } diff --git a/tests/OAuth2PromoCodesApiTest.php b/tests/OAuth2PromoCodesApiTest.php index 68d255bb..cb0a7650 100644 --- a/tests/OAuth2PromoCodesApiTest.php +++ b/tests/OAuth2PromoCodesApiTest.php @@ -82,9 +82,11 @@ final class OAuth2PromoCodesApiTest extends ProtectedApiTest public function testGetPromoCodesByClassNameSpeakerSummitRegistrationPromoCodeCSV(){ $params = [ - 'id' => 23, - 'filter' => 'class_name=='.\models\summit\SpeakerSummitRegistrationPromoCode::ClassName, - 'order' => '+code' + 'id' => 25, + //'filter' => 'class_name=='.\models\summit\SpeakerSummitRegistrationPromoCode::ClassName, + 'order' => '+code', + 'columns' => 'code,type,owner_name,owner_email,sponsor_name,redeemed,email_sent', + 'expand' => 'owner_name,owner_email,sponsor_name', ]; $headers = [