00001 <?php
00002
00015
00016
00017
00018 class CounterHandler extends Handler {
00022 function index() {
00023 list($plugin) = CounterHandler::validate();
00024 CounterHandler::setupTemplate();
00025
00026
00027 $years = array();
00028 $logEntryDao =& DAORegistry::getDAO('LogEntryDAO');
00029 $log =& $logEntryDao->parse();
00030 foreach ($log as $entry) {
00031 $year = strftime('%Y', strtotime($entry->getStamp()));
00032 if (!in_array($year, $years)) {
00033 $years[] = $year;
00034 }
00035 }
00036 unset($log);
00037
00038 $templateManager = &TemplateManager::getManager();
00039 $templateManager->assign('years', $years);
00040 $templateManager->display($plugin->getTemplatePath() . 'index.tpl');
00041 }
00042
00043 function browseLog() {
00044 list($plugin) = CounterHandler::validate();
00045 CounterHandler::setupTemplate(true);
00046
00047 $journal =& Request::getJournal();
00048 $rangeInfo = Handler::getRangeInfo('entries');
00049
00050 $logEntryDao =& DAORegistry::getDAO('LogEntryDAO');
00051 $log =& $logEntryDao->parse();
00052
00053
00054 $sessions = array();
00055 $userNum = 0;
00056 foreach ($log as $entry) {
00057 if (!isset($sessions[$entry->getUser()])) {
00058 $sessions[$entry->getUser()] = Locale::translate('plugins.generic.counter.sessionNumber', array('sessionNumber' => ++$userNum));
00059 }
00060 }
00061
00062 if ($rangeInfo->isValid()) {
00063 $page = $rangeInfo->getPage();
00064 $count = $rangeInfo->getCount();
00065 } else {
00066 $page = 1;
00067 $count = min(count($log), $journal->getSetting('itemsPerPage'));
00068 }
00069 $logIterator = &new ArrayItemIterator($log, $page, $count);
00070
00071 $templateManager = &TemplateManager::getManager();
00072 $templateManager->assign_by_ref ('entries', $logIterator);
00073 $templateManager->assign ('sessions', $sessions);
00074
00075 $templateManager->display($plugin->getTemplatePath() . 'browser.tpl');
00076 }
00077
00078 function report() {
00079 list($plugin) = CounterHandler::validate();
00080 CounterHandler::setupTemplate(true);
00081
00082 $journal =& Request::getJournal();
00083 $year = Request::getUserVar('year');
00084
00085 $logEntryDao =& DAORegistry::getDAO('LogEntryDAO');
00086 $log =& $logEntryDao->parse(null, $year);
00087
00088 header('content-type: text/comma-separated-values');
00089 header('content-disposition: attachment; filename=report.csv');
00090
00091 echo CounterHandler::csvEscape(Locale::translate('plugins.generic.counter.1a.title1')) . "\n";
00092 echo CounterHandler::csvEscape(Locale::translate('plugins.generic.counter.1a.title2', array('year' => $year))) . "\n";
00093 echo "\n";
00094 echo CounterHandler::csvEscape(Locale::translate('plugins.generic.counter.1a.dateRun')) . "\n";
00095 echo CounterHandler::csvEscape(strftime("%Y-%m-%d")) . "\n";
00096
00097 echo CounterHandler::csvEscape('') . "\t";
00098 echo CounterHandler::csvEscape(Locale::translate('plugins.generic.counter.1a.publisher')) . "\t";
00099 echo CounterHandler::csvEscape(Locale::translate('plugins.generic.counter.1a.platform')) . "\t";
00100 echo CounterHandler::csvEscape(Locale::translate('plugins.generic.counter.1a.printIssn')) . "\t";
00101 echo CounterHandler::csvEscape(Locale::translate('plugins.generic.counter.1a.onlineIssn')) . "\t";
00102 for ($i=1; $i<=12; $i++) {
00103 $time = strtotime($year . '-' . $i . '-01');
00104 strftime('%b', $time);
00105 echo CounterHandler::csvEscape(strftime('%b-%Y', $time)) . "\t";
00106 }
00107 echo CounterHandler::csvEscape(Locale::translate('plugins.generic.counter.1a.ytdTotal')) . "\t";
00108 echo CounterHandler::csvEscape(Locale::translate('plugins.generic.counter.1a.ytdHtml')) . "\t";
00109 echo CounterHandler::csvEscape(Locale::translate('plugins.generic.counter.1a.ytdPdf')) . "\n";
00110
00111
00112
00113 $journals = array();
00114 foreach ($log as $entry) if ($entry->getType() != LOG_ENTRY_TYPE_SEARCH) {
00115 $journalUrl = $entry->getJournalUrl();
00116 if (!isset($journals[$journalUrl])) {
00117 $journals[$journalUrl] = array(
00118 'journal' => $entry->getJournal(),
00119 'publisher' => $entry->getPublisher(),
00120 'printIssn' => $entry->getPrintIssn(),
00121 'onlineIssn' => $entry->getOnlineIssn(),
00122 'months' => array_fill(1, 12, 0),
00123 'ytdTotal' => 0,
00124 'ytdHtml' => 0,
00125 'ytdPdf' => 0
00126 );
00127 }
00128 $month = (int) strftime('%m', strtotime($entry->getStamp()));
00129 $journals[$journalUrl]['ytdTotal']++;
00130 $journals[$journalUrl]['months'][$month]++;
00131 switch ($entry->getType()) {
00132 case LOG_ENTRY_TYPE_HTML_ARTICLE:
00133 $journals[$journalUrl]['ytdHtml']++;
00134 break;
00135 case LOG_ENTRY_TYPE_PDF_ARTICLE:
00136 $journals[$journalUrl]['ytdPdf']++;
00137 break;
00138 case LOG_ENTRY_TYPE_OTHER_ARTICLE:
00139 default:
00140 break;
00141 }
00142 }
00143
00144
00145
00146 echo CounterHandler::csvEscape(Locale::translate('plugins.generic.counter.1a.totalForAllJournals')) . "\t";
00147 echo CounterHandler::csvEscape('') . "\t";
00148 echo CounterHandler::csvEscape(Locale::translate('common.openJournalSystems')) . "\t";
00149 echo CounterHandler::csvEscape('') . "\t";
00150 echo CounterHandler::csvEscape('') . "\t";
00151
00152 $months = array_fill(1, 12, 0);
00153 $ytdTotal = $ytdHtml = $ytdPdf = 0;
00154 foreach ($journals as $journalEntry) {
00155 foreach ($journalEntry['months'] as $key => $value) $months[$key] += $value;
00156 $ytdTotal += $journalEntry['ytdTotal'];
00157 $ytdHtml += $journalEntry['ytdHtml'];
00158 $ytdPdf += $journalEntry['ytdPdf'];
00159 }
00160 foreach ($months as $month) echo CounterHandler::csvEscape($month) . "\t";
00161 echo CounterHandler::csvEscape($ytdTotal) . "\t";
00162 echo CounterHandler::csvEscape($ytdHtml) . "\t";
00163 echo CounterHandler::csvEscape($ytdPdf) . "\n";
00164
00165
00166
00167 foreach ($journals as $journalEntry) {
00168 echo CounterHandler::csvEscape($journalEntry['journal']) . "\t";
00169 echo CounterHandler::csvEscape($journalEntry['publisher']) . "\t";
00170 echo CounterHandler::csvEscape(Locale::translate('common.openJournalSystems')) . "\t";
00171 echo CounterHandler::csvEscape($journalEntry['printIssn']) . "\t";
00172 echo CounterHandler::csvEscape($journalEntry['onlineIssn']) . "\t";
00173
00174 foreach ($journalEntry['months'] as $month) echo CounterHandler::csvEscape($month) . "\t";
00175 echo CounterHandler::csvEscape($journalEntry['ytdTotal']) . "\t";
00176 echo CounterHandler::csvEscape($journalEntry['ytdHtml']) . "\t";
00177 echo CounterHandler::csvEscape($journalEntry['ytdPdf']) . "\n";
00178 }
00179 }
00180
00181 function clearLog() {
00182 list($plugin) = CounterHandler::validate(false);
00183 $logEntryDao =& DAORegistry::getDAO('LogEntryDAO');
00184 $logEntryDao->clearLog();
00185 Request::redirect(null, 'counter');
00186 }
00187
00193 function validate($canRedirect = true) {
00194 parent::validate();
00195 $journal =& Request::getJournal();
00196 if (!Validation::isSiteAdmin()) {
00197 if ($canRedirect) Validation::redirectLogin();
00198 else exit;
00199 }
00200
00201 $plugin =& Registry::get('plugin');
00202 return array(&$plugin);
00203 }
00204
00209 function setupTemplate($subclass = false) {
00210 $templateMgr = &TemplateManager::getManager();
00211
00212 $pageHierarchy = array(array(Request::url(null, 'user'), 'navigation.user'));
00213
00214 if ($subclass) $pageHierarchy[] = array(Request::url(null, 'counter'), 'plugins.generic.counter');
00215
00216 $templateMgr->assign_by_ref('pageHierarchy', $pageHierarchy);
00217 }
00218
00219 function csvEscape($value) {
00220 $value = str_replace('"', '""', $value);
00221 return '"' . $value . '"';
00222 }
00223 }
00224
00225 ?>