16 import(
'lib.pkp.classes.plugins.ReportPlugin');
22 function register($category, $path, $mainContextId =
null) {
23 $success = parent::register($category, $path, $mainContextId);
34 return 'SubscriptionReportPlugin';
42 return __(
'plugins.reports.subscriptions.displayName');
50 return __(
'plugins.reports.subscriptions.description');
58 $journalId = $journal->getId();
63 $isoCodes = new \Sokil\IsoCodes\IsoCodesFactory();
64 $countries = $isoCodes->getCountries();
66 header(
'content-type: text/comma-separated-values');
67 header(
'content-disposition: attachment; filename=subscriptions-' . date(
'Ymd') .
'.csv');
68 $fp = fopen(
'php://output',
'wt');
70 fprintf($fp, chr(0xEF).chr(0xBB).chr(0xBF));
73 $columns = array(__(
'subscriptionManager.individualSubscriptions'));
74 fputcsv($fp, array_values($columns));
76 $columnsCommon = array(
77 'subscription_id' => __(
'common.id'),
78 'status' => __(
'subscriptions.status'),
79 'type' => __(
'common.type'),
80 'format' => __(
'subscriptionTypes.format'),
81 'date_start' => __(
'manager.subscriptions.dateStart'),
82 'date_end' => __(
'manager.subscriptions.dateEnd'),
83 'membership' => __(
'manager.subscriptions.membership'),
84 'reference_number' => __(
'manager.subscriptions.referenceNumber'),
85 'notes' => __(
'common.notes')
88 $columnsIndividual = array(
89 'name' => __(
'user.name'),
90 'mailing_address' => __(
'common.mailingAddress'),
91 'country' => __(
'common.country'),
92 'email' => __(
'user.email'),
93 'phone' => __(
'user.phone'),
96 $columns = array_merge($columnsCommon, $columnsIndividual);
99 fputcsv($fp, array_values($columns));
102 $individualSubscriptions = $individualSubscriptionDao->getByJournalId($journalId);
103 while ($subscription = $individualSubscriptions->next()) {
104 $user = $userDao->getById($subscription->getUserId());
105 $subscriptionType = $subscriptionTypeDao->getById($subscription->getTypeId());
107 foreach ($columns as $index => $junk) {
109 case 'subscription_id':
110 $columns[$index] = $subscription->getId();
113 $columns[$index] = $subscription->getStatusString();
116 $columns[$index] = $subscription->getSubscriptionTypeSummaryString();
119 $columns[$index] = __($subscriptionType->getFormatString());
122 $columns[$index] = $subscription->getDateStart();
125 $columns[$index] = $subscription->getDateEnd();
128 $columns[$index] = $subscription->getMembership();
130 case 'reference_number':
131 $columns[$index] = $subscription->getReferenceNumber();
137 $columns[$index] = $user->getFullName();
139 case 'mailing_address':
143 $country = $countries->getByAlpha2($user->getCountry());
144 $columns[$index] = $country?$country->getLocalName():
'';
147 $columns[$index] = $user->getEmail();
150 $columns[$index] = $user->getPhone();
153 $columns[$index] =
'';
157 fputcsv($fp, $columns);
161 $columns = array(
'');
162 fputcsv($fp, array_values($columns));
164 $columns = array(__(
'subscriptionManager.institutionalSubscriptions'));
165 fputcsv($fp, array_values($columns));
167 $columnsInstitution = array(
168 'institution_name' => __(
'manager.subscriptions.institutionName'),
169 'institution_mailing_address' => __(
'plugins.reports.subscriptions.institutionMailingAddress'),
170 'domain' => __(
'manager.subscriptions.domain'),
171 'ip_ranges' => __(
'plugins.reports.subscriptions.ipRanges'),
172 'contact' => __(
'manager.subscriptions.contact'),
173 'mailing_address' => __(
'common.mailingAddress'),
174 'country' => __(
'common.country'),
175 'email' => __(
'user.email'),
176 'phone' => __(
'user.phone'),
179 $columns = array_merge($columnsCommon, $columnsInstitution);
182 fputcsv($fp, array_values($columns));
185 $institutionalSubscriptions = $institutionalSubscriptionDao->getByJournalId($journalId);
186 while ($subscription = $institutionalSubscriptions->next()) {
187 $user = $userDao->getById($subscription->getUserId());
188 $subscriptionType = $subscriptionTypeDao->getById($subscription->getTypeId());
190 foreach ($columns as $index => $junk) {
192 case 'subscription_id':
193 $columns[$index] = $subscription->getId();
196 $columns[$index] = $subscription->getStatusString();
199 $columns[$index] = $subscription->getSubscriptionTypeSummaryString();
202 $columns[$index] = __($subscriptionType->getFormatString());
205 $columns[$index] = $subscription->getDateStart();
208 $columns[$index] = $subscription->getDateEnd();
211 $columns[$index] = $subscription->getMembership();
213 case 'reference_number':
214 $columns[$index] = $subscription->getReferenceNumber();
219 case 'institution_name':
220 $columns[$index] = $subscription->getInstitutionName();
222 case 'institution_mailing_address':
226 $columns[$index] = $subscription->getDomain();
229 $columns[$index] = $this->
_formatIPRanges($subscription->getIPRanges());
232 $columns[$index] = $user->getFullName();
234 case 'mailing_address':
238 $country = $countries->getByAlpha2($user->getCountry());
239 $columns[$index] = $country?$country->getLocalName():
'';
242 $columns[$index] = $user->getEmail();
245 $columns[$index] = $user->getPhone();
248 $columns[$index] =
'';
252 fputcsv($fp, $columns);
264 $numRanges = count($ipRanges);
265 $ipRangesString =
'';
267 for($i=0; $i<$numRanges; $i++) {
268 $ipRangesString .= $ipRanges[$i];
269 if ( $i+1 < $numRanges) $ipRangesString .= chr(13) . chr(10);
272 return $ipRangesString;