# -*- coding: utf-8 -*- # # Copyright Grégory Soutadé 2015 # This file is part of iwla # iwla is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # iwla is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with iwla. If not, see . # from iwla import IWLA from iplugin import IPlugin from display import * import awstats_data """ Display hook Create browsers page Plugin requirements : post_analysis/browsers Conf values needed : max_browsers_displayed* create_browsers_page* Output files : OUTPUT_ROOT/year/month/browsers.html OUTPUT_ROOT/year/month/index.html Statistics creation : None Statistics update : None Statistics deletion : None """ class IWLADisplayBrowsers(IPlugin): def __init__(self, iwla): super(IWLADisplayBrowsers, self).__init__(iwla) self.API_VERSION = 1 self.requires = ['IWLAPostAnalysisBrowsers'] def load(self): self.icon_path = self.iwla.getConfValue('icon_path', '/') self.max_browsers = self.iwla.getConfValue('max_browsers_displayed', 0) self.create_browsers = self.iwla.getConfValue('create_browsers_page', True) self.icon_names = {v:k for (k, v) in awstats_data.browsers_hashid.items()} return True def hook(self): display = self.iwla.getDisplay() browsers = self.iwla.getMonthStats()['browsers'] browsers = sorted(browsers.items(), key=lambda t: t[1], reverse=True) # All in a file if self.create_browsers: title = createCurTitle(self.iwla, u'Browsers') filename = 'browsers.html' path = self.iwla.getCurDisplayPath(filename) page = display.createPage(title, path, self.iwla.getConfValue('css_path', [])) table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'Browsers'), ['', self.iwla._(u'Browser'), self.iwla._(u'Entrance')]) table.setColsCSSClass(['', '', 'iwla_hit']) total_browsers = [0]*3 new_list = self.max_browsers and browsers[:self.max_browsers] or browsers for (browser, entrance) in new_list: if browser != 'unknown': try: name = awstats_data.browsers_icons[self.icon_names[browser]] icon = '%s icon' % (name, self.icon_path, name) except: icon = 'Unknown browser icon' % (self.icon_path) else: icon = 'Unknown browser icon' % (self.icon_path) browser = 'Unknown' table.appendRow([icon, browser, entrance]) total_browsers[2] += entrance if self.max_browsers: others = 0 for (browser, entrance) in browsers[self.max_browsers:]: others += entrance table.appendRow(['', self.iwla._(u'Others'), others]) table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') page.appendBlock(table) display.addPage(page) title = self.iwla._(u'Top Browsers') if self.create_browsers: link = '%s' % (filename, self.iwla._(u'All Browsers')) title = '%s - %s' % (title, link) # Top in index index = self.iwla.getDisplayIndex() table = display.createBlock(DisplayHTMLBlockTable, title, ['', self.iwla._(u'Browser'), self.iwla._(u'Entrance')]) table.setColsCSSClass(['', '', 'iwla_hit']) for (browser, entrance) in browsers[:10]: if browser != 'unknown': try: name = awstats_data.browsers_icons[self.icon_names[browser]] icon = '%s icon' % (name, self.icon_path, name) except: icon = 'Unknown browser icon' % (self.icon_path) else: icon = 'Unknown browser icon' % (self.icon_path) browser = self.iwla._(u'Unknown') table.appendRow([icon, browser, entrance]) total_browsers[2] -= entrance if total_browsers[2]: total_browsers[0] = u'' total_browsers[1] = self.iwla._(u'Others') table.appendRow(total_browsers) table.setCellCSSClass(table.getNbRows()-1, 0, 'iwla_others') table.computeRatio(2) index.appendBlock(table)