Open Journal Systems  3.3.0
SubscriptionReportPlugin.inc.php
1 <?php
2 
16 import('lib.pkp.classes.plugins.ReportPlugin');
17 
22  function register($category, $path, $mainContextId = null) {
23  $success = parent::register($category, $path, $mainContextId);
24  $this->addLocaleData();
25  return $success;
26  }
27 
33  function getName() {
34  return 'SubscriptionReportPlugin';
35  }
36 
41  function getDisplayName() {
42  return __('plugins.reports.subscriptions.displayName');
43  }
44 
49  function getDescription() {
50  return __('plugins.reports.subscriptions.description');
51  }
52 
56  function display($args, $request) {
57  $journal = $request->getJournal();
58  $journalId = $journal->getId();
59  $userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
60  $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /* @var $subscriptionTypeDao SubscriptionTypeDAO */
61  $individualSubscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /* @var $individualSubscriptionDao IndividualSubscriptionDAO */
62  $institutionalSubscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO'); /* @var $institutionalSubscriptionDao InstitutionalSubscriptionDAO */
63  $isoCodes = new \Sokil\IsoCodes\IsoCodesFactory();
64  $countries = $isoCodes->getCountries();
65 
66  header('content-type: text/comma-separated-values');
67  header('content-disposition: attachment; filename=subscriptions-' . date('Ymd') . '.csv');
68  $fp = fopen('php://output', 'wt');
69  //Add BOM (byte order mark) to fix UTF-8 in Excel
70  fprintf($fp, chr(0xEF).chr(0xBB).chr(0xBF));
71 
72  // Columns for individual subscriptions
73  $columns = array(__('subscriptionManager.individualSubscriptions'));
74  fputcsv($fp, array_values($columns));
75 
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')
86  );
87 
88  $columnsIndividual = array(
89  'name' => __('user.name'),
90  'mailing_address' => __('common.mailingAddress'),
91  'country' => __('common.country'),
92  'email' => __('user.email'),
93  'phone' => __('user.phone'),
94  );
95 
96  $columns = array_merge($columnsCommon, $columnsIndividual);
97 
98  // Write out individual subscription column headings to file
99  fputcsv($fp, array_values($columns));
100 
101  // Iterate over individual subscriptions and write out each to file
102  $individualSubscriptions = $individualSubscriptionDao->getByJournalId($journalId);
103  while ($subscription = $individualSubscriptions->next()) {
104  $user = $userDao->getById($subscription->getUserId());
105  $subscriptionType = $subscriptionTypeDao->getById($subscription->getTypeId());
106 
107  foreach ($columns as $index => $junk) {
108  switch ($index) {
109  case 'subscription_id':
110  $columns[$index] = $subscription->getId();
111  break;
112  case 'status':
113  $columns[$index] = $subscription->getStatusString();
114  break;
115  case 'type':
116  $columns[$index] = $subscription->getSubscriptionTypeSummaryString();
117  break;
118  case 'format':
119  $columns[$index] = __($subscriptionType->getFormatString());
120  break;
121  case 'date_start':
122  $columns[$index] = $subscription->getDateStart();
123  break;
124  case 'date_end':
125  $columns[$index] = $subscription->getDateEnd();
126  break;
127  case 'membership':
128  $columns[$index] = $subscription->getMembership();
129  break;
130  case 'reference_number':
131  $columns[$index] = $subscription->getReferenceNumber();
132  break;
133  case 'notes':
134  $columns[$index] = PKPString::html2text($subscription->getNotes());
135  break;
136  case 'name':
137  $columns[$index] = $user->getFullName();
138  break;
139  case 'mailing_address':
140  $columns[$index] = PKPString::html2text($user->getMailingAddress());
141  break;
142  case 'country':
143  $country = $countries->getByAlpha2($user->getCountry());
144  $columns[$index] = $country?$country->getLocalName():'';
145  break;
146  case 'email':
147  $columns[$index] = $user->getEmail();
148  break;
149  case 'phone':
150  $columns[$index] = $user->getPhone();
151  break;
152  default:
153  $columns[$index] = '';
154  }
155  }
156 
157  fputcsv($fp, $columns);
158  }
159 
160  // Columns for institutional subscriptions
161  $columns = array('');
162  fputcsv($fp, array_values($columns));
163 
164  $columns = array(__('subscriptionManager.institutionalSubscriptions'));
165  fputcsv($fp, array_values($columns));
166 
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'),
177  );
178 
179  $columns = array_merge($columnsCommon, $columnsInstitution);
180 
181  // Write out institutional subscription column headings to file
182  fputcsv($fp, array_values($columns));
183 
184  // Iterate over institutional subscriptions and write out each to file
185  $institutionalSubscriptions = $institutionalSubscriptionDao->getByJournalId($journalId);
186  while ($subscription = $institutionalSubscriptions->next()) {
187  $user = $userDao->getById($subscription->getUserId());
188  $subscriptionType = $subscriptionTypeDao->getById($subscription->getTypeId());
189 
190  foreach ($columns as $index => $junk) {
191  switch ($index) {
192  case 'subscription_id':
193  $columns[$index] = $subscription->getId();
194  break;
195  case 'status':
196  $columns[$index] = $subscription->getStatusString();
197  break;
198  case 'type':
199  $columns[$index] = $subscription->getSubscriptionTypeSummaryString();
200  break;
201  case 'format':
202  $columns[$index] = __($subscriptionType->getFormatString());
203  break;
204  case 'date_start':
205  $columns[$index] = $subscription->getDateStart();
206  break;
207  case 'date_end':
208  $columns[$index] = $subscription->getDateEnd();
209  break;
210  case 'membership':
211  $columns[$index] = $subscription->getMembership();
212  break;
213  case 'reference_number':
214  $columns[$index] = $subscription->getReferenceNumber();
215  break;
216  case 'notes':
217  $columns[$index] = PKPString::html2text($subscription->getNotes());
218  break;
219  case 'institution_name':
220  $columns[$index] = $subscription->getInstitutionName();
221  break;
222  case 'institution_mailing_address':
223  $columns[$index] = PKPString::html2text($subscription->getInstitutionMailingAddress());
224  break;
225  case 'domain':
226  $columns[$index] = $subscription->getDomain();
227  break;
228  case 'ip_ranges':
229  $columns[$index] = $this->_formatIPRanges($subscription->getIPRanges());
230  break;
231  case 'contact':
232  $columns[$index] = $user->getFullName();
233  break;
234  case 'mailing_address':
235  $columns[$index] = PKPString::html2text($user->getMailingAddress());
236  break;
237  case 'country':
238  $country = $countries->getByAlpha2($user->getCountry());
239  $columns[$index] = $country?$country->getLocalName():'';
240  break;
241  case 'email':
242  $columns[$index] = $user->getEmail();
243  break;
244  case 'phone':
245  $columns[$index] = $user->getPhone();
246  break;
247  default:
248  $columns[$index] = '';
249  }
250  }
251 
252  fputcsv($fp, $columns);
253  }
254 
255  fclose($fp);
256  }
257 
263  function _formatIPRanges($ipRanges) {
264  $numRanges = count($ipRanges);
265  $ipRangesString = '';
266 
267  for($i=0; $i<$numRanges; $i++) {
268  $ipRangesString .= $ipRanges[$i];
269  if ( $i+1 < $numRanges) $ipRangesString .= chr(13) . chr(10);
270  }
271 
272  return $ipRangesString;
273  }
274 }
275 
276 
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
SubscriptionReportPlugin\_formatIPRanges
_formatIPRanges($ipRanges)
Definition: SubscriptionReportPlugin.inc.php:263
PKPString\html2text
static html2text($html)
Definition: PKPString.inc.php:395
SubscriptionReportPlugin\display
display($args, $request)
Definition: SubscriptionReportPlugin.inc.php:56
ReportPlugin
Abstract class for report plugins.
Definition: ReportPlugin.inc.php:18
SubscriptionReportPlugin\getDescription
getDescription()
Definition: SubscriptionReportPlugin.inc.php:49
SubscriptionReportPlugin
Subscription report plugin.
Definition: SubscriptionReportPlugin.inc.php:18
SubscriptionReportPlugin\getDisplayName
getDisplayName()
Definition: SubscriptionReportPlugin.inc.php:41
Plugin\$request
$request
Definition: Plugin.inc.php:68
Plugin\addLocaleData
addLocaleData($locale=null)
Definition: Plugin.inc.php:454
SubscriptionReportPlugin\getName
getName()
Definition: SubscriptionReportPlugin.inc.php:33