Simple Download Monitor - Version 0.12

Version Description

  • Support for country-flagging of each download. This feature requires that my plugin Ip-to-Country ( http://wordpress.org/extend/plugins/ip-to-country/ ) is installed and set-up.

I am still undecided if it is better to assign countries when a download occurs or leave it until a list of downloads is displayed. I can see benefits and drawbacks for both solutions. At the moment the plugin leaves country-assignment until the list is displayed, but I am interested in hearing your thoughts about this decision.

This function is only supported with PHP5.

  • New setting for "ignored users". Downloads made by users whose names are listed (in pipe-separated list) in configuration will not be monitored. It is useful for admins who want to test that their download links work, but don't want to record their tests as "downloads".

  • Ability to ignore downloads if someone requests one file from one IP address several times within a short time interval. There is an option that let's admin specify how long this interval is (in seconds), and if multiple downloads of the same file from the same IP address happen within so many seconds of each other, only the first one gets recorded. This is useful for download accelerators which try to download one file in several pieces, with longer time intervals also for redownloads (e.g. download fails the first time so the user tries again).

Download this release

Release Info

Developer pepak.net
Plugin Icon 128x128 Simple Download Monitor
Version 0.12
Comparing to
See all releases

Code changes from version 0.11 to 0.12

Files changed (255) hide show
  1. flags/_readme.txt +9 -0
  2. flags/ad.png +0 -0
  3. flags/ae.png +0 -0
  4. flags/af.png +0 -0
  5. flags/ag.png +0 -0
  6. flags/ai.png +0 -0
  7. flags/al.png +0 -0
  8. flags/am.png +0 -0
  9. flags/an.png +0 -0
  10. flags/ao.png +0 -0
  11. flags/ar.png +0 -0
  12. flags/as.png +0 -0
  13. flags/at.png +0 -0
  14. flags/au.png +0 -0
  15. flags/aw.png +0 -0
  16. flags/ax.png +0 -0
  17. flags/az.png +0 -0
  18. flags/ba.png +0 -0
  19. flags/bb.png +0 -0
  20. flags/bd.png +0 -0
  21. flags/be.png +0 -0
  22. flags/bf.png +0 -0
  23. flags/bg.png +0 -0
  24. flags/bh.png +0 -0
  25. flags/bi.png +0 -0
  26. flags/bj.png +0 -0
  27. flags/bm.png +0 -0
  28. flags/bn.png +0 -0
  29. flags/bo.png +0 -0
  30. flags/br.png +0 -0
  31. flags/bs.png +0 -0
  32. flags/bt.png +0 -0
  33. flags/bv.png +0 -0
  34. flags/bw.png +0 -0
  35. flags/by.png +0 -0
  36. flags/bz.png +0 -0
  37. flags/ca.png +0 -0
  38. flags/catalonia.png +0 -0
  39. flags/cc.png +0 -0
  40. flags/cd.png +0 -0
  41. flags/cf.png +0 -0
  42. flags/cg.png +0 -0
  43. flags/ch.png +0 -0
  44. flags/ci.png +0 -0
  45. flags/ck.png +0 -0
  46. flags/cl.png +0 -0
  47. flags/cm.png +0 -0
  48. flags/cn.png +0 -0
  49. flags/co.png +0 -0
  50. flags/cr.png +0 -0
  51. flags/cs.png +0 -0
  52. flags/cu.png +0 -0
  53. flags/cv.png +0 -0
  54. flags/cx.png +0 -0
  55. flags/cy.png +0 -0
  56. flags/cz.png +0 -0
  57. flags/de.png +0 -0
  58. flags/dj.png +0 -0
  59. flags/dk.png +0 -0
  60. flags/dm.png +0 -0
  61. flags/do.png +0 -0
  62. flags/dz.png +0 -0
  63. flags/ec.png +0 -0
  64. flags/ee.png +0 -0
  65. flags/eg.png +0 -0
  66. flags/eh.png +0 -0
  67. flags/england.png +0 -0
  68. flags/er.png +0 -0
  69. flags/es.png +0 -0
  70. flags/et.png +0 -0
  71. flags/europeanunion.png +0 -0
  72. flags/fam.png +0 -0
  73. flags/fi.png +0 -0
  74. flags/fj.png +0 -0
  75. flags/fk.png +0 -0
  76. flags/fm.png +0 -0
  77. flags/fo.png +0 -0
  78. flags/fr.png +0 -0
  79. flags/ga.png +0 -0
  80. flags/gb.png +0 -0
  81. flags/gd.png +0 -0
  82. flags/ge.png +0 -0
  83. flags/gf.png +0 -0
  84. flags/gh.png +0 -0
  85. flags/gi.png +0 -0
  86. flags/gl.png +0 -0
  87. flags/gm.png +0 -0
  88. flags/gn.png +0 -0
  89. flags/gp.png +0 -0
  90. flags/gq.png +0 -0
  91. flags/gr.png +0 -0
  92. flags/gs.png +0 -0
  93. flags/gt.png +0 -0
  94. flags/gu.png +0 -0
  95. flags/gw.png +0 -0
  96. flags/gy.png +0 -0
  97. flags/hk.png +0 -0
  98. flags/hm.png +0 -0
  99. flags/hn.png +0 -0
  100. flags/hr.png +0 -0
  101. flags/ht.png +0 -0
  102. flags/hu.png +0 -0
  103. flags/id.png +0 -0
  104. flags/ie.png +0 -0
  105. flags/il.png +0 -0
  106. flags/in.png +0 -0
  107. flags/io.png +0 -0
  108. flags/iq.png +0 -0
  109. flags/ir.png +0 -0
  110. flags/is.png +0 -0
  111. flags/it.png +0 -0
  112. flags/jm.png +0 -0
  113. flags/jo.png +0 -0
  114. flags/jp.png +0 -0
  115. flags/ke.png +0 -0
  116. flags/kg.png +0 -0
  117. flags/kh.png +0 -0
  118. flags/ki.png +0 -0
  119. flags/km.png +0 -0
  120. flags/kn.png +0 -0
  121. flags/kp.png +0 -0
  122. flags/kr.png +0 -0
  123. flags/kw.png +0 -0
  124. flags/ky.png +0 -0
  125. flags/kz.png +0 -0
  126. flags/la.png +0 -0
  127. flags/lb.png +0 -0
  128. flags/lc.png +0 -0
  129. flags/li.png +0 -0
  130. flags/lk.png +0 -0
  131. flags/lr.png +0 -0
  132. flags/ls.png +0 -0
  133. flags/lt.png +0 -0
  134. flags/lu.png +0 -0
  135. flags/lv.png +0 -0
  136. flags/ly.png +0 -0
  137. flags/ma.png +0 -0
  138. flags/mc.png +0 -0
  139. flags/md.png +0 -0
  140. flags/me.png +0 -0
  141. flags/mg.png +0 -0
  142. flags/mh.png +0 -0
  143. flags/mk.png +0 -0
  144. flags/ml.png +0 -0
  145. flags/mm.png +0 -0
  146. flags/mn.png +0 -0
  147. flags/mo.png +0 -0
  148. flags/mp.png +0 -0
  149. flags/mq.png +0 -0
  150. flags/mr.png +0 -0
  151. flags/ms.png +0 -0
  152. flags/mt.png +0 -0
  153. flags/mu.png +0 -0
  154. flags/mv.png +0 -0
  155. flags/mw.png +0 -0
  156. flags/mx.png +0 -0
  157. flags/my.png +0 -0
  158. flags/mz.png +0 -0
  159. flags/na.png +0 -0
  160. flags/nc.png +0 -0
  161. flags/ne.png +0 -0
  162. flags/nf.png +0 -0
  163. flags/ng.png +0 -0
  164. flags/ni.png +0 -0
  165. flags/nl.png +0 -0
  166. flags/no.png +0 -0
  167. flags/np.png +0 -0
  168. flags/nr.png +0 -0
  169. flags/nu.png +0 -0
  170. flags/nz.png +0 -0
  171. flags/om.png +0 -0
  172. flags/pa.png +0 -0
  173. flags/pe.png +0 -0
  174. flags/pf.png +0 -0
  175. flags/pg.png +0 -0
  176. flags/ph.png +0 -0
  177. flags/pk.png +0 -0
  178. flags/pl.png +0 -0
  179. flags/pm.png +0 -0
  180. flags/pn.png +0 -0
  181. flags/pr.png +0 -0
  182. flags/ps.png +0 -0
  183. flags/pt.png +0 -0
  184. flags/pw.png +0 -0
  185. flags/py.png +0 -0
  186. flags/qa.png +0 -0
  187. flags/re.png +0 -0
  188. flags/ro.png +0 -0
  189. flags/rs.png +0 -0
  190. flags/ru.png +0 -0
  191. flags/rw.png +0 -0
  192. flags/sa.png +0 -0
  193. flags/sb.png +0 -0
  194. flags/sc.png +0 -0
  195. flags/scotland.png +0 -0
  196. flags/sd.png +0 -0
  197. flags/se.png +0 -0
  198. flags/sg.png +0 -0
  199. flags/sh.png +0 -0
  200. flags/si.png +0 -0
  201. flags/sj.png +0 -0
  202. flags/sk.png +0 -0
  203. flags/sl.png +0 -0
  204. flags/sm.png +0 -0
  205. flags/sn.png +0 -0
  206. flags/so.png +0 -0
  207. flags/sr.png +0 -0
  208. flags/st.png +0 -0
  209. flags/sv.png +0 -0
  210. flags/sy.png +0 -0
  211. flags/sz.png +0 -0
  212. flags/tc.png +0 -0
  213. flags/td.png +0 -0
  214. flags/tf.png +0 -0
  215. flags/tg.png +0 -0
  216. flags/th.png +0 -0
  217. flags/tj.png +0 -0
  218. flags/tk.png +0 -0
  219. flags/tl.png +0 -0
  220. flags/tm.png +0 -0
  221. flags/tn.png +0 -0
  222. flags/to.png +0 -0
  223. flags/tr.png +0 -0
  224. flags/tt.png +0 -0
  225. flags/tv.png +0 -0
  226. flags/tw.png +0 -0
  227. flags/tz.png +0 -0
  228. flags/ua.png +0 -0
  229. flags/ug.png +0 -0
  230. flags/um.png +0 -0
  231. flags/us.png +0 -0
  232. flags/uy.png +0 -0
  233. flags/uz.png +0 -0
  234. flags/va.png +0 -0
  235. flags/vc.png +0 -0
  236. flags/ve.png +0 -0
  237. flags/vg.png +0 -0
  238. flags/vi.png +0 -0
  239. flags/vn.png +0 -0
  240. flags/vu.png +0 -0
  241. flags/wales.png +0 -0
  242. flags/wf.png +0 -0
  243. flags/ws.png +0 -0
  244. flags/ye.png +0 -0
  245. flags/yt.png +0 -0
  246. flags/za.png +0 -0
  247. flags/zm.png +0 -0
  248. flags/zw.png +0 -0
  249. lang/cs_CZ.mo +0 -0
  250. lang/cs_CZ.po +96 -178
  251. readme.txt +30 -1
  252. screenshot-1.png +0 -0
  253. screenshot-3.png +0 -0
  254. sdmon.css +0 -10
  255. simple-download-monitor.php +73 -29
flags/_readme.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ Flag icons - http://www.famfamfam.com
2
+
3
+ These icons are public domain, and as such are free for any use (attribution appreciated but not required).
4
+
5
+ Note that these flags are named using the ISO3166-1 alpha-2 country codes where appropriate. A list of codes can be found at http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
6
+
7
+ If you find these icons useful, please donate via paypal to mjames@gmail.com (or click the donate button available at http://www.famfamfam.com/lab/icons/silk)
8
+
9
+ Contact: mjames@gmail.com
flags/ad.png ADDED
Binary file
flags/ae.png ADDED
Binary file
flags/af.png ADDED
Binary file
flags/ag.png ADDED
Binary file
flags/ai.png ADDED
Binary file
flags/al.png ADDED
Binary file
flags/am.png ADDED
Binary file
flags/an.png ADDED
Binary file
flags/ao.png ADDED
Binary file
flags/ar.png ADDED
Binary file
flags/as.png ADDED
Binary file
flags/at.png ADDED
Binary file
flags/au.png ADDED
Binary file
flags/aw.png ADDED
Binary file
flags/ax.png ADDED
Binary file
flags/az.png ADDED
Binary file
flags/ba.png ADDED
Binary file
flags/bb.png ADDED
Binary file
flags/bd.png ADDED
Binary file
flags/be.png ADDED
Binary file
flags/bf.png ADDED
Binary file
flags/bg.png ADDED
Binary file
flags/bh.png ADDED
Binary file
flags/bi.png ADDED
Binary file
flags/bj.png ADDED
Binary file
flags/bm.png ADDED
Binary file
flags/bn.png ADDED
Binary file
flags/bo.png ADDED
Binary file
flags/br.png ADDED
Binary file
flags/bs.png ADDED
Binary file
flags/bt.png ADDED
Binary file
flags/bv.png ADDED
Binary file
flags/bw.png ADDED
Binary file
flags/by.png ADDED
Binary file
flags/bz.png ADDED
Binary file
flags/ca.png ADDED
Binary file
flags/catalonia.png ADDED
Binary file
flags/cc.png ADDED
Binary file
flags/cd.png ADDED
Binary file
flags/cf.png ADDED
Binary file
flags/cg.png ADDED
Binary file
flags/ch.png ADDED
Binary file
flags/ci.png ADDED
Binary file
flags/ck.png ADDED
Binary file
flags/cl.png ADDED
Binary file
flags/cm.png ADDED
Binary file
flags/cn.png ADDED
Binary file
flags/co.png ADDED
Binary file
flags/cr.png ADDED
Binary file
flags/cs.png ADDED
Binary file
flags/cu.png ADDED
Binary file
flags/cv.png ADDED
Binary file
flags/cx.png ADDED
Binary file
flags/cy.png ADDED
Binary file
flags/cz.png ADDED
Binary file
flags/de.png ADDED
Binary file
flags/dj.png ADDED
Binary file
flags/dk.png ADDED
Binary file
flags/dm.png ADDED
Binary file
flags/do.png ADDED
Binary file
flags/dz.png ADDED
Binary file
flags/ec.png ADDED
Binary file
flags/ee.png ADDED
Binary file
flags/eg.png ADDED
Binary file
flags/eh.png ADDED
Binary file
flags/england.png ADDED
Binary file
flags/er.png ADDED
Binary file
flags/es.png ADDED
Binary file
flags/et.png ADDED
Binary file
flags/europeanunion.png ADDED
Binary file
flags/fam.png ADDED
Binary file
flags/fi.png ADDED
Binary file
flags/fj.png ADDED
Binary file
flags/fk.png ADDED
Binary file
flags/fm.png ADDED
Binary file
flags/fo.png ADDED
Binary file
flags/fr.png ADDED
Binary file
flags/ga.png ADDED
Binary file
flags/gb.png ADDED
Binary file
flags/gd.png ADDED
Binary file
flags/ge.png ADDED
Binary file
flags/gf.png ADDED
Binary file
flags/gh.png ADDED
Binary file
flags/gi.png ADDED
Binary file
flags/gl.png ADDED
Binary file
flags/gm.png ADDED
Binary file
flags/gn.png ADDED
Binary file
flags/gp.png ADDED
Binary file
flags/gq.png ADDED
Binary file
flags/gr.png ADDED
Binary file
flags/gs.png ADDED
Binary file
flags/gt.png ADDED
Binary file
flags/gu.png ADDED
Binary file
flags/gw.png ADDED
Binary file
flags/gy.png ADDED
Binary file
flags/hk.png ADDED
Binary file
flags/hm.png ADDED
Binary file
flags/hn.png ADDED
Binary file
flags/hr.png ADDED
Binary file
flags/ht.png ADDED
Binary file
flags/hu.png ADDED
Binary file
flags/id.png ADDED
Binary file
flags/ie.png ADDED
Binary file
flags/il.png ADDED
Binary file
flags/in.png ADDED
Binary file
flags/io.png ADDED
Binary file
flags/iq.png ADDED
Binary file
flags/ir.png ADDED
Binary file
flags/is.png ADDED
Binary file
flags/it.png ADDED
Binary file
flags/jm.png ADDED
Binary file
flags/jo.png ADDED
Binary file
flags/jp.png ADDED
Binary file
flags/ke.png ADDED
Binary file
flags/kg.png ADDED
Binary file
flags/kh.png ADDED
Binary file
flags/ki.png ADDED
Binary file
flags/km.png ADDED
Binary file
flags/kn.png ADDED
Binary file
flags/kp.png ADDED
Binary file
flags/kr.png ADDED
Binary file
flags/kw.png ADDED
Binary file
flags/ky.png ADDED
Binary file
flags/kz.png ADDED
Binary file
flags/la.png ADDED
Binary file
flags/lb.png ADDED
Binary file
flags/lc.png ADDED
Binary file
flags/li.png ADDED
Binary file
flags/lk.png ADDED
Binary file
flags/lr.png ADDED
Binary file
flags/ls.png ADDED
Binary file
flags/lt.png ADDED
Binary file
flags/lu.png ADDED
Binary file
flags/lv.png ADDED
Binary file
flags/ly.png ADDED
Binary file
flags/ma.png ADDED
Binary file
flags/mc.png ADDED
Binary file
flags/md.png ADDED
Binary file
flags/me.png ADDED
Binary file
flags/mg.png ADDED
Binary file
flags/mh.png ADDED
Binary file
flags/mk.png ADDED
Binary file
flags/ml.png ADDED
Binary file
flags/mm.png ADDED
Binary file
flags/mn.png ADDED
Binary file
flags/mo.png ADDED
Binary file
flags/mp.png ADDED
Binary file
flags/mq.png ADDED
Binary file
flags/mr.png ADDED
Binary file
flags/ms.png ADDED
Binary file
flags/mt.png ADDED
Binary file
flags/mu.png ADDED
Binary file
flags/mv.png ADDED
Binary file
flags/mw.png ADDED
Binary file
flags/mx.png ADDED
Binary file
flags/my.png ADDED
Binary file
flags/mz.png ADDED
Binary file
flags/na.png ADDED
Binary file
flags/nc.png ADDED
Binary file
flags/ne.png ADDED
Binary file
flags/nf.png ADDED
Binary file
flags/ng.png ADDED
Binary file
flags/ni.png ADDED
Binary file
flags/nl.png ADDED
Binary file
flags/no.png ADDED
Binary file
flags/np.png ADDED
Binary file
flags/nr.png ADDED
Binary file
flags/nu.png ADDED
Binary file
flags/nz.png ADDED
Binary file
flags/om.png ADDED
Binary file
flags/pa.png ADDED
Binary file
flags/pe.png ADDED
Binary file
flags/pf.png ADDED
Binary file
flags/pg.png ADDED
Binary file
flags/ph.png ADDED
Binary file
flags/pk.png ADDED
Binary file
flags/pl.png ADDED
Binary file
flags/pm.png ADDED
Binary file
flags/pn.png ADDED
Binary file
flags/pr.png ADDED
Binary file
flags/ps.png ADDED
Binary file
flags/pt.png ADDED
Binary file
flags/pw.png ADDED
Binary file
flags/py.png ADDED
Binary file
flags/qa.png ADDED
Binary file
flags/re.png ADDED
Binary file
flags/ro.png ADDED
Binary file
flags/rs.png ADDED
Binary file
flags/ru.png ADDED
Binary file
flags/rw.png ADDED
Binary file
flags/sa.png ADDED
Binary file
flags/sb.png ADDED
Binary file
flags/sc.png ADDED
Binary file
flags/scotland.png ADDED
Binary file
flags/sd.png ADDED
Binary file
flags/se.png ADDED
Binary file
flags/sg.png ADDED
Binary file
flags/sh.png ADDED
Binary file
flags/si.png ADDED
Binary file
flags/sj.png ADDED
Binary file
flags/sk.png ADDED
Binary file
flags/sl.png ADDED
Binary file
flags/sm.png ADDED
Binary file
flags/sn.png ADDED
Binary file
flags/so.png ADDED
Binary file
flags/sr.png ADDED
Binary file
flags/st.png ADDED
Binary file
flags/sv.png ADDED
Binary file
flags/sy.png ADDED
Binary file
flags/sz.png ADDED
Binary file
flags/tc.png ADDED
Binary file
flags/td.png ADDED
Binary file
flags/tf.png ADDED
Binary file
flags/tg.png ADDED
Binary file
flags/th.png ADDED
Binary file
flags/tj.png ADDED
Binary file
flags/tk.png ADDED
Binary file
flags/tl.png ADDED
Binary file
flags/tm.png ADDED
Binary file
flags/tn.png ADDED
Binary file
flags/to.png ADDED
Binary file
flags/tr.png ADDED
Binary file
flags/tt.png ADDED
Binary file
flags/tv.png ADDED
Binary file
flags/tw.png ADDED
Binary file
flags/tz.png ADDED
Binary file
flags/ua.png ADDED
Binary file
flags/ug.png ADDED
Binary file
flags/um.png ADDED
Binary file
flags/us.png ADDED
Binary file
flags/uy.png ADDED
Binary file
flags/uz.png ADDED
Binary file
flags/va.png ADDED
Binary file
flags/vc.png ADDED
Binary file
flags/ve.png ADDED
Binary file
flags/vg.png ADDED
Binary file
flags/vi.png ADDED
Binary file
flags/vn.png ADDED
Binary file
flags/vu.png ADDED
Binary file
flags/wales.png ADDED
Binary file
flags/wf.png ADDED
Binary file
flags/ws.png ADDED
Binary file
flags/ye.png ADDED
Binary file
flags/yt.png ADDED
Binary file
flags/za.png ADDED
Binary file
flags/zm.png ADDED
Binary file
flags/zw.png ADDED
Binary file
lang/cs_CZ.mo CHANGED
Binary file
lang/cs_CZ.po CHANGED
@@ -2,7 +2,7 @@ msgid ""
2
  msgstr ""
3
  "Project-Id-Version: Simple Download Monitor v0.04\n"
4
  "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2009-11-29 18:10+0100\n"
6
  "PO-Revision-Date: \n"
7
  "Last-Translator: Pepak <pepak@pepak.net>\n"
8
  "Language-Team: Pepak <pepak@pepak.net>\n"
@@ -13,274 +13,192 @@ msgstr ""
13
  "X-Poedit-Country: CZECH REPUBLIC\n"
14
  "X-Poedit-SourceCharset: utf-8\n"
15
  "X-Poedit-KeywordsList: _e;__\n"
16
- "X-Poedit-Basepath: ..\n"
17
  "X-Poedit-SearchPath-0: ..\n"
18
 
19
- #: ../tags/0.05/simple-download-monitor.php:226
20
- #: ../tags/0.05/simple-download-monitor.php:496
21
- #: ../tags/0.06/simple-download-monitor.php:226
22
- #: ../tags/0.06/simple-download-monitor.php:498
23
- #: ../tags/0.07/simple-download-monitor.php:236
24
- #: ../tags/0.07/simple-download-monitor.php:513
25
- #: ../trunk/simple-download-monitor.php:237
26
- #: ../trunk/simple-download-monitor.php:636
27
  msgid "Simple Download Monitor options"
28
  msgstr "Simple Download Monitor - nastavení"
29
 
30
- #: ../tags/0.05/simple-download-monitor.php:227
31
- #: ../tags/0.06/simple-download-monitor.php:227
32
- #: ../tags/0.07/simple-download-monitor.php:237
33
- #: ../trunk/simple-download-monitor.php:238
34
  msgid "Allowed directories"
35
  msgstr "Povolené adresáře"
36
 
37
- #: ../tags/0.05/simple-download-monitor.php:228
38
- #: ../tags/0.06/simple-download-monitor.php:228
39
- #: ../tags/0.07/simple-download-monitor.php:238
40
- #: ../trunk/simple-download-monitor.php:239
41
  msgid "Only requested files whose full names (relative to document root) start with this regular expression will be processed. It is strongly recommended to place all downloadable files (and ONLY downloadable files) into a designated directory and then placing that directory's name followed by a slash here. It is possible to use the power of PREG to allow multiple directories, but make sure there are ONLY files which you are comfortable with malicious users downloading. Do not EVER allow directories which contain PHP files here! That could lead to disclosure of sensitive data, including username and password used to connect to WordPress database."
42
  msgstr "Zpracovávány budou pouze soubory, jejichž plná jména (relativní vůči kořenovému adresáři webu) začínají tímto regulárním výrazem. Silně doporučuji umístit všechny stažitelné soubory (a JENOM stažitelné soubory) do jednoho určeného adresáře a vepsat sem název tohoto adresáře zakončený lomítkem. Lze také využít všech možností, které dává PREG, pro povolení více adresářů, ale dejte si pozor, ať v nich jsou JEDINĚ soubory, u kterých vám nevadí, když si je stáhne útočník. NIKDY do těchto adresářů neukládejte žádné PHP soubory! To by mohlo vést k zveřejnění citlivých dat, včetně uživatelského jména a hesla pro připojení k databázi."
43
 
44
- #: ../tags/0.05/simple-download-monitor.php:229
45
- #: ../tags/0.06/simple-download-monitor.php:229
46
- #: ../tags/0.07/simple-download-monitor.php:239
47
- #: ../trunk/simple-download-monitor.php:240
48
  msgid "Default value is <code>files/</code>, which only allows download from /files directory (the leading <code>/</code> is implicit)."
49
  msgstr "Výchozí hodnota je <code>files/</code>, která dovolí stahovat pouze soubory z adresáře /files (úvodní <code>/</code> je dosazeno automaticky)."
50
 
51
- #: ../tags/0.05/simple-download-monitor.php:231
52
- #: ../tags/0.06/simple-download-monitor.php:231
53
- #: ../tags/0.07/simple-download-monitor.php:241
54
- #: ../trunk/simple-download-monitor.php:242
55
  msgid "Allowed extensions"
56
  msgstr "Povolené přípony"
57
 
58
- #: ../tags/0.05/simple-download-monitor.php:232
59
- #: ../tags/0.06/simple-download-monitor.php:232
60
- #: ../tags/0.07/simple-download-monitor.php:242
61
- #: ../trunk/simple-download-monitor.php:243
62
  msgid "Only files with extensions matching this regular expressions will be processed. This is another important security value. Make sure you only add extensions which are safe for malicious users to have, e.g. archives and possibly images. Do NOT use any expression that could allow a user to download PHP files, even if you think it safe given the Allowed Directories option above."
63
  msgstr "Zpracovávány budou pouze soubory, jejichž přípony odpovídají tomuto regulárnímu výrazu. Jde o další důležitý bezpečnostní prvek. Dejte si pozor, ať jsou zde uvedeny pouze takové přípony, které nemohou být zneužity útočníky, tzn. komprimované archívy a případně obrázky. NEPOUŽÍVEJTE výrazy, které by mohly uživateli dovolit download PHP souborů, ani kdyby tyto soubory vylučovalo nastavení \"Povolené adresáře\" výše."
64
 
65
- #: ../tags/0.05/simple-download-monitor.php:233
66
- #: ../tags/0.06/simple-download-monitor.php:233
67
- #: ../tags/0.07/simple-download-monitor.php:243
68
- #: ../trunk/simple-download-monitor.php:244
69
  msgid "Default value is <code>zip|rar|7z</code> which only allows download of files ending with <code>.zip</code>, <code>.rar</code> and <code>.7z</code> (the leading <code>.</code> is implicit)."
70
  msgstr "Výchozí hodnota je <code>zip|rar|7z</code>, která povolí pouze stahování souborů s příponou <code>.zip</code>, <code>.rar</code> a <code>.7z</code> (úvodní <code>.</code> je dosazena automaticky)."
71
 
72
- #: ../tags/0.05/simple-download-monitor.php:235
73
- #: ../tags/0.06/simple-download-monitor.php:235
74
- #: ../tags/0.07/simple-download-monitor.php:250
75
- #: ../trunk/simple-download-monitor.php:251
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  msgid "Store detailed logs?"
77
  msgstr "Ukládat detailní záznamy?"
78
 
79
- #: ../tags/0.05/simple-download-monitor.php:236
80
- #: ../tags/0.06/simple-download-monitor.php:236
81
- #: ../tags/0.07/simple-download-monitor.php:251
82
- #: ../trunk/simple-download-monitor.php:252
83
  msgid "If detailed logs are allowed, various information (including exact time of download, user's IP address, referrer etc.) is stored. This can fill your database quickly if you have only a little space or a lot of popular downloads. Otherwise just the total numbers of downloads are stored, consuming significantly less space."
84
  msgstr "Pokud je tato volba zapnuta, ukládají se detailní informace (jako přesný čas, IP adresa uživatele nebo referer) o každém downloadu. To může rychle zahltit databázi, pokud máte jen málo prostoru nebo populární downloady. Normálně se ukládá jen celkový počet stažení, který zabírá podstatně méně místa."
85
 
86
- #: ../tags/0.05/simple-download-monitor.php:237
87
- #: ../tags/0.06/simple-download-monitor.php:237
88
- #: ../tags/0.07/simple-download-monitor.php:252
89
- #: ../trunk/simple-download-monitor.php:253
90
  msgid "Use detailed statistics."
91
  msgstr "Používat detailní statistiky"
92
 
93
- #: ../tags/0.05/simple-download-monitor.php:238
94
- #: ../tags/0.06/simple-download-monitor.php:238
95
- #: ../tags/0.07/simple-download-monitor.php:253
96
- #: ../trunk/simple-download-monitor.php:254
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  msgid "Update settings"
98
  msgstr "Uložit nastavení"
99
 
100
- #: ../tags/0.05/simple-download-monitor.php:343
101
- #: ../tags/0.06/simple-download-monitor.php:343
102
- #: ../tags/0.07/simple-download-monitor.php:358
103
- #: ../trunk/simple-download-monitor.php:374
104
  msgid "First"
105
  msgstr "První"
106
 
107
- #: ../tags/0.05/simple-download-monitor.php:344
108
- #: ../tags/0.06/simple-download-monitor.php:344
109
- #: ../tags/0.07/simple-download-monitor.php:359
110
- #: ../trunk/simple-download-monitor.php:375
111
  msgid "Previous"
112
  msgstr "Předchozí"
113
 
114
- #: ../tags/0.05/simple-download-monitor.php:349
115
- #: ../tags/0.06/simple-download-monitor.php:349
116
- #: ../tags/0.07/simple-download-monitor.php:364
117
- #: ../trunk/simple-download-monitor.php:380
118
  msgid "Next"
119
  msgstr "Další"
120
 
121
- #: ../tags/0.05/simple-download-monitor.php:350
122
- #: ../tags/0.06/simple-download-monitor.php:350
123
- #: ../tags/0.07/simple-download-monitor.php:365
124
- #: ../trunk/simple-download-monitor.php:381
125
  msgid "Last"
126
  msgstr "Poslední"
127
 
128
- #: ../tags/0.05/simple-download-monitor.php:365
129
- #: ../tags/0.05/simple-download-monitor.php:428
130
- #: ../tags/0.05/simple-download-monitor.php:496
131
- #: ../tags/0.05/simple-download-monitor.php:497
132
- #: ../tags/0.06/simple-download-monitor.php:365
133
- #: ../tags/0.06/simple-download-monitor.php:430
134
- #: ../tags/0.06/simple-download-monitor.php:498
135
- #: ../tags/0.06/simple-download-monitor.php:499
136
- #: ../tags/0.07/simple-download-monitor.php:380
137
- #: ../tags/0.07/simple-download-monitor.php:445
138
- #: ../tags/0.07/simple-download-monitor.php:513
139
- #: ../tags/0.07/simple-download-monitor.php:514
140
- #: ../trunk/simple-download-monitor.php:478
141
- #: ../trunk/simple-download-monitor.php:555
142
- #: ../trunk/simple-download-monitor.php:636
143
- #: ../trunk/simple-download-monitor.php:637
144
  msgid "Simple Download Monitor"
145
  msgstr "Simple Download Monitor"
146
 
147
- #: ../tags/0.05/simple-download-monitor.php:366
148
- #: ../tags/0.06/simple-download-monitor.php:366
149
- #: ../tags/0.07/simple-download-monitor.php:381
150
- #: ../trunk/simple-download-monitor.php:479
151
  msgid "Nonexistent downloads"
152
  msgstr "Neexistující soubory"
153
 
154
- #: ../tags/0.05/simple-download-monitor.php:366
155
- #: ../tags/0.06/simple-download-monitor.php:366
156
- #: ../tags/0.07/simple-download-monitor.php:381
157
- #: ../trunk/simple-download-monitor.php:479
158
  msgid "All downloads"
159
  msgstr "Všechny downloady"
160
 
161
- #: ../tags/0.05/simple-download-monitor.php:367
162
- #: ../tags/0.06/simple-download-monitor.php:367
163
- #: ../tags/0.07/simple-download-monitor.php:382
164
- #: ../trunk/simple-download-monitor.php:480
165
  msgid "Show all downloads"
166
  msgstr "Zobrazit všechny soubory"
167
 
168
- #: ../tags/0.05/simple-download-monitor.php:367
169
- #: ../tags/0.06/simple-download-monitor.php:367
170
- #: ../tags/0.07/simple-download-monitor.php:382
171
- #: ../trunk/simple-download-monitor.php:480
172
  msgid "Show nonexistent downloads"
173
  msgstr "Zobrazit neexistující soubory"
174
 
175
- #: ../tags/0.05/simple-download-monitor.php:378
176
- #: ../tags/0.06/simple-download-monitor.php:378
177
- #: ../tags/0.07/simple-download-monitor.php:393
178
- #: ../trunk/simple-download-monitor.php:495
179
  msgid "Filename"
180
  msgstr "Název souboru"
181
 
182
- #: ../tags/0.05/simple-download-monitor.php:379
183
- #: ../tags/0.06/simple-download-monitor.php:379
184
- #: ../tags/0.07/simple-download-monitor.php:394
185
- #: ../trunk/simple-download-monitor.php:496
186
  msgid "Download count"
187
  msgstr "Počet stažení"
188
 
189
- #: ../tags/0.05/simple-download-monitor.php:380
190
- #: ../tags/0.06/simple-download-monitor.php:380
191
- #: ../tags/0.07/simple-download-monitor.php:395
192
- #: ../trunk/simple-download-monitor.php:497
193
  msgid "Last date"
194
  msgstr "Poslední datum"
195
 
196
- #: ../tags/0.05/simple-download-monitor.php:429
197
- #: ../tags/0.06/simple-download-monitor.php:431
198
- #: ../tags/0.07/simple-download-monitor.php:446
199
- #: ../trunk/simple-download-monitor.php:556
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
  #, php-format
201
  msgid "Detailed data for <strong>%s</strong>:"
202
  msgstr "Detailní data pro <strong>%s</strong>:"
203
 
204
- #: ../tags/0.05/simple-download-monitor.php:430
205
- #: ../tags/0.06/simple-download-monitor.php:432
206
- #: ../tags/0.07/simple-download-monitor.php:447
207
- #: ../trunk/simple-download-monitor.php:557
208
  #, php-format
209
  msgid "Total number of downloads: <strong>%d</strong>."
210
  msgstr "Celkový počet stažení: <strong>%d</strong>."
211
 
212
- #: ../tags/0.05/simple-download-monitor.php:442
213
- #: ../tags/0.06/simple-download-monitor.php:444
214
- #: ../tags/0.07/simple-download-monitor.php:459
215
- #: ../trunk/simple-download-monitor.php:573
216
  msgid "Date"
217
  msgstr "Datum"
218
 
219
- #: ../tags/0.05/simple-download-monitor.php:443
220
- #: ../tags/0.06/simple-download-monitor.php:445
221
- #: ../tags/0.07/simple-download-monitor.php:460
222
- #: ../trunk/simple-download-monitor.php:574
 
223
  msgid "IP address"
224
  msgstr "IP adresa"
225
 
226
- #: ../tags/0.05/simple-download-monitor.php:444
227
- #: ../tags/0.06/simple-download-monitor.php:446
228
- #: ../tags/0.07/simple-download-monitor.php:461
229
- #: ../trunk/simple-download-monitor.php:575
230
  msgid "Referer"
231
  msgstr "Referer"
232
 
233
- #: ../tags/0.05/simple-download-monitor.php:445
234
- #: ../tags/0.06/simple-download-monitor.php:447
235
- #: ../tags/0.07/simple-download-monitor.php:462
236
- #: ../trunk/simple-download-monitor.php:576
237
  msgid "Username"
238
  msgstr "Uživatel"
239
 
240
- #: ../tags/0.05/simple-download-monitor.php:474
241
- #: ../tags/0.06/simple-download-monitor.php:476
242
- #: ../tags/0.07/simple-download-monitor.php:491
243
- #: ../trunk/simple-download-monitor.php:614
244
  msgid "Return to full list."
245
  msgstr "Návrat do úplného seznamu"
246
 
247
- #: ../tags/0.07/simple-download-monitor.php:245
248
- #: ../trunk/simple-download-monitor.php:246
249
- msgid "Inline files"
250
- msgstr "Soubory pro inline zobrazení"
251
-
252
- #: ../tags/0.07/simple-download-monitor.php:246
253
- #: ../trunk/simple-download-monitor.php:247
254
- msgid "Files whose names match this regular expression will be displayed inline (within a HTML page) rather than downloaded."
255
- msgstr "Soubory, které vyhovují tomuto regulárnímu výrazu, budou zobrazeny inline (jako objekt - např. obrázek nebo video - uvnitř HTML stránky) místo aby se stahovaly."
256
-
257
- #: ../tags/0.07/simple-download-monitor.php:247
258
- #: ../trunk/simple-download-monitor.php:248
259
- msgid "By default, this value is empty - no files will appear inline, all will be downloaded. You may want to place something like <code>\\.(jpe?g|gif|png|swf)$</code> here to make images and Flash videos appear inline."
260
- msgstr "Výchozí hodnotou je prázdný řetězec - všechny soubory se budou stahovat, žádný nebude zobrazen inline. Vepište sem něco jako <code>\\.(jpe?g|gif|png|swf)$</code> pro zobrazování obrázků a Flashů inline."
261
-
262
- #: ../tags/0.07/simple-download-monitor.php:248
263
- #: ../trunk/simple-download-monitor.php:249
264
- msgid "Note: Unlike the options above, nothing is implied in this regular expression. You <em>must</em> use an explicit <code>\\.</code> to denote \"start of extension\", you <em>must</em> use an explicit <code>$</code> to mark \"end of filename\", etc."
265
- msgstr "Pozn.: Narozdíl od nastavení uvedených výše se do tohoto regulárního výrazu nic nedoplňuje. Pokud chcete vyznačit \"začátek přípony\", <em>musíte</em> sem napsat <code>\\.</code>; pokud chcete vyznačit \"konec názvu souboru\", <em>musíte</em> sem napsat <code>$</code>, a podobně."
266
-
267
- #: ../trunk/simple-download-monitor.php:520
268
- #: ../trunk/simple-download-monitor.php:599
269
- msgid "Delete"
270
- msgstr "Smazat"
271
-
272
- #: ../trunk/simple-download-monitor.php:528
273
- #: ../trunk/simple-download-monitor.php:607
274
- msgid "Delete Checked"
275
- msgstr "Smazat vybrané"
276
-
277
- #: ../trunk/simple-download-monitor.php:529
278
- #: ../trunk/simple-download-monitor.php:610
279
- msgid "Delete All"
280
- msgstr "Smazat všechny"
281
-
282
- #: ../trunk/simple-download-monitor.php:529
283
- #: ../trunk/simple-download-monitor.php:610
284
- msgid "Yes, I am sure"
285
- msgstr "Ano, chci to udělat"
286
-
2
  msgstr ""
3
  "Project-Id-Version: Simple Download Monitor v0.04\n"
4
  "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2010-03-27 14:03+0100\n"
6
  "PO-Revision-Date: \n"
7
  "Last-Translator: Pepak <pepak@pepak.net>\n"
8
  "Language-Team: Pepak <pepak@pepak.net>\n"
13
  "X-Poedit-Country: CZECH REPUBLIC\n"
14
  "X-Poedit-SourceCharset: utf-8\n"
15
  "X-Poedit-KeywordsList: _e;__\n"
16
+ "X-Poedit-Basepath: .\n"
17
  "X-Poedit-SearchPath-0: ..\n"
18
 
19
+ #: ../simple-download-monitor.php:406
20
+ #: ../simple-download-monitor.php:822
 
 
 
 
 
 
21
  msgid "Simple Download Monitor options"
22
  msgstr "Simple Download Monitor - nastavení"
23
 
24
+ #: ../simple-download-monitor.php:407
 
 
 
25
  msgid "Allowed directories"
26
  msgstr "Povolené adresáře"
27
 
28
+ #: ../simple-download-monitor.php:408
 
 
 
29
  msgid "Only requested files whose full names (relative to document root) start with this regular expression will be processed. It is strongly recommended to place all downloadable files (and ONLY downloadable files) into a designated directory and then placing that directory's name followed by a slash here. It is possible to use the power of PREG to allow multiple directories, but make sure there are ONLY files which you are comfortable with malicious users downloading. Do not EVER allow directories which contain PHP files here! That could lead to disclosure of sensitive data, including username and password used to connect to WordPress database."
30
  msgstr "Zpracovávány budou pouze soubory, jejichž plná jména (relativní vůči kořenovému adresáři webu) začínají tímto regulárním výrazem. Silně doporučuji umístit všechny stažitelné soubory (a JENOM stažitelné soubory) do jednoho určeného adresáře a vepsat sem název tohoto adresáře zakončený lomítkem. Lze také využít všech možností, které dává PREG, pro povolení více adresářů, ale dejte si pozor, ať v nich jsou JEDINĚ soubory, u kterých vám nevadí, když si je stáhne útočník. NIKDY do těchto adresářů neukládejte žádné PHP soubory! To by mohlo vést k zveřejnění citlivých dat, včetně uživatelského jména a hesla pro připojení k databázi."
31
 
32
+ #: ../simple-download-monitor.php:409
 
 
 
33
  msgid "Default value is <code>files/</code>, which only allows download from /files directory (the leading <code>/</code> is implicit)."
34
  msgstr "Výchozí hodnota je <code>files/</code>, která dovolí stahovat pouze soubory z adresáře /files (úvodní <code>/</code> je dosazeno automaticky)."
35
 
36
+ #: ../simple-download-monitor.php:411
 
 
 
37
  msgid "Allowed extensions"
38
  msgstr "Povolené přípony"
39
 
40
+ #: ../simple-download-monitor.php:412
 
 
 
41
  msgid "Only files with extensions matching this regular expressions will be processed. This is another important security value. Make sure you only add extensions which are safe for malicious users to have, e.g. archives and possibly images. Do NOT use any expression that could allow a user to download PHP files, even if you think it safe given the Allowed Directories option above."
42
  msgstr "Zpracovávány budou pouze soubory, jejichž přípony odpovídají tomuto regulárnímu výrazu. Jde o další důležitý bezpečnostní prvek. Dejte si pozor, ať jsou zde uvedeny pouze takové přípony, které nemohou být zneužity útočníky, tzn. komprimované archívy a případně obrázky. NEPOUŽÍVEJTE výrazy, které by mohly uživateli dovolit download PHP souborů, ani kdyby tyto soubory vylučovalo nastavení \"Povolené adresáře\" výše."
43
 
44
+ #: ../simple-download-monitor.php:413
 
 
 
45
  msgid "Default value is <code>zip|rar|7z</code> which only allows download of files ending with <code>.zip</code>, <code>.rar</code> and <code>.7z</code> (the leading <code>.</code> is implicit)."
46
  msgstr "Výchozí hodnota je <code>zip|rar|7z</code>, která povolí pouze stahování souborů s příponou <code>.zip</code>, <code>.rar</code> a <code>.7z</code> (úvodní <code>.</code> je dosazena automaticky)."
47
 
48
+ #: ../simple-download-monitor.php:415
49
+ msgid "Inline files"
50
+ msgstr "Soubory pro inline zobrazení"
51
+
52
+ #: ../simple-download-monitor.php:416
53
+ msgid "Files whose names match this regular expression will be displayed inline (within a HTML page) rather than downloaded."
54
+ msgstr "Soubory, které vyhovují tomuto regulárnímu výrazu, budou zobrazeny inline (jako objekt - např. obrázek nebo video - uvnitř HTML stránky) místo aby se stahovaly."
55
+
56
+ #: ../simple-download-monitor.php:417
57
+ msgid "By default, this value is empty - no files will appear inline, all will be downloaded. You may want to place something like <code>\\.(jpe?g|gif|png|swf)$</code> here to make images and Flash videos appear inline."
58
+ msgstr "Výchozí hodnotou je prázdný řetězec - všechny soubory se budou stahovat, žádný nebude zobrazen inline. Vepište sem něco jako <code>\\.(jpe?g|gif|png|swf)$</code> pro zobrazování obrázků a Flashů inline."
59
+
60
+ #: ../simple-download-monitor.php:418
61
+ msgid "Note: Unlike the options above, nothing is implied in this regular expression. You <em>must</em> use an explicit <code>\\.</code> to denote \"start of extension\", you <em>must</em> use an explicit <code>$</code> to mark \"end of filename\", etc."
62
+ msgstr "Pozn.: Narozdíl od nastavení uvedených výše se do tohoto regulárního výrazu nic nedoplňuje. Pokud chcete vyznačit \"začátek přípony\", <em>musíte</em> sem napsat <code>\\.</code>; pokud chcete vyznačit \"konec názvu souboru\", <em>musíte</em> sem napsat <code>$</code>, a podobně."
63
+
64
+ #: ../simple-download-monitor.php:420
65
  msgid "Store detailed logs?"
66
  msgstr "Ukládat detailní záznamy?"
67
 
68
+ #: ../simple-download-monitor.php:421
 
 
 
69
  msgid "If detailed logs are allowed, various information (including exact time of download, user's IP address, referrer etc.) is stored. This can fill your database quickly if you have only a little space or a lot of popular downloads. Otherwise just the total numbers of downloads are stored, consuming significantly less space."
70
  msgstr "Pokud je tato volba zapnuta, ukládají se detailní informace (jako přesný čas, IP adresa uživatele nebo referer) o každém downloadu. To může rychle zahltit databázi, pokud máte jen málo prostoru nebo populární downloady. Normálně se ukládá jen celkový počet stažení, který zabírá podstatně méně místa."
71
 
72
+ #: ../simple-download-monitor.php:422
 
 
 
73
  msgid "Use detailed statistics."
74
  msgstr "Používat detailní statistiky"
75
 
76
+ #: ../simple-download-monitor.php:423
77
+ msgid "Ignored users"
78
+ msgstr "Ignorovaní uživatelé"
79
+
80
+ #: ../simple-download-monitor.php:424
81
+ msgid "List of users whose downloads are not monitored. Separate multiple users with pipe character <code>|</code>. It is useful to prevent administrator damaging the statistics by testing that downloads work."
82
+ msgstr "Seznam uživatelů, jejichž downloady nejsou sledovány. Uživatelská jména oddělujte znakem roury <code>|</code>. Funkce se hodí pro administrátory, kteří chtějí ověřovat funkčnost odkazů, ale nepřejí si, aby se jejich testy zaznamenávaly do statistik."
83
+
84
+ #: ../simple-download-monitor.php:426
85
+ msgid "Ignore quick re-downloads"
86
+ msgstr "Ignorovat rychlé opakované downloady"
87
+
88
+ #: ../simple-download-monitor.php:427
89
+ msgid "If one IP address requests the same download several times within a given time interval, only the first time will be recorded. If a zero or a negative value is entered, all downloads will get recorded regardless of how quickly they occur after each other."
90
+ msgstr "Pokud se jedna IP adresa pokusí stáhnout jeden soubor několikrát po sobě v daném časovém intervalu, zaznamená se do statistik jen první pokus. Pokud je rozpětí stanoveno na nula nebo záporné číslo, budou se zaznamenávat všechny downloady, bez ohledu na to, jak rychle po sobě následují."
91
+
92
+ #: ../simple-download-monitor.php:428
93
+ msgid "seconds"
94
+ msgstr "sekund"
95
+
96
+ #: ../simple-download-monitor.php:429
97
  msgid "Update settings"
98
  msgstr "Uložit nastavení"
99
 
100
+ #: ../simple-download-monitor.php:549
 
 
 
101
  msgid "First"
102
  msgstr "První"
103
 
104
+ #: ../simple-download-monitor.php:550
 
 
 
105
  msgid "Previous"
106
  msgstr "Předchozí"
107
 
108
+ #: ../simple-download-monitor.php:555
 
 
 
109
  msgid "Next"
110
  msgstr "Další"
111
 
112
+ #: ../simple-download-monitor.php:556
 
 
 
113
  msgid "Last"
114
  msgstr "Poslední"
115
 
116
+ #: ../simple-download-monitor.php:653
117
+ #: ../simple-download-monitor.php:730
118
+ #: ../simple-download-monitor.php:822
119
+ #: ../simple-download-monitor.php:823
 
 
 
 
 
 
 
 
 
 
 
 
120
  msgid "Simple Download Monitor"
121
  msgstr "Simple Download Monitor"
122
 
123
+ #: ../simple-download-monitor.php:654
 
 
 
124
  msgid "Nonexistent downloads"
125
  msgstr "Neexistující soubory"
126
 
127
+ #: ../simple-download-monitor.php:654
 
 
 
128
  msgid "All downloads"
129
  msgstr "Všechny downloady"
130
 
131
+ #: ../simple-download-monitor.php:655
 
 
 
132
  msgid "Show all downloads"
133
  msgstr "Zobrazit všechny soubory"
134
 
135
+ #: ../simple-download-monitor.php:655
 
 
 
136
  msgid "Show nonexistent downloads"
137
  msgstr "Zobrazit neexistující soubory"
138
 
139
+ #: ../simple-download-monitor.php:670
 
 
 
140
  msgid "Filename"
141
  msgstr "Název souboru"
142
 
143
+ #: ../simple-download-monitor.php:671
 
 
 
144
  msgid "Download count"
145
  msgstr "Počet stažení"
146
 
147
+ #: ../simple-download-monitor.php:672
 
 
 
148
  msgid "Last date"
149
  msgstr "Poslední datum"
150
 
151
+ #: ../simple-download-monitor.php:695
152
+ #: ../simple-download-monitor.php:785
153
+ msgid "Delete"
154
+ msgstr "Smazat"
155
+
156
+ #: ../simple-download-monitor.php:703
157
+ #: ../simple-download-monitor.php:793
158
+ msgid "Delete Checked"
159
+ msgstr "Smazat vybrané"
160
+
161
+ #: ../simple-download-monitor.php:704
162
+ #: ../simple-download-monitor.php:796
163
+ msgid "Delete All"
164
+ msgstr "Smazat všechny"
165
+
166
+ #: ../simple-download-monitor.php:704
167
+ #: ../simple-download-monitor.php:796
168
+ msgid "Yes, I am sure"
169
+ msgstr "Ano, chci to udělat"
170
+
171
+ #: ../simple-download-monitor.php:731
172
  #, php-format
173
  msgid "Detailed data for <strong>%s</strong>:"
174
  msgstr "Detailní data pro <strong>%s</strong>:"
175
 
176
+ #: ../simple-download-monitor.php:732
 
 
 
177
  #, php-format
178
  msgid "Total number of downloads: <strong>%d</strong>."
179
  msgstr "Celkový počet stažení: <strong>%d</strong>."
180
 
181
+ #: ../simple-download-monitor.php:749
 
 
 
182
  msgid "Date"
183
  msgstr "Datum"
184
 
185
+ #: ../simple-download-monitor.php:750
186
+ msgid "Country"
187
+ msgstr "Země"
188
+
189
+ #: ../simple-download-monitor.php:751
190
  msgid "IP address"
191
  msgstr "IP adresa"
192
 
193
+ #: ../simple-download-monitor.php:752
 
 
 
194
  msgid "Referer"
195
  msgstr "Referer"
196
 
197
+ #: ../simple-download-monitor.php:753
 
 
 
198
  msgid "Username"
199
  msgstr "Uživatel"
200
 
201
+ #: ../simple-download-monitor.php:800
 
 
 
202
  msgid "Return to full list."
203
  msgstr "Návrat do úplného seznamu"
204
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link:
4
  Tags: files, counter, count, tracking, download monitor, monitor, downloads, download
5
  Requires at least: 2.8.0
6
  Tested up to: 2.9.1
7
- Stable tag: 0.11
8
 
9
  Count the number of downloads without having to maintain a comprehensive download page.
10
 
@@ -102,6 +102,35 @@ will fix any errors that are reported to me.
102
 
103
  == Changelog ==
104
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
  = 0.11 =
106
 
107
  * Automatic upgrade of the plugin fails because of the nested ZIP
4
  Tags: files, counter, count, tracking, download monitor, monitor, downloads, download
5
  Requires at least: 2.8.0
6
  Tested up to: 2.9.1
7
+ Stable tag: 0.12
8
 
9
  Count the number of downloads without having to maintain a comprehensive download page.
10
 
102
 
103
  == Changelog ==
104
 
105
+ = 0.12 =
106
+
107
+ * Support for country-flagging of each download. This feature requires
108
+ that my plugin Ip-to-Country ( http://wordpress.org/extend/plugins/ip-to-country/ )
109
+ is installed and set-up.
110
+
111
+ I am still undecided if it is better to assign countries when a download
112
+ occurs or leave it until a list of downloads is displayed. I can see
113
+ benefits and drawbacks for both solutions. At the moment the plugin
114
+ leaves country-assignment until the list is displayed, but I am interested
115
+ in hearing your thoughts about this decision.
116
+
117
+ This function is only supported with PHP5.
118
+
119
+ * New setting for "ignored users". Downloads made by users whose names are
120
+ listed (in pipe-separated list) in configuration will not be monitored.
121
+ It is useful for admins who want to test that their download links work,
122
+ but don't want to record their tests as "downloads".
123
+
124
+ * Ability to ignore downloads if someone requests one file from one IP address
125
+ several times within a short time interval. There is an option that let's
126
+ admin specify how long this interval is (in seconds), and if multiple downloads
127
+ of the same file from the same IP address happen within so many seconds of
128
+ each other, only the first one gets recorded. This is useful for download
129
+ accelerators which try to download one file in several pieces, with longer
130
+ time intervals also for redownloads (e.g. download fails the first time so
131
+ the user tries again).
132
+
133
+
134
  = 0.11 =
135
 
136
  * Automatic upgrade of the plugin fails because of the nested ZIP
screenshot-1.png CHANGED
Binary file
screenshot-3.png CHANGED
Binary file
sdmon.css DELETED
@@ -1,10 +0,0 @@
1
- #sdmon .sdmon-rownum { width: 3ex; text-align: right; }
2
- #sdmon .sdmon-filename { }
3
- #sdmon .sdmon-count { text-align: right; }
4
- #sdmon .sdmon-date { width: 24ex; text-align: center; }
5
- #sdmon .sdmon-nonex { width: 5ex; text-align: center; }
6
- #sdmon .sdmon-ipaddr { }
7
- #sdmon .sdmon-referer { }
8
- #sdmon .sdmon-username { }
9
- #sdmon th {text-align: center; }
10
- #sdmon th, #sdmon td { padding-left: 1ex; padding-right: 1ex; }
 
 
 
 
 
 
 
 
 
 
simple-download-monitor.php CHANGED
@@ -4,7 +4,7 @@
4
  Plugin Name: Simple Download Monitor
5
  Plugin URI: http://www.pepak.net/wordpress/simple-download-monitor-plugin
6
  Description: Count the number of downloads without having to maintain a comprehensive download page.
7
- Version: 0.11
8
  Author: Pepak
9
  Author URI: http://www.pepak.net
10
  */
@@ -31,7 +31,7 @@ if (!class_exists('SimpleDownloadMonitor'))
31
  class SimpleDownloadMonitor
32
  {
33
 
34
- const VERSION = '0.11';
35
  const PREFIX = 'sdmon_';
36
  const PREG_DELIMITER = '`';
37
  const GET_PARAM = 'sdmon';
@@ -92,6 +92,8 @@ if (!class_exists('SimpleDownloadMonitor'))
92
  add_option(self::PREFIX . 'extensions', 'zip|rar|7z');
93
  add_option(self::PREFIX . 'detailed', '0');
94
  add_option(self::PREFIX . 'inline', '');
 
 
95
  }
96
 
97
  protected function table_downloads()
@@ -259,37 +261,55 @@ if (!class_exists('SimpleDownloadMonitor'))
259
  public function Download($filename)
260
  {
261
  global $wpdb, $user_login, $user_ID;
 
 
 
 
262
  // Normalize the filename
263
  $fullfilename = realpath(ABSPATH . '/' . $filename);
264
  $relfilename = substr($fullfilename, strlen(ABSPATH));
265
  $relfilename = strtr($relfilename, '\\', '/');
266
  $exists = (file_exists($fullfilename) AND !is_dir($fullfilename)) ? 1 : 0;
267
- // Store uncorrected request name to database for security/mistake review
268
- $downloads = $this->table_downloads();
269
- $id = $wpdb->get_var($wpdb->prepare("SELECT id FROM ${downloads} WHERE filename=%s", $filename));
270
- if ($id)
271
- {
272
- $sql = "UPDATE ${downloads} SET download_count=download_count+1, last_date=NOW(), file_exists=%d WHERE id=%d";
273
- $wpdb->query($wpdb->prepare($sql, $exists, $id));
274
- }
275
- else
276
- {
277
- $sql = "INSERT INTO ${downloads} (filename, download_count, last_date, file_exists) VALUES (%s, 1, NOW(), %d)";
278
- $wpdb->query($wpdb->prepare($sql, $filename, $exists));
279
- $id = $wpdb->insert_id;
280
- }
281
- // If details are requested, store them as well
282
- if (intval(get_option(self::PREFIX . 'detailed')))
283
  {
284
- $details = $this->table_details();
285
- $sql = "INSERT INTO ${details} (download, download_date, ip, referer, username, userid) VALUES (%d, NOW(), %s, %s, %s, %d)";
286
- get_currentuserinfo();
287
- $userid = $user_ID ? $user_ID : null;
288
- $username = $user_login ? $user_login : null;
289
- $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null;
290
- if (!$username AND isset($_COOKIE['comment_author_'.COOKIEHASH]))
291
- $username = utf8_encode($_COOKIE['comment_author_'.COOKIEHASH]);
292
- $wpdb->query($wpdb->prepare($sql, $id, $_SERVER['REMOTE_ADDR'], $referer, $username, $userid));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
293
  }
294
  // Make sure the file is available for download
295
  if (!$exists)
@@ -352,12 +372,15 @@ if (!class_exists('SimpleDownloadMonitor'))
352
  $extensions = strval($_POST[self::PREFIX . 'extensions']);
353
  $detailed = intval($_POST[self::PREFIX . 'detailed']);
354
  $inline = strval($_POST[self::PREFIX . 'inline']);
 
 
355
  // Remove slashes if necessary
356
  if (get_magic_quotes_gpc())
357
  {
358
  $directories = stripslashes($directories);
359
  $extensions = stripslashes($extensions);
360
  $inline = stripslashes($inline);
 
361
  }
362
  // Escape the delimiter
363
  list($directories, $extensions) = str_replace(self::PREG_DELIMITER, '\\'.self::PREG_DELIMITER, array($directories, $extensions));
@@ -366,12 +389,16 @@ if (!class_exists('SimpleDownloadMonitor'))
366
  update_option(self::PREFIX . 'extensions', $extensions);
367
  update_option(self::PREFIX . 'detailed', $detailed);
368
  update_option(self::PREFIX . 'inline', $inline);
 
 
369
  }
370
  // Load options from the database
371
  $directories = get_option(self::PREFIX . 'directories');
372
  $extensions = get_option(self::PREFIX . 'extensions');
373
  $detailed = get_option(self::PREFIX . 'detailed');
374
  $inline = get_option(self::PREFIX . 'inline');
 
 
375
  // Build the form
376
  ?>
377
  <div class="wrap">
@@ -393,6 +420,12 @@ if (!class_exists('SimpleDownloadMonitor'))
393
  <h3><?php echo __("Store detailed logs?", self::GETTEXT_REALM); ?></h3>
394
  <p><?php echo __("If detailed logs are allowed, various information (including exact time of download, user's IP address, referrer etc.) is stored. This can fill your database quickly if you have only a little space or a lot of popular downloads. Otherwise just the total numbers of downloads are stored, consuming significantly less space.", self::GETTEXT_REALM); ?></p>
395
  <p><label for="<?php echo self::PREFIX; ?>detailed"><input type="checkbox" name="<?php echo self::PREFIX; ?>detailed" value="1" <?php if ($detailed) echo 'checked="checked" '; ?>/> <?php echo __('Use detailed statistics.', self::GETTEXT_REALM); ?></label></p>
 
 
 
 
 
 
396
  <div class="submit"><input type="submit" name="SimpleDownloadMonitor_Submit" value="<?php echo __("Update settings", self::GETTEXT_REALM) ?>" /></div>
397
  </form>
398
  </div><?php
@@ -705,6 +738,7 @@ if (!class_exists('SimpleDownloadMonitor'))
705
  <col class="sdmon-rownum" align="right" width="32" />
706
  <col class="sdmon-date" align="center" />
707
  <col class="sdmon-ipaddr" />
 
708
  <col class="sdmon-referer" />
709
  <col class="sdmon-username" />
710
  <col class="sdmon-tools" />
@@ -713,6 +747,7 @@ if (!class_exists('SimpleDownloadMonitor'))
713
  <tr>
714
  <th>&nbsp;</th>
715
  <th><a href="<?php echo $this->GetUrlForList(array_merge($options, array('order' => self::ORDER_DATE ))); ?>"><?php echo __("Date", self::GETTEXT_REALM); ?></a></th>
 
716
  <th><a href="<?php echo $this->GetUrlForList(array_merge($options, array('order' => self::ORDER_IP ))); ?>"><?php echo __("IP address", self::GETTEXT_REALM); ?></a></th>
717
  <th><a href="<?php echo $this->GetUrlForList(array_merge($options, array('order' => self::ORDER_REFERER))); ?>"><?php echo __("Referer", self::GETTEXT_REALM); ?></a></th>
718
  <th><a href="<?php echo $this->GetUrlForList(array_merge($options, array('order' => self::ORDER_USER ))); ?>"><?php echo __("Username", self::GETTEXT_REALM); ?></a></th>
@@ -724,17 +759,26 @@ if (!class_exists('SimpleDownloadMonitor'))
724
  $where = $this->GetDetailWhere($flags);
725
  $orderby = $this->GetDetailOrderBy($order);
726
  $limit = $this->GetLimit($from);
727
- $sql = "SELECT id, download_date, ip, referer, userid, username FROM ${table_details} WHERE download=%d ${where} ${orderby} ${limit}";
 
 
 
 
 
 
728
  $totalcount = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM ${table_details} WHERE download=%d ${where}", $download));
729
  $results = $wpdb->get_results($wpdb->prepare($sql, $download), ARRAY_N);
730
  $rownum = intval($options['from']);
731
  foreach ($results as $row) {
732
  $rownum++;
733
- list($id, $date, $ip, $referer, $userid, $username) = $row;
 
 
734
  ?>
735
  <tr>
736
  <td><?php echo $rownum; ?>.</td>
737
  <td><?php echo mysql2date('Y-m-d h:i:s', $date, TRUE); ?></td>
 
738
  <td><?php echo htmlspecialchars($ip); ?></td>
739
  <td><?php echo htmlspecialchars($referer); ?></td>
740
  <td><?php echo htmlspecialchars($username); ?></td>
4
  Plugin Name: Simple Download Monitor
5
  Plugin URI: http://www.pepak.net/wordpress/simple-download-monitor-plugin
6
  Description: Count the number of downloads without having to maintain a comprehensive download page.
7
+ Version: 0.12
8
  Author: Pepak
9
  Author URI: http://www.pepak.net
10
  */
31
  class SimpleDownloadMonitor
32
  {
33
 
34
+ const VERSION = '0.12';
35
  const PREFIX = 'sdmon_';
36
  const PREG_DELIMITER = '`';
37
  const GET_PARAM = 'sdmon';
92
  add_option(self::PREFIX . 'extensions', 'zip|rar|7z');
93
  add_option(self::PREFIX . 'detailed', '0');
94
  add_option(self::PREFIX . 'inline', '');
95
+ add_option(self::PREFIX . 'ignored_users', '');
96
+ add_option(self::PREFIX . 'group_within', '0');
97
  }
98
 
99
  protected function table_downloads()
261
  public function Download($filename)
262
  {
263
  global $wpdb, $user_login, $user_ID;
264
+ $store_details = intval(get_option(self::PREFIX . 'detailed'));
265
+ $details = $this->table_details();
266
+ $downloads = $this->table_downloads();
267
+ $ip_addr = $_SERVER['REMOTE_ADDR'];
268
  // Normalize the filename
269
  $fullfilename = realpath(ABSPATH . '/' . $filename);
270
  $relfilename = substr($fullfilename, strlen(ABSPATH));
271
  $relfilename = strtr($relfilename, '\\', '/');
272
  $exists = (file_exists($fullfilename) AND !is_dir($fullfilename)) ? 1 : 0;
273
+ // Get user information and decide if this user should be ignored
274
+ get_currentuserinfo();
275
+ $userid = $user_ID ? $user_ID : null;
276
+ $username = $user_login ? $user_login : null;
277
+ $ignored_users = get_option(self::PREFIX . 'ignored_users');
278
+ $monitor = empty($username) || empty($ignored_users) || (!in_array($username, explode('|', $ignored_users)));
279
+ if ($monitor)
 
 
 
 
 
 
 
 
 
280
  {
281
+ // Store uncorrected request name to database for security/mistake review
282
+ $id = $wpdb->get_var($wpdb->prepare("SELECT id FROM ${downloads} WHERE filename=%s", $filename));
283
+ if ($id)
284
+ {
285
+ // Ignore quick downloads by the same user
286
+ if ($store_details && (($group_within = intval(get_option(self::PREFIX . 'group_within'))) > 0))
287
+ {
288
+ $grouped_id = $wpdb->get_var($wpdb->prepare("SELECT MIN(id) FROM ${details} WHERE download=%d AND (download_date > DATE_ADD(NOW(), INTERVAL -%d SECOND)) AND ip=%s", $id, $group_within, $ip_addr));
289
+ if (intval($grouped_id) > 0)
290
+ $monitor = FALSE;
291
+ }
292
+ if ($monitor)
293
+ {
294
+ $sql = "UPDATE ${downloads} SET download_count=download_count+1, last_date=NOW(), file_exists=%d WHERE id=%d";
295
+ $wpdb->query($wpdb->prepare($sql, $exists, $id));
296
+ }
297
+ }
298
+ else
299
+ {
300
+ $sql = "INSERT INTO ${downloads} (filename, download_count, last_date, file_exists) VALUES (%s, 1, NOW(), %d)";
301
+ $wpdb->query($wpdb->prepare($sql, $filename, $exists));
302
+ $id = $wpdb->insert_id;
303
+ }
304
+ // If details are requested, store them as well
305
+ if ($monitor && $store_details)
306
+ {
307
+ $sql = "INSERT INTO ${details} (download, download_date, ip, referer, username, userid) VALUES (%d, NOW(), %s, %s, %s, %d)";
308
+ $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null;
309
+ if (!$username AND isset($_COOKIE['comment_author_'.COOKIEHASH]))
310
+ $username = utf8_encode($_COOKIE['comment_author_'.COOKIEHASH]);
311
+ $wpdb->query($wpdb->prepare($sql, $id, $ip_addr, $referer, $username, $userid));
312
+ }
313
  }
314
  // Make sure the file is available for download
315
  if (!$exists)
372
  $extensions = strval($_POST[self::PREFIX . 'extensions']);
373
  $detailed = intval($_POST[self::PREFIX . 'detailed']);
374
  $inline = strval($_POST[self::PREFIX . 'inline']);
375
+ $ignored_users = strval($_POST[self::PREFIX . 'ignored_users']);
376
+ $group_within = intval($_POST[self::PREFIX . 'group_within']);
377
  // Remove slashes if necessary
378
  if (get_magic_quotes_gpc())
379
  {
380
  $directories = stripslashes($directories);
381
  $extensions = stripslashes($extensions);
382
  $inline = stripslashes($inline);
383
+ $ignored_users = stripslashes($ignored_users);
384
  }
385
  // Escape the delimiter
386
  list($directories, $extensions) = str_replace(self::PREG_DELIMITER, '\\'.self::PREG_DELIMITER, array($directories, $extensions));
389
  update_option(self::PREFIX . 'extensions', $extensions);
390
  update_option(self::PREFIX . 'detailed', $detailed);
391
  update_option(self::PREFIX . 'inline', $inline);
392
+ update_option(self::PREFIX . 'ignored_users', $ignored_users);
393
+ update_option(self::PREFIX . 'group_within', $group_within);
394
  }
395
  // Load options from the database
396
  $directories = get_option(self::PREFIX . 'directories');
397
  $extensions = get_option(self::PREFIX . 'extensions');
398
  $detailed = get_option(self::PREFIX . 'detailed');
399
  $inline = get_option(self::PREFIX . 'inline');
400
+ $ignored_users = get_option(self::PREFIX . 'ignored_users');
401
+ $group_within = intval(get_option(self::PREFIX . 'group_within'));
402
  // Build the form
403
  ?>
404
  <div class="wrap">
420
  <h3><?php echo __("Store detailed logs?", self::GETTEXT_REALM); ?></h3>
421
  <p><?php echo __("If detailed logs are allowed, various information (including exact time of download, user's IP address, referrer etc.) is stored. This can fill your database quickly if you have only a little space or a lot of popular downloads. Otherwise just the total numbers of downloads are stored, consuming significantly less space.", self::GETTEXT_REALM); ?></p>
422
  <p><label for="<?php echo self::PREFIX; ?>detailed"><input type="checkbox" name="<?php echo self::PREFIX; ?>detailed" value="1" <?php if ($detailed) echo 'checked="checked" '; ?>/> <?php echo __('Use detailed statistics.', self::GETTEXT_REALM); ?></label></p>
423
+ <h3><?php echo __("Ignored users", self::GETTEXT_REALM); ?></h3>
424
+ <p><?php echo __("List of users whose downloads are not monitored. Separate multiple users with pipe character <code>|</code>. It is useful to prevent administrator damaging the statistics by testing that downloads work.", self::GETTEXT_REALM); ?></p>
425
+ <p><input type="text" name="<?php echo self::PREFIX; ?>ignored_users" value="<?php echo attribute_escape($ignored_users); ?>" /></p>
426
+ <h3><?php echo __("Ignore quick re-downloads", self::GETTEXT_REALM); ?></h3>
427
+ <p><?php echo __("If one IP address requests the same download several times within a given time interval, only the first time will be recorded. If a zero or a negative value is entered, all downloads will get recorded regardless of how quickly they occur after each other.", self::GETTEXT_REALM); ?></p>
428
+ <p><input type="text" name="<?php echo self::PREFIX; ?>group_within" value="<?php echo attribute_escape($group_within); ?>" /> <?php echo __('seconds', self::GETTEXT_REALM); ?></p>
429
  <div class="submit"><input type="submit" name="SimpleDownloadMonitor_Submit" value="<?php echo __("Update settings", self::GETTEXT_REALM) ?>" /></div>
430
  </form>
431
  </div><?php
738
  <col class="sdmon-rownum" align="right" width="32" />
739
  <col class="sdmon-date" align="center" />
740
  <col class="sdmon-ipaddr" />
741
+ <col class="sdmon-country" />
742
  <col class="sdmon-referer" />
743
  <col class="sdmon-username" />
744
  <col class="sdmon-tools" />
747
  <tr>
748
  <th>&nbsp;</th>
749
  <th><a href="<?php echo $this->GetUrlForList(array_merge($options, array('order' => self::ORDER_DATE ))); ?>"><?php echo __("Date", self::GETTEXT_REALM); ?></a></th>
750
+ <th><?php echo __("Country", self::GETTEXT_REALM); ?></th>
751
  <th><a href="<?php echo $this->GetUrlForList(array_merge($options, array('order' => self::ORDER_IP ))); ?>"><?php echo __("IP address", self::GETTEXT_REALM); ?></a></th>
752
  <th><a href="<?php echo $this->GetUrlForList(array_merge($options, array('order' => self::ORDER_REFERER))); ?>"><?php echo __("Referer", self::GETTEXT_REALM); ?></a></th>
753
  <th><a href="<?php echo $this->GetUrlForList(array_merge($options, array('order' => self::ORDER_USER ))); ?>"><?php echo __("Username", self::GETTEXT_REALM); ?></a></th>
759
  $where = $this->GetDetailWhere($flags);
760
  $orderby = $this->GetDetailOrderBy($order);
761
  $limit = $this->GetLimit($from);
762
+ if (class_exists('PepakIpToCountry'))
763
+ {
764
+ $ip_loc = PepakIpToCountry::Subselect("INET_ATON(${table_details}.ip)", 'iso_code2');
765
+ }
766
+ else
767
+ $ip_loc = 'NULL';
768
+ $sql = "SELECT id, download_date, ip, referer, userid, username, ${ip_loc} iso_code2 FROM ${table_details} WHERE download=%d ${where} ${orderby} ${limit}";
769
  $totalcount = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM ${table_details} WHERE download=%d ${where}", $download));
770
  $results = $wpdb->get_results($wpdb->prepare($sql, $download), ARRAY_N);
771
  $rownum = intval($options['from']);
772
  foreach ($results as $row) {
773
  $rownum++;
774
+ list($id, $date, $ip, $referer, $userid, $username, $country) = $row;
775
+ $country = strtolower($country);
776
+ $country_flag = ($country && file_exists($this->plugin_dir.'/flags/'.$country.'.png')) ? $this->plugin_url.'/flags/'.$country.'.png' : '';
777
  ?>
778
  <tr>
779
  <td><?php echo $rownum; ?>.</td>
780
  <td><?php echo mysql2date('Y-m-d h:i:s', $date, TRUE); ?></td>
781
+ <td><?php echo ($country_flag) ? '<img src="'.htmlspecialchars($country_flag).'" alt="'.$country.'" title="'.$country.'"/>' : $country; ?></td>
782
  <td><?php echo htmlspecialchars($ip); ?></td>
783
  <td><?php echo htmlspecialchars($referer); ?></td>
784
  <td><?php echo htmlspecialchars($username); ?></td>