From 4dbcef661f3dee7dab04b0b5b69d805de47df47e Mon Sep 17 00:00:00 2001 From: Gregory Soutade Date: Sat, 6 Feb 2016 14:47:47 +0100 Subject: [PATCH 01/10] Update ChangeLog --- ChangeLog | 3 ++- plugins/display/ip_to_geo.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2af6636..347484e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,4 @@ -v0.3 (17/01/2016) +v0.3 (06/02/2016) ** User ** Add referers_diff display plugin Add year statistics in month details @@ -16,6 +16,7 @@ v0.3 (17/01/2016) Add -z option (don't compress databases) Add own search enfines files Do reverse DNS on feeds parsers + Add IPToGeo plugin ** Dev ** Add istats_diff interface diff --git a/plugins/display/ip_to_geo.py b/plugins/display/ip_to_geo.py index c0127ac..a383968 100644 --- a/plugins/display/ip_to_geo.py +++ b/plugins/display/ip_to_geo.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright Grégory Soutadé 2015 +# Copyright Grégory Soutadé 2016 # This file is part of iwla From 19e9b9d4fb7df715c3ff7d9b6236894176ea14ed Mon Sep 17 00:00:00 2001 From: Gregory Soutade Date: Sun, 7 Feb 2016 10:16:33 +0100 Subject: [PATCH 02/10] Forgot to append block in all_visits plugin --- plugins/display/all_visits.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/display/all_visits.py b/plugins/display/all_visits.py index 4dbc92c..2dec3e0 100644 --- a/plugins/display/all_visits.py +++ b/plugins/display/all_visits.py @@ -96,4 +96,4 @@ class IWLADisplayAllVisits(IPlugin): else: block = display.createBlock(DisplayHTMLRawBlock) block.setRawHTML(link) - index.appendBlock(block) + index.appendBlock(block) From 9bb188b6fca158ff8f7c827fd888771805799740 Mon Sep 17 00:00:00 2001 From: Gregory Soutade Date: Sun, 7 Feb 2016 10:17:32 +0100 Subject: [PATCH 03/10] Check for presence of country_code field to avoid key error exception --- plugins/display/ip_to_geo.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/display/ip_to_geo.py b/plugins/display/ip_to_geo.py index a383968..97433a3 100644 --- a/plugins/display/ip_to_geo.py +++ b/plugins/display/ip_to_geo.py @@ -70,11 +70,11 @@ class IWLADisplayTopGeo(IPlugin): cc = None host_name = host.split(' ')[0] # hostname or ip if host_name in self.valid_visitors.keys(): - cc = self.valid_visitors[host_name]['country_code'] + cc = self.valid_visitors[host_name].get('country_code', None) else: for visitor in self.valid_visitors.values(): if visitor['remote_addr'] == host_name: - cc = visitor['country_code'] + cc = visitor.get('country_code', None) break if not cc or cc == 'ip': return None icon = '' % (self.icon_path, cc) From e9c250900618ca3a676773384239d2d7907756ab Mon Sep 17 00:00:00 2001 From: Gregory Soutade Date: Tue, 12 Apr 2016 07:56:10 +0200 Subject: [PATCH 04/10] Update iptogeo.py class --- plugins/post_analysis/iptogeo.py | 74 +++++++++++++++++++++++++++----- 1 file changed, 64 insertions(+), 10 deletions(-) diff --git a/plugins/post_analysis/iptogeo.py b/plugins/post_analysis/iptogeo.py index f887346..76a8d1c 100644 --- a/plugins/post_analysis/iptogeo.py +++ b/plugins/post_analysis/iptogeo.py @@ -1,6 +1,25 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# +# Copyright 2016 Grégory Soutadé +# +# This file is part of iptogeo. +# +# iptogeo 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. +# +# iptogeo 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 iptogeo. If not, see . +# + import socket import struct @@ -27,26 +46,44 @@ class IPToGeo(object): 5 : 'Unsupported IP version', 6 : 'IP not found'} - def __init__(self, remote_addr='127.0.0.1', remote_port=53333, timeout=None): + def __init__(self, remote_addr='127.0.0.1', remote_port=53333, timeout=None, family=socket.AF_INET): self._remote_addr = remote_addr self._remote_port = remote_port self._timeout = timeout - + self._family = family + self._create_socket() def _create_socket(self): - self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self._socket = socket.socket(self._family, socket.SOCK_STREAM) if not self._timeout is None: self._socket.settimeout(self._timeout) self._socket.connect((self._remote_addr, self._remote_port)) - def _create_request(self, ip): + def _extend_ipv6(self, ipv6): + tmp = '' + for s in ipv6.split(':'): + if not s: break + while len(s) != 4: + s = '0' + s + tmp += s + while len(tmp) < 16*2: + tmp += '0' + res = '' + for i in range(0, 15*2, 2): + res += tmp[i] + tmp[i+1] + ':' + res += tmp[30] + tmp[31] + + return res + + def _create_request(self, ip, ip_type): packet = '' packet += struct.pack('= 0: + splitted_ip = [int(a) for a in ip.split('.')] + if len(splitted_ip) != 4: + raise Exception('Bad IP %s' % (ip)) + elif ip.find(':') >= 0: + splitted_ip = [int(a, 16) for a in self._extend_ipv6(ip).split(':')] + if len(splitted_ip) != 16: + raise Exception('Bad IP %s' % (ip)) + ip_type = IPToGeo.IPV6 + else: + raise Exception('Bad IP %s' % (ip)) - packet = self._create_request(splitted_ip) + packet = self._create_request(splitted_ip, ip_type) try: self._socket.send(packet) except IOError, e: From 4baa0e6f5c32bbb535bdb0932949619ed2aaeb11 Mon Sep 17 00:00:00 2001 From: Gregory Soutade Date: Tue, 12 Apr 2016 08:17:34 +0200 Subject: [PATCH 05/10] Add alternative text for icons/flags --- display.py | 2 +- plugins/display/browsers.py | 12 ++++++------ plugins/display/ip_to_geo.py | 10 +++++----- plugins/display/operating_systems.py | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/display.py b/display.py index b5a5bc0..2eaab86 100644 --- a/display.py +++ b/display.py @@ -364,7 +364,7 @@ class DisplayHTMLPage(object): for block in self.blocks: block.build(f, filters=filters) if displayVersion: - f.write(u'
Generated by IWLA %s
' % + f.write(u'Generated by IWLA %s' % ("http://indefero.soutade.fr/p/iwla", self.iwla.getVersion())) f.write(u'') f.close() diff --git a/plugins/display/browsers.py b/plugins/display/browsers.py index 3d1202d..cfe15a3 100644 --- a/plugins/display/browsers.py +++ b/plugins/display/browsers.py @@ -83,11 +83,11 @@ class IWLADisplayBrowsers(IPlugin): for (browser, entrance) in new_list: if browser != 'unknown': try: - icon = '' % (self.icon_path, awstats_data.browsers_icons[self.icon_names[browser]]) + icon = 'Browser icon' % (self.icon_path, awstats_data.browsers_icons[self.icon_names[browser]]) except: - icon = '' % (self.icon_path) + icon = 'Browser icon' % (self.icon_path) else: - icon = '' % (self.icon_path) + icon = 'Browser icon' % (self.icon_path) browser = 'Unknown' table.appendRow([icon, browser, entrance]) total_browsers[2] += entrance @@ -115,11 +115,11 @@ class IWLADisplayBrowsers(IPlugin): for (browser, entrance) in browsers[:10]: if browser != 'unknown': try: - icon = '' % (self.icon_path, awstats_data.browsers_icons[self.icon_names[browser]]) + icon = 'Browser icon' % (self.icon_path, awstats_data.browsers_icons[self.icon_names[browser]]) except: - icon = '' % (self.icon_path) + icon = 'Browser icon' % (self.icon_path) else: - icon = '' % (self.icon_path) + icon = 'Browser icon' % (self.icon_path) browser = self.iwla._(u'Unknown') table.appendRow([icon, browser, entrance]) total_browsers[2] -= entrance diff --git a/plugins/display/ip_to_geo.py b/plugins/display/ip_to_geo.py index 97433a3..d104a64 100644 --- a/plugins/display/ip_to_geo.py +++ b/plugins/display/ip_to_geo.py @@ -54,7 +54,7 @@ class IWLADisplayTopGeo(IPlugin): def __init__(self, iwla): super(IWLADisplayTopGeo, self).__init__(iwla) self.API_VERSION = 1 - self.requires = ['IWLAPostAnalysisIPToGeo'] + #self.requires = ['IWLAPostAnalysisIPToGeo'] def load(self): self.icon_path = self.iwla.getConfValue('icon_path', '/') @@ -65,7 +65,7 @@ class IWLADisplayTopGeo(IPlugin): return True - @staticmethod # Needed to have unbound methd + @staticmethod # Needed to have unbound method def FlagFilter(host, self): cc = None host_name = host.split(' ')[0] # hostname or ip @@ -77,7 +77,7 @@ class IWLADisplayTopGeo(IPlugin): cc = visitor.get('country_code', None) break if not cc or cc == 'ip': return None - icon = '' % (self.icon_path, cc) + icon = 'Country flag' % (self.icon_path, cc) return '%s %s' % (icon ,host) def hook(self): @@ -96,7 +96,7 @@ class IWLADisplayTopGeo(IPlugin): table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'Countries'), ['', self.iwla._(u'Country'), self.iwla._(u'Visitors')]) table.setColsCSSClass(['', '', 'iwla_hit']) for (cc, visitors) in geo: - icon = '' % (self.icon_path, cc) + icon = 'Country flag' % (self.icon_path, cc) table.appendRow([icon, cc, visitors]) table.computeRatio(2) page.appendBlock(table) @@ -114,7 +114,7 @@ class IWLADisplayTopGeo(IPlugin): table = display.createBlock(DisplayHTMLBlockTable, title, ['', self.iwla._(u'Countries'), self.iwla._(u'Visitors')]) table.setColsCSSClass(['', '', 'iwla_hit']) for (cc, visitors) in geo[:10]: - icon = '' % (self.icon_path, cc) + icon = 'Country flag' % (self.icon_path, cc) table.appendRow([icon, cc, visitors]) table.computeRatio(2) index.appendBlock(table) diff --git a/plugins/display/operating_systems.py b/plugins/display/operating_systems.py index 0b4324f..dfb88c3 100644 --- a/plugins/display/operating_systems.py +++ b/plugins/display/operating_systems.py @@ -78,7 +78,7 @@ class IWLADisplayTopOperatingSystems(IPlugin): table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'Operating Systems'), ['', self.iwla._(u'Operating System'), self.iwla._(u'Entrance')]) table.setColsCSSClass(['', '', 'iwla_hit']) for (os_name, entrance) in operating_systems: - icon = '' % (self.icon_path, os_name) + icon = 'Operating system icon' % (self.icon_path, os_name) table.appendRow([icon, os_name, entrance]) page.appendBlock(table) @@ -95,7 +95,7 @@ class IWLADisplayTopOperatingSystems(IPlugin): table = display.createBlock(DisplayHTMLBlockTable, title, ['', self.iwla._(u'Operating System'), self.iwla._(u'Entrance')]) table.setColsCSSClass(['', '', 'iwla_hit']) for (family, entrance) in os_families: - icon = '' % (self.icon_path, self.icon_names[family]) + icon = 'Operating system icon' % (self.icon_path, self.icon_names[family]) table.appendRow([icon, family, entrance]) table.computeRatio(2) index.appendBlock(table) From e3b0f914bd4b0dc1e00529d209e499749b8df342 Mon Sep 17 00:00:00 2001 From: Gregory Soutade Date: Tue, 12 Apr 2016 08:34:18 +0200 Subject: [PATCH 06/10] Update documentation --- docs/index.md | 128 ++++++++++++++++++++++++++++++++++++------------ docs/modules.md | 128 ++++++++++++++++++++++++++++++++++++------------ 2 files changed, 192 insertions(+), 64 deletions(-) diff --git a/docs/index.md b/docs/index.md index 0415eea..2d5ab68 100644 --- a/docs/index.md +++ b/docs/index.md @@ -103,12 +103,13 @@ Optional configuration values ends with *. * plugins/display/browsers.py * plugins/display/feeds.py * plugins/display/hours_stats.py + * plugins/display/ip_to_geo.py * plugins/display/istats_diff.py * plugins/display/operating_systems.py - * plugins/display/referers.py * plugins/display/referers_diff.py - * plugins/display/top_downloads.py + * plugins/display/referers.py * plugins/display/top_downloads_diff.py + * plugins/display/top_downloads.py * plugins/display/top_hits.py * plugins/display/top_pages.py * plugins/display/top_visitors.py @@ -116,6 +117,8 @@ Optional configuration values ends with *. * plugins/post_analysis/browsers.py * plugins/post_analysis/feeds.py * plugins/post_analysis/hours_stats.py + * plugins/post_analysis/ip_to_geo.py + * plugins/post_analysis/iptogeo.py * plugins/post_analysis/operating_systems.py * plugins/post_analysis/referers.py * plugins/post_analysis/reverse_dns.py @@ -323,6 +326,32 @@ plugins.display.hours_stats None +plugins.display.ip_to_geo +------------------------- + + Display hook + + Add geo statistics + + Plugin requirements : + post_analysis/ip_to_geo + + Conf values needed : + create_geo_page* + + Output files : + OUTPUT_ROOT/year/month/index.html + + Statistics creation : + None + + Statistics update : + None + + Statistics deletion : + None + + plugins.display.istats_diff --------------------------- @@ -375,6 +404,32 @@ plugins.display.operating_systems None +plugins.display.referers_diff +----------------------------- + + Display hook + + Enlight new and updated key phrases in in all_key_phrases.html + + Plugin requirements : + display/referers + + Conf values needed : + None + + Output files : + None + + Statistics creation : + None + + Statistics update : + None + + Statistics deletion : + None + + plugins.display.referers ------------------------ @@ -406,15 +461,15 @@ plugins.display.referers None -plugins.display.referers_diff ------------------------------ +plugins.display.top_downloads_diff +---------------------------------- Display hook - Enlight new and updated key phrases in in all_key_phrases.html + Enlight new and updated downloads in in top_downloads.html Plugin requirements : - display/referers + display/top_downloads Conf values needed : None @@ -460,32 +515,6 @@ plugins.display.top_downloads None -plugins.display.top_downloads_diff ----------------------------------- - - Display hook - - Enlight new and updated downloads in in top_downloads.html - - Plugin requirements : - display/top_downloads - - Conf values needed : - None - - Output files : - None - - Statistics creation : - None - - Statistics update : - None - - Statistics deletion : - None - - plugins.display.top_hits ------------------------ @@ -695,6 +724,41 @@ plugins.post_analysis.hours_stats None +plugins.post_analysis.ip_to_geo +------------------------------- + + Post analysis hook + + Get country code from IP address + + Plugin requirements : + None + + Conf values needed : + iptogeo_remote_addr* + iptogeo_remote_port* + + Output files : + None + + Statistics creation : + geo => + country_code => count + None + + Statistics update : + valid_visitors: + country_code + + Statistics deletion : + None + + +plugins.post_analysis.iptogeo +----------------------------- + + + plugins.post_analysis.operating_systems --------------------------------------- diff --git a/docs/modules.md b/docs/modules.md index b68c706..0a8f2f1 100644 --- a/docs/modules.md +++ b/docs/modules.md @@ -3,12 +3,13 @@ * plugins/display/browsers.py * plugins/display/feeds.py * plugins/display/hours_stats.py + * plugins/display/ip_to_geo.py * plugins/display/istats_diff.py * plugins/display/operating_systems.py - * plugins/display/referers.py * plugins/display/referers_diff.py - * plugins/display/top_downloads.py + * plugins/display/referers.py * plugins/display/top_downloads_diff.py + * plugins/display/top_downloads.py * plugins/display/top_hits.py * plugins/display/top_pages.py * plugins/display/top_visitors.py @@ -16,6 +17,8 @@ * plugins/post_analysis/browsers.py * plugins/post_analysis/feeds.py * plugins/post_analysis/hours_stats.py + * plugins/post_analysis/ip_to_geo.py + * plugins/post_analysis/iptogeo.py * plugins/post_analysis/operating_systems.py * plugins/post_analysis/referers.py * plugins/post_analysis/reverse_dns.py @@ -223,6 +226,32 @@ plugins.display.hours_stats None +plugins.display.ip_to_geo +------------------------- + + Display hook + + Add geo statistics + + Plugin requirements : + post_analysis/ip_to_geo + + Conf values needed : + create_geo_page* + + Output files : + OUTPUT_ROOT/year/month/index.html + + Statistics creation : + None + + Statistics update : + None + + Statistics deletion : + None + + plugins.display.istats_diff --------------------------- @@ -275,6 +304,32 @@ plugins.display.operating_systems None +plugins.display.referers_diff +----------------------------- + + Display hook + + Enlight new and updated key phrases in in all_key_phrases.html + + Plugin requirements : + display/referers + + Conf values needed : + None + + Output files : + None + + Statistics creation : + None + + Statistics update : + None + + Statistics deletion : + None + + plugins.display.referers ------------------------ @@ -306,15 +361,15 @@ plugins.display.referers None -plugins.display.referers_diff ------------------------------ +plugins.display.top_downloads_diff +---------------------------------- Display hook - Enlight new and updated key phrases in in all_key_phrases.html + Enlight new and updated downloads in in top_downloads.html Plugin requirements : - display/referers + display/top_downloads Conf values needed : None @@ -360,32 +415,6 @@ plugins.display.top_downloads None -plugins.display.top_downloads_diff ----------------------------------- - - Display hook - - Enlight new and updated downloads in in top_downloads.html - - Plugin requirements : - display/top_downloads - - Conf values needed : - None - - Output files : - None - - Statistics creation : - None - - Statistics update : - None - - Statistics deletion : - None - - plugins.display.top_hits ------------------------ @@ -595,6 +624,41 @@ plugins.post_analysis.hours_stats None +plugins.post_analysis.ip_to_geo +------------------------------- + + Post analysis hook + + Get country code from IP address + + Plugin requirements : + None + + Conf values needed : + iptogeo_remote_addr* + iptogeo_remote_port* + + Output files : + None + + Statistics creation : + geo => + country_code => count + None + + Statistics update : + valid_visitors: + country_code + + Statistics deletion : + None + + +plugins.post_analysis.iptogeo +----------------------------- + + + plugins.post_analysis.operating_systems --------------------------------------- From c86961921c569bbbbccd50f987639a3537dba633 Mon Sep 17 00:00:00 2001 From: Gregory Soutade Date: Tue, 12 Apr 2016 08:41:48 +0200 Subject: [PATCH 07/10] Update translations --- iwla.pot | 127 ++++++++------- locales/fr_FR/LC_MESSAGES/iwla.mo | Bin 4198 -> 4314 bytes locales/fr_FR/LC_MESSAGES/iwla.pot | 254 +++++++++++++++++++---------- 3 files changed, 238 insertions(+), 143 deletions(-) diff --git a/iwla.pot b/iwla.pot index 478a75a..22328b1 100644 --- a/iwla.pot +++ b/iwla.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2015-03-02 19:44+CET\n" +"POT-Creation-Date: 2016-04-12 08:34+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -35,11 +35,11 @@ msgstr "" msgid "March" msgstr "" -#: display.py:32 iwla.py:440 +#: display.py:32 iwla.py:472 msgid "June" msgstr "" -#: display.py:32 iwla.py:440 +#: display.py:32 iwla.py:472 msgid "May" msgstr "" @@ -63,143 +63,146 @@ msgstr "" msgid "September" msgstr "" -#: display.py:187 +#: display.py:195 msgid "Ratio" msgstr "" -#: iwla.py:381 +#: iwla.py:413 msgid "Statistics" msgstr "" -#: iwla.py:389 iwla.py:442 +#: iwla.py:421 iwla.py:474 msgid "Not viewed Bandwidth" msgstr "" -#: iwla.py:389 iwla.py:442 +#: iwla.py:421 iwla.py:474 msgid "Visits" msgstr "" -#: iwla.py:389 iwla.py:442 plugins/display/all_visits.py:70 -#: plugins/display/feeds.py:75 plugins/display/hours_stats.py:73 +#: iwla.py:421 iwla.py:474 plugins/display/all_visits.py:70 +#: plugins/display/feeds.py:76 plugins/display/hours_stats.py:73 #: plugins/display/hours_stats.py:83 plugins/display/referers.py:95 #: plugins/display/referers.py:153 plugins/display/top_downloads.py:97 #: plugins/display/top_visitors.py:72 plugins/display/track_users.py:113 msgid "Hits" msgstr "" -#: iwla.py:389 iwla.py:442 plugins/display/all_visits.py:70 -#: plugins/display/feeds.py:75 plugins/display/hours_stats.py:73 +#: iwla.py:421 iwla.py:474 plugins/display/all_visits.py:70 +#: plugins/display/feeds.py:76 plugins/display/hours_stats.py:73 #: plugins/display/hours_stats.py:83 plugins/display/referers.py:95 #: plugins/display/referers.py:153 plugins/display/top_visitors.py:72 #: plugins/display/track_users.py:77 plugins/display/track_users.py:113 msgid "Pages" msgstr "" -#: iwla.py:389 iwla.py:442 plugins/display/all_visits.py:70 +#: iwla.py:421 iwla.py:474 plugins/display/all_visits.py:70 #: plugins/display/hours_stats.py:73 plugins/display/hours_stats.py:83 #: plugins/display/top_visitors.py:72 msgid "Bandwidth" msgstr "" -#: iwla.py:389 plugins/display/hours_stats.py:71 +#: iwla.py:421 plugins/display/hours_stats.py:71 msgid "By day" msgstr "" -#: iwla.py:389 plugins/display/hours_stats.py:73 +#: iwla.py:421 plugins/display/hours_stats.py:73 msgid "Day" msgstr "" -#: iwla.py:426 +#: iwla.py:458 msgid "Average" msgstr "" -#: iwla.py:431 iwla.py:476 +#: iwla.py:463 iwla.py:508 msgid "Total" msgstr "" -#: iwla.py:440 +#: iwla.py:472 msgid "Apr" msgstr "" -#: iwla.py:440 +#: iwla.py:472 msgid "Aug" msgstr "" -#: iwla.py:440 +#: iwla.py:472 msgid "Dec" msgstr "" -#: iwla.py:440 +#: iwla.py:472 msgid "Feb" msgstr "" -#: iwla.py:440 +#: iwla.py:472 msgid "Jan" msgstr "" -#: iwla.py:440 +#: iwla.py:472 msgid "Jul" msgstr "" -#: iwla.py:440 +#: iwla.py:472 msgid "Mar" msgstr "" -#: iwla.py:440 +#: iwla.py:472 msgid "Nov" msgstr "" -#: iwla.py:440 +#: iwla.py:472 msgid "Oct" msgstr "" -#: iwla.py:440 +#: iwla.py:472 msgid "Sep" msgstr "" -#: iwla.py:441 +#: iwla.py:473 msgid "Summary" msgstr "" -#: iwla.py:442 +#: iwla.py:474 msgid "Month" msgstr "" -#: iwla.py:442 -msgid "Visitors" -msgstr "" - -#: iwla.py:442 iwla.py:454 plugins/display/feeds.py:98 -#: plugins/display/operating_systems.py:90 plugins/display/track_users.py:108 +#: iwla.py:474 iwla.py:486 plugins/display/feeds.py:99 +#: plugins/display/ip_to_geo.py:109 plugins/display/operating_systems.py:90 +#: plugins/display/track_users.py:108 msgid "Details" msgstr "" -#: iwla.py:490 +#: iwla.py:474 plugins/display/ip_to_geo.py:96 +#: plugins/display/ip_to_geo.py:114 +msgid "Visitors" +msgstr "" + +#: iwla.py:522 msgid "Statistics for" msgstr "" -#: iwla.py:497 +#: iwla.py:529 msgid "Last update" msgstr "" -#: iwla.py:501 +#: iwla.py:533 msgid "Time analysis" msgstr "" -#: iwla.py:503 +#: iwla.py:535 msgid "hours" msgstr "" -#: iwla.py:504 +#: iwla.py:536 msgid "minutes" msgstr "" -#: iwla.py:504 +#: iwla.py:536 msgid "seconds" msgstr "" -#: plugins/display/all_visits.py:70 plugins/display/feeds.py:75 -#: plugins/display/top_visitors.py:72 +#: plugins/display/all_visits.py:70 plugins/display/feeds.py:76 +#: plugins/display/ip_to_geo.py:64 plugins/display/top_visitors.py:72 +#: plugins/display/track_users.py:113 msgid "Host" msgstr "" @@ -242,27 +245,35 @@ msgstr "" msgid "Others" msgstr "" +#: plugins/display/browsers.py:105 +msgid "Top Browsers" +msgstr "" + #: plugins/display/browsers.py:107 msgid "All Browsers" msgstr "" -#: plugins/display/feeds.py:69 +#: plugins/display/browsers.py:123 +msgid "Unknown" +msgstr "" + +#: plugins/display/feeds.py:70 msgid "All Feeds parsers" msgstr "" -#: plugins/display/feeds.py:75 +#: plugins/display/feeds.py:76 msgid "All feeds parsers" msgstr "" -#: plugins/display/feeds.py:91 +#: plugins/display/feeds.py:92 msgid "Merged feeds parsers" msgstr "" -#: plugins/display/feeds.py:96 +#: plugins/display/feeds.py:97 msgid "Feeds parsers" msgstr "" -#: plugins/display/feeds.py:103 +#: plugins/display/feeds.py:104 msgid "Found" msgstr "" @@ -302,6 +313,15 @@ msgstr "" msgid "Hours" msgstr "" +#: plugins/display/ip_to_geo.py:96 +msgid "Country" +msgstr "" + +#: plugins/display/ip_to_geo.py:96 plugins/display/ip_to_geo.py:107 +#: plugins/display/ip_to_geo.py:114 +msgid "Countries" +msgstr "" + #: plugins/display/operating_systems.py:78 #: plugins/display/operating_systems.py:88 msgid "Operating Systems" @@ -344,10 +364,6 @@ msgstr "" msgid "All Key Phrases" msgstr "" -#: plugins/display/referers.py:200 -msgid "Key phrases" -msgstr "" - #: plugins/display/referers.py:200 plugins/display/referers.py:216 msgid "Key phrase" msgstr "" @@ -356,6 +372,10 @@ msgstr "" msgid "Search" msgstr "" +#: plugins/display/referers.py:200 plugins/display/referers_diff.py:56 +msgid "Key phrases" +msgstr "" + #: plugins/display/referers.py:210 msgid "Top key phrases" msgstr "" @@ -369,6 +389,7 @@ msgid "Hit" msgstr "" #: plugins/display/top_downloads.py:71 plugins/display/top_downloads.py:91 +#: plugins/display/top_downloads_diff.py:56 msgid "All Downloads" msgstr "" @@ -402,7 +423,3 @@ msgstr "" msgid "Last Access" msgstr "" -#: plugins/display/track_users.py:113 -msgid "IP" -msgstr "" - diff --git a/locales/fr_FR/LC_MESSAGES/iwla.mo b/locales/fr_FR/LC_MESSAGES/iwla.mo index a37799c04601c042239e671b57792d4032084cea..8fe7195da6030297e4442dd414b5769663eb9cdb 100644 GIT binary patch literal 4314 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 HmCpYHCQF9< diff --git a/locales/fr_FR/LC_MESSAGES/iwla.pot b/locales/fr_FR/LC_MESSAGES/iwla.pot index 09e7e94..4239d1d 100644 --- a/locales/fr_FR/LC_MESSAGES/iwla.pot +++ b/locales/fr_FR/LC_MESSAGES/iwla.pot @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: iwla\n" -"POT-Creation-Date: 2015-03-02 19:44+CET\n" -"PO-Revision-Date: 2015-03-02 19:45+0100\n" +"POT-Creation-Date: 2016-04-12 08:34+CEST\n" +"PO-Revision-Date: 2016-04-12 08:39+0100\n" "Last-Translator: Soutadé \n" "Language-Team: iwla\n" "Language: fr_FR\n" @@ -37,11 +37,13 @@ msgstr "Juillet" msgid "March" msgstr "Mars" -#: display.py:32 iwla.py:440 +#: display.py:32 +#: iwla.py:472 msgid "June" msgstr "Juin" -#: display.py:32 iwla.py:440 +#: display.py:32 +#: iwla.py:472 msgid "May" msgstr "Mai" @@ -65,147 +67,177 @@ msgstr "Octobre" msgid "September" msgstr "Septembre" -#: display.py:187 +#: display.py:195 msgid "Ratio" msgstr "Pourcentage" -#: iwla.py:381 +#: iwla.py:413 msgid "Statistics" msgstr "Statistiques" -#: iwla.py:389 iwla.py:442 +#: iwla.py:421 +#: iwla.py:474 msgid "Not viewed Bandwidth" msgstr "Traffic non vu" -#: iwla.py:389 iwla.py:442 +#: iwla.py:421 +#: iwla.py:474 msgid "Visits" msgstr "Visites" -#: iwla.py:389 iwla.py:442 plugins/display/all_visits.py:70 -#: plugins/display/feeds.py:75 plugins/display/hours_stats.py:73 -#: plugins/display/hours_stats.py:83 plugins/display/referers.py:95 -#: plugins/display/referers.py:153 plugins/display/top_downloads.py:97 -#: plugins/display/top_visitors.py:72 plugins/display/track_users.py:113 +#: iwla.py:421 +#: iwla.py:474 +#: plugins/display/all_visits.py:70 +#: plugins/display/feeds.py:76 +#: plugins/display/hours_stats.py:73 +#: plugins/display/hours_stats.py:83 +#: plugins/display/referers.py:95 +#: plugins/display/referers.py:153 +#: plugins/display/top_downloads.py:97 +#: plugins/display/top_visitors.py:72 +#: plugins/display/track_users.py:113 msgid "Hits" msgstr "Hits" -#: iwla.py:389 iwla.py:442 plugins/display/all_visits.py:70 -#: plugins/display/feeds.py:75 plugins/display/hours_stats.py:73 -#: plugins/display/hours_stats.py:83 plugins/display/referers.py:95 -#: plugins/display/referers.py:153 plugins/display/top_visitors.py:72 -#: plugins/display/track_users.py:77 plugins/display/track_users.py:113 +#: iwla.py:421 +#: iwla.py:474 +#: plugins/display/all_visits.py:70 +#: plugins/display/feeds.py:76 +#: plugins/display/hours_stats.py:73 +#: plugins/display/hours_stats.py:83 +#: plugins/display/referers.py:95 +#: plugins/display/referers.py:153 +#: plugins/display/top_visitors.py:72 +#: plugins/display/track_users.py:77 +#: plugins/display/track_users.py:113 msgid "Pages" msgstr "Pages" -#: iwla.py:389 iwla.py:442 plugins/display/all_visits.py:70 -#: plugins/display/hours_stats.py:73 plugins/display/hours_stats.py:83 +#: iwla.py:421 +#: iwla.py:474 +#: plugins/display/all_visits.py:70 +#: plugins/display/hours_stats.py:73 +#: plugins/display/hours_stats.py:83 #: plugins/display/top_visitors.py:72 msgid "Bandwidth" msgstr "Bande passante" -#: iwla.py:389 plugins/display/hours_stats.py:71 +#: iwla.py:421 +#: plugins/display/hours_stats.py:71 msgid "By day" msgstr "Par jour" -#: iwla.py:389 plugins/display/hours_stats.py:73 +#: iwla.py:421 +#: plugins/display/hours_stats.py:73 msgid "Day" msgstr "Jour" -#: iwla.py:426 +#: iwla.py:458 msgid "Average" msgstr "Moyenne" -#: iwla.py:431 iwla.py:476 +#: iwla.py:463 +#: iwla.py:508 msgid "Total" msgstr "Total" -#: iwla.py:440 +#: iwla.py:472 msgid "Apr" msgstr "Avr" -#: iwla.py:440 +#: iwla.py:472 msgid "Aug" msgstr "Août" -#: iwla.py:440 +#: iwla.py:472 msgid "Dec" msgstr "Déc" -#: iwla.py:440 +#: iwla.py:472 msgid "Feb" msgstr "Fév" -#: iwla.py:440 +#: iwla.py:472 msgid "Jan" msgstr "Jan" -#: iwla.py:440 +#: iwla.py:472 msgid "Jul" msgstr "Jui" -#: iwla.py:440 +#: iwla.py:472 msgid "Mar" msgstr "Mars" -#: iwla.py:440 +#: iwla.py:472 msgid "Nov" msgstr "Nov" -#: iwla.py:440 +#: iwla.py:472 msgid "Oct" msgstr "Oct" -#: iwla.py:440 +#: iwla.py:472 msgid "Sep" msgstr "Sep" -#: iwla.py:441 +#: iwla.py:473 msgid "Summary" msgstr "Résumé" -#: iwla.py:442 +#: iwla.py:474 msgid "Month" msgstr "Mois" -#: iwla.py:442 -msgid "Visitors" -msgstr "Visiteurs" - -#: iwla.py:442 iwla.py:454 plugins/display/feeds.py:98 -#: plugins/display/operating_systems.py:90 plugins/display/track_users.py:108 +#: iwla.py:474 +#: iwla.py:486 +#: plugins/display/feeds.py:99 +#: plugins/display/ip_to_geo.py:109 +#: plugins/display/operating_systems.py:90 +#: plugins/display/track_users.py:108 msgid "Details" msgstr "Détails" -#: iwla.py:490 +#: iwla.py:474 +#: plugins/display/ip_to_geo.py:96 +#: plugins/display/ip_to_geo.py:114 +msgid "Visitors" +msgstr "Visiteurs" + +#: iwla.py:522 msgid "Statistics for" msgstr "Statistiques pour" -#: iwla.py:497 +#: iwla.py:529 msgid "Last update" msgstr "Dernière mise à jour" -#: iwla.py:501 +#: iwla.py:533 msgid "Time analysis" msgstr "Durée de l'analyse" -#: iwla.py:503 +#: iwla.py:535 msgid "hours" msgstr "heures " -#: iwla.py:504 +#: iwla.py:536 msgid "minutes" msgstr "minutes" -#: iwla.py:504 +#: iwla.py:536 msgid "seconds" msgstr "secondes" -#: plugins/display/all_visits.py:70 plugins/display/feeds.py:75 +#: plugins/display/all_visits.py:70 +#: plugins/display/feeds.py:76 +#: plugins/display/ip_to_geo.py:64 #: plugins/display/top_visitors.py:72 +#: plugins/display/track_users.py:113 msgid "Host" msgstr "Hôte" -#: plugins/display/all_visits.py:70 plugins/display/top_visitors.py:72 +#: plugins/display/all_visits.py:70 +#: plugins/display/top_visitors.py:72 msgid "Last seen" msgstr "Dernière visite" @@ -213,7 +245,8 @@ msgstr "Dernière visite" msgid "All visits" msgstr "Toutes les visites" -#: plugins/display/all_visits.py:93 plugins/display/top_visitors.py:72 +#: plugins/display/all_visits.py:93 +#: plugins/display/top_visitors.py:72 msgid "Top visitors" msgstr "Top visiteurs" @@ -221,50 +254,70 @@ msgstr "Top visiteurs" msgid "Browsers" msgstr "Navigateurs" -#: plugins/display/browsers.py:79 plugins/display/browsers.py:113 +#: plugins/display/browsers.py:79 +#: plugins/display/browsers.py:113 msgid "Browser" msgstr "Navigateur" -#: plugins/display/browsers.py:79 plugins/display/browsers.py:113 +#: plugins/display/browsers.py:79 +#: plugins/display/browsers.py:113 #: plugins/display/operating_systems.py:78 -#: plugins/display/operating_systems.py:95 plugins/display/top_hits.py:71 -#: plugins/display/top_hits.py:97 plugins/display/top_pages.py:71 +#: plugins/display/operating_systems.py:95 +#: plugins/display/top_hits.py:71 +#: plugins/display/top_hits.py:97 +#: plugins/display/top_pages.py:71 #: plugins/display/top_pages.py:96 msgid "Entrance" msgstr "Entrées" -#: plugins/display/browsers.py:98 plugins/display/browsers.py:128 -#: plugins/display/referers.py:110 plugins/display/referers.py:125 -#: plugins/display/referers.py:140 plugins/display/referers.py:163 -#: plugins/display/referers.py:174 plugins/display/referers.py:185 -#: plugins/display/referers.py:222 plugins/display/top_downloads.py:83 -#: plugins/display/top_downloads.py:103 plugins/display/top_hits.py:82 -#: plugins/display/top_hits.py:103 plugins/display/top_pages.py:82 -#: plugins/display/top_pages.py:102 plugins/display/top_visitors.py:92 +#: plugins/display/browsers.py:98 +#: plugins/display/browsers.py:128 +#: plugins/display/referers.py:110 +#: plugins/display/referers.py:125 +#: plugins/display/referers.py:140 +#: plugins/display/referers.py:163 +#: plugins/display/referers.py:174 +#: plugins/display/referers.py:185 +#: plugins/display/referers.py:222 +#: plugins/display/top_downloads.py:83 +#: plugins/display/top_downloads.py:103 +#: plugins/display/top_hits.py:82 +#: plugins/display/top_hits.py:103 +#: plugins/display/top_pages.py:82 +#: plugins/display/top_pages.py:102 +#: plugins/display/top_visitors.py:92 msgid "Others" msgstr "Autres" +#: plugins/display/browsers.py:105 +msgid "Top Browsers" +msgstr "Top Navigateurs" + #: plugins/display/browsers.py:107 msgid "All Browsers" msgstr "Tous les navigateurs" -#: plugins/display/feeds.py:69 +#: plugins/display/browsers.py:123 +msgid "Unknown" +msgstr "Inconnu" + +#: plugins/display/feeds.py:70 msgid "All Feeds parsers" msgstr "Tous les agrégateurs" -#: plugins/display/feeds.py:75 +#: plugins/display/feeds.py:76 msgid "All feeds parsers" msgstr "Tous les agrégateurs" -#: plugins/display/feeds.py:91 +#: plugins/display/feeds.py:92 msgid "Merged feeds parsers" msgstr "Agrégateurs fusionnés" -#: plugins/display/feeds.py:96 +#: plugins/display/feeds.py:97 msgid "Feeds parsers" msgstr "Agrégateurs" -#: plugins/display/feeds.py:103 +#: plugins/display/feeds.py:104 msgid "Found" msgstr "Trouvé" @@ -304,6 +357,16 @@ msgstr "Par heures" msgid "Hours" msgstr "Heures" +#: plugins/display/ip_to_geo.py:96 +msgid "Country" +msgstr "Pays" + +#: plugins/display/ip_to_geo.py:96 +#: plugins/display/ip_to_geo.py:107 +#: plugins/display/ip_to_geo.py:114 +msgid "Countries" +msgstr "Pays" + #: plugins/display/operating_systems.py:78 #: plugins/display/operating_systems.py:88 msgid "Operating Systems" @@ -318,19 +381,23 @@ msgstr "Système d'exploitation" msgid "Connexion from" msgstr "Connexion depuis" -#: plugins/display/referers.py:95 plugins/display/referers.py:153 +#: plugins/display/referers.py:95 +#: plugins/display/referers.py:153 msgid "Origin" msgstr "Origine" -#: plugins/display/referers.py:99 plugins/display/referers.py:156 +#: plugins/display/referers.py:99 +#: plugins/display/referers.py:156 msgid "Search Engine" msgstr "Moteur de recherche" -#: plugins/display/referers.py:114 plugins/display/referers.py:167 +#: plugins/display/referers.py:114 +#: plugins/display/referers.py:167 msgid "External URL" msgstr "URL externe" -#: plugins/display/referers.py:129 plugins/display/referers.py:178 +#: plugins/display/referers.py:129 +#: plugins/display/referers.py:178 msgid "External URL (robot)" msgstr "URL externe (robot)" @@ -347,17 +414,20 @@ msgid "All Key Phrases" msgstr "Toutes les phrases clé" #: plugins/display/referers.py:200 -msgid "Key phrases" -msgstr "Phrases clé" - -#: plugins/display/referers.py:200 plugins/display/referers.py:216 +#: plugins/display/referers.py:216 msgid "Key phrase" msgstr "Phrase clé" -#: plugins/display/referers.py:200 plugins/display/referers.py:216 +#: plugins/display/referers.py:200 +#: plugins/display/referers.py:216 msgid "Search" msgstr "Recherche" +#: plugins/display/referers.py:200 +#: plugins/display/referers_diff.py:56 +msgid "Key phrases" +msgstr "Phrases clé" + #: plugins/display/referers.py:210 msgid "Top key phrases" msgstr "Top phrases clé" @@ -370,13 +440,18 @@ msgstr "Toutes les phrases clé" msgid "Hit" msgstr "Hit" -#: plugins/display/top_downloads.py:71 plugins/display/top_downloads.py:91 +#: plugins/display/top_downloads.py:71 +#: plugins/display/top_downloads.py:91 +#: plugins/display/top_downloads_diff.py:56 msgid "All Downloads" msgstr "Tous les téléchargements" -#: plugins/display/top_downloads.py:71 plugins/display/top_downloads.py:97 -#: plugins/display/top_hits.py:71 plugins/display/top_hits.py:97 -#: plugins/display/top_pages.py:71 plugins/display/top_pages.py:96 +#: plugins/display/top_downloads.py:71 +#: plugins/display/top_downloads.py:97 +#: plugins/display/top_hits.py:71 +#: plugins/display/top_hits.py:97 +#: plugins/display/top_pages.py:71 +#: plugins/display/top_pages.py:96 msgid "URI" msgstr "URI" @@ -384,11 +459,13 @@ msgstr "URI" msgid "Top Downloads" msgstr "Top Téléchargements" -#: plugins/display/top_hits.py:71 plugins/display/top_hits.py:91 +#: plugins/display/top_hits.py:71 +#: plugins/display/top_hits.py:91 msgid "All Hits" msgstr "Tous les hits" -#: plugins/display/top_pages.py:71 plugins/display/top_pages.py:90 +#: plugins/display/top_pages.py:71 +#: plugins/display/top_pages.py:90 msgid "All Pages" msgstr "Toutes les pages" @@ -396,17 +473,18 @@ msgstr "Toutes les pages" msgid "Top Pages" msgstr "Top Pages" -#: plugins/display/track_users.py:77 plugins/display/track_users.py:106 +#: plugins/display/track_users.py:77 +#: plugins/display/track_users.py:106 msgid "Tracked users" msgstr "Utilisateurs traqués" -#: plugins/display/track_users.py:77 plugins/display/track_users.py:113 +#: plugins/display/track_users.py:77 +#: plugins/display/track_users.py:113 msgid "Last Access" msgstr "Dernière visite" -#: plugins/display/track_users.py:113 -msgid "IP" -msgstr "IP" +#~ msgid "IP" +#~ msgstr "IP" #~ msgid "Page" #~ msgstr "Page" From 2c07b57baf96c61a3e2ad4fde78192d003372f5a Mon Sep 17 00:00:00 2001 From: Gregory Soutade Date: Tue, 12 Apr 2016 08:45:05 +0200 Subject: [PATCH 08/10] Update OS icons --- resources/icon/os/macosx4.png | Bin 0 -> 329 bytes resources/icon/os/macosx5.png | Bin 0 -> 329 bytes resources/icon/os/macosx6.png | Bin 0 -> 329 bytes resources/icon/os/macosx7.png | Bin 0 -> 329 bytes resources/icon/os/macosx8.png | Bin 0 -> 329 bytes resources/icon/os/macosx9.png | Bin 0 -> 329 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 resources/icon/os/macosx4.png create mode 100644 resources/icon/os/macosx5.png create mode 100644 resources/icon/os/macosx6.png create mode 100644 resources/icon/os/macosx7.png create mode 100644 resources/icon/os/macosx8.png create mode 100644 resources/icon/os/macosx9.png diff --git a/resources/icon/os/macosx4.png b/resources/icon/os/macosx4.png new file mode 100644 index 0000000000000000000000000000000000000000..777f35057c6ba959bd664254921745decfc01581 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^d?3ui3?$#C89V|~`X#OrCC){ui6xo&c?uz!xv2~} zrFnV^h6W00FUyMb6pRcEj1>$`tPCuy3``ZY4GawodhLDWfLhs0Jbhi+FEerRa_H>8 z#WWWv#981GS2f98_(Ul_x%0)@85yAfA_WL?>~FaIA67<;1f`9qNj^v zNX4z>6L0qXaQN_urL9FM*X-UtleR5q)^keFXMEZ6o9Atg!mhe7XQ>H(kAH09@p-;- ziDSlZqmGJB^BL$`tPCuy3``ZY4GawodhLDWfLhs0Jbhi+FEerRa_H>8 z#WWWv#981GS2f98_(Ul_x%0)@85yAfA_WL?>~FaIA67<;1f`9qNj^v zNX4z>6L0qXaQN_urL9FM*X-UtleR5q)^keFXMEZ6o9Atg!mhe7XQ>H(kAH09@p-;- ziDSlZqmGJB^BL$`tPCuy3``ZY4GawodhLDWfLhs0Jbhi+FEerRa_H>8 z#WWWv#981GS2f98_(Ul_x%0)@85yAfA_WL?>~FaIA67<;1f`9qNj^v zNX4z>6L0qXaQN_urL9FM*X-UtleR5q)^keFXMEZ6o9Atg!mhe7XQ>H(kAH09@p-;- ziDSlZqmGJB^BL$`tPCuy3``ZY4GawodhLDWfLhs0Jbhi+FEerRa_H>8 z#WWWv#981GS2f98_(Ul_x%0)@85yAfA_WL?>~FaIA67<;1f`9qNj^v zNX4z>6L0qXaQN_urL9FM*X-UtleR5q)^keFXMEZ6o9Atg!mhe7XQ>H(kAH09@p-;- ziDSlZqmGJB^BL$`tPCuy3``ZY4GawodhLDWfLhs0Jbhi+FEerRa_H>8 z#WWWv#981GS2f98_(Ul_x%0)@85yAfA_WL?>~FaIA67<;1f`9qNj^v zNX4z>6L0qXaQN_urL9FM*X-UtleR5q)^keFXMEZ6o9Atg!mhe7XQ>H(kAH09@p-;- ziDSlZqmGJB^BL$`tPCuy3``ZY4GawodhLDWfLhs0Jbhi+FEerRa_H>8 z#WWWv#981GS2f98_(Ul_x%0)@85yAfA_WL?>~FaIA67<;1f`9qNj^v zNX4z>6L0qXaQN_urL9FM*X-UtleR5q)^keFXMEZ6o9Atg!mhe7XQ>H(kAH09@p-;- ziDSlZqmGJB^BL Date: Tue, 12 Apr 2016 09:23:07 +0200 Subject: [PATCH 09/10] Revert commit 19e9b9d4fb7df715c3ff7d9b6236894176ea14ed, multiple top visitors included --- plugins/display/all_visits.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/display/all_visits.py b/plugins/display/all_visits.py index 2dec3e0..4dbc92c 100644 --- a/plugins/display/all_visits.py +++ b/plugins/display/all_visits.py @@ -96,4 +96,4 @@ class IWLADisplayAllVisits(IPlugin): else: block = display.createBlock(DisplayHTMLRawBlock) block.setRawHTML(link) - index.appendBlock(block) + index.appendBlock(block) From 9a593713d10cdb0d92f41a9a25b8e844de09ead2 Mon Sep 17 00:00:00 2001 From: Gregory Soutade Date: Tue, 12 Apr 2016 09:35:03 +0200 Subject: [PATCH 10/10] Add real names to icons/flags instead of generic ones --- display.py | 2 +- plugins/display/browsers.py | 14 ++++++++------ plugins/display/ip_to_geo.py | 6 +++--- plugins/display/operating_systems.py | 4 ++-- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/display.py b/display.py index 2eaab86..35dc0b3 100644 --- a/display.py +++ b/display.py @@ -364,7 +364,7 @@ class DisplayHTMLPage(object): for block in self.blocks: block.build(f, filters=filters) if displayVersion: - f.write(u'Generated by IWLA %s' % + f.write(u'
Generated by IWLA %s
' % ("http://indefero.soutade.fr/p/iwla", self.iwla.getVersion())) f.write(u'') f.close() diff --git a/plugins/display/browsers.py b/plugins/display/browsers.py index cfe15a3..9052162 100644 --- a/plugins/display/browsers.py +++ b/plugins/display/browsers.py @@ -83,11 +83,12 @@ class IWLADisplayBrowsers(IPlugin): for (browser, entrance) in new_list: if browser != 'unknown': try: - icon = 'Browser icon' % (self.icon_path, awstats_data.browsers_icons[self.icon_names[browser]]) + name = awstats_data.browsers_icons[self.icon_names[browser]] + icon = '%s icon' % (name, self.icon_path, name) except: - icon = 'Browser icon' % (self.icon_path) + icon = 'Unknown browser icon' % (self.icon_path) else: - icon = 'Browser icon' % (self.icon_path) + icon = 'Unknown browser icon' % (self.icon_path) browser = 'Unknown' table.appendRow([icon, browser, entrance]) total_browsers[2] += entrance @@ -115,11 +116,12 @@ class IWLADisplayBrowsers(IPlugin): for (browser, entrance) in browsers[:10]: if browser != 'unknown': try: - icon = 'Browser icon' % (self.icon_path, awstats_data.browsers_icons[self.icon_names[browser]]) + name = awstats_data.browsers_icons[self.icon_names[browser]] + icon = '%s icon' % (name, self.icon_path, name) except: - icon = 'Browser icon' % (self.icon_path) + icon = 'Unknown browser icon' % (self.icon_path) else: - icon = 'Browser icon' % (self.icon_path) + icon = 'Unknown browser icon' % (self.icon_path) browser = self.iwla._(u'Unknown') table.appendRow([icon, browser, entrance]) total_browsers[2] -= entrance diff --git a/plugins/display/ip_to_geo.py b/plugins/display/ip_to_geo.py index d104a64..8b01260 100644 --- a/plugins/display/ip_to_geo.py +++ b/plugins/display/ip_to_geo.py @@ -77,7 +77,7 @@ class IWLADisplayTopGeo(IPlugin): cc = visitor.get('country_code', None) break if not cc or cc == 'ip': return None - icon = 'Country flag' % (self.icon_path, cc) + icon = '%s flag' % (cc, self.icon_path, cc) return '%s %s' % (icon ,host) def hook(self): @@ -96,7 +96,7 @@ class IWLADisplayTopGeo(IPlugin): table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'Countries'), ['', self.iwla._(u'Country'), self.iwla._(u'Visitors')]) table.setColsCSSClass(['', '', 'iwla_hit']) for (cc, visitors) in geo: - icon = 'Country flag' % (self.icon_path, cc) + icon = '%s flag' % (cc, self.icon_path, cc) table.appendRow([icon, cc, visitors]) table.computeRatio(2) page.appendBlock(table) @@ -114,7 +114,7 @@ class IWLADisplayTopGeo(IPlugin): table = display.createBlock(DisplayHTMLBlockTable, title, ['', self.iwla._(u'Countries'), self.iwla._(u'Visitors')]) table.setColsCSSClass(['', '', 'iwla_hit']) for (cc, visitors) in geo[:10]: - icon = 'Country flag' % (self.icon_path, cc) + icon = '%s flag' % (cc, self.icon_path, cc) table.appendRow([icon, cc, visitors]) table.computeRatio(2) index.appendBlock(table) diff --git a/plugins/display/operating_systems.py b/plugins/display/operating_systems.py index dfb88c3..98bec17 100644 --- a/plugins/display/operating_systems.py +++ b/plugins/display/operating_systems.py @@ -78,7 +78,7 @@ class IWLADisplayTopOperatingSystems(IPlugin): table = display.createBlock(DisplayHTMLBlockTable, self.iwla._(u'Operating Systems'), ['', self.iwla._(u'Operating System'), self.iwla._(u'Entrance')]) table.setColsCSSClass(['', '', 'iwla_hit']) for (os_name, entrance) in operating_systems: - icon = 'Operating system icon' % (self.icon_path, os_name) + icon = '%s icon' % (os_name, self.icon_path, os_name) table.appendRow([icon, os_name, entrance]) page.appendBlock(table) @@ -95,7 +95,7 @@ class IWLADisplayTopOperatingSystems(IPlugin): table = display.createBlock(DisplayHTMLBlockTable, title, ['', self.iwla._(u'Operating System'), self.iwla._(u'Entrance')]) table.setColsCSSClass(['', '', 'iwla_hit']) for (family, entrance) in os_families: - icon = 'Operating system icon' % (self.icon_path, self.icon_names[family]) + icon = '%s icon' % (self.icon_names[family], self.icon_path, self.icon_names[family]) table.appendRow([icon, family, entrance]) table.computeRatio(2) index.appendBlock(table)