1<?php
2/*************************
3  Coppermine Photo Gallery
4  ************************
5  Copyright (c) 2003-2016 Coppermine Dev Team
6  v1.0 originally written by Gregory Demar
7
8  This program is free software; you can redistribute it and/or modify
9  it under the terms of the GNU General Public License version 3
10  as published by the Free Software Foundation.
11
12  ********************************************
13  Coppermine version: 1.6.03
14  $HeadURL$
15**********************************************/
16
17if (!defined('IN_COPPERMINE')) die('Not in Coppermine...');
18
19/**
20 * initialize the vars start
21 */
22
23 // os and browser icon / name array
24$browserArray = array(
25    'Adobe' => 'adobe.png',
26    'Alcatel' => 'alcatel.png',
27    'Amaya' => 'amaya.png',
28    'Amiga Voyager' => 'amigavoyager.png',
29    'AOL' => 'aol.png',
30    'APT' => 'apt.png',
31    'Avant' => 'avant.png',
32    'AWeb' => 'aweb.png',
33    'Beonex' => 'beonex.png',
34    'BPFTP' => 'bpftp.png',
35    'Bytel' => 'bytel.png',
36    'Chimera' => 'chimera.png',
37    'Camino' => 'camino.png',
38    'Chrome' => 'chrome.png',
39    'Crazy Browser' => 'crazybrowser.png',
40    'Cyberdog' => 'cyberdog.png',
41    'Dillo' => 'dillo.png',
42    'DreamCast' => 'dreamcast.png',
43    'eCatch' => 'ecatch.png',
44    'Epiphany' => 'epiphany.png',
45    'Ericsson' => 'ericsson.png',
46    'Feeddemon' => 'feeddemon.png',
47    'Feedreader' => 'feedreader.png',
48    'Firefox' => 'firefox.png',
49    'Flock' => 'flock.png',
50    'fpexpress' => 'fpexpress.png',
51    'Fresco' => 'fresco.png',
52    'Galeon' => 'galeon.png',
53    'Getright' => 'getright.png',
54    'Gozilla' => 'gozilla.png',
55    'HotJava' => 'hotjava.png',
56    'ibrowse' => 'ibrowse.png',
57    'iCab' => 'icab.png',
58    'Iceweasel' => 'iceweasel.png',
59    'java' => 'java.png',
60    'jetbrains' => 'jetbrains_omea.png',
61    'K-Meleon' => 'kmeleon.png',
62    'Kazehakase' => 'kazehakase.png',
63    'Konqueror' => 'konqueror.png',
64    'lg' => 'lg.png',
65    'Lotus Notes' => 'lotusnotes.png',
66    'Lynx' => 'lynx.png',
67    'MacWeb' => 'macweb.png',
68    'MediaPlayer' => 'mediaplayer.png',
69    'Minefield' => 'minefield.png',
70    'Motorola' => 'motorola.png',
71    'Mozilla' => 'mozilla.png',
72    'Mozilla Firebird' => 'phoenix.png',
73    'mplayer' => 'mplayer.png',
74    'NetSurf' => 'netsurf.png',
75    'IE3' => 'msie.png',
76    'IE4' => 'msie.png',
77    'IE5.0' => 'msie.png',
78    'IE5.5' => 'msie.png',
79    'IE6' => 'msie6.png',
80    'IE7' => 'msie7.png',
81    'IE8' => 'msie8.png',
82    'IE9' => 'msie8.png',
83    'IE10' => 'msie8.png',
84    'IE' => 'msie.png',
85    'iPhone' => 'iphone.png',
86    'HTTrack' => 'httrack.png',
87    'Maxthon' => 'maxthon.png',
88    'Multizilla' => 'multizilla.png',
89    'Mosaic' => 'ncsa_mosaic.png',
90    'NetNewsWire' => 'netnewswire.png',
91    'NetPositive' => 'netpositive.png',
92    'Netscape' => 'netscape.png',
93    'netshow' => 'netshow.png',
94    'newsfire' => 'newsfire.png',
95    'newsgator' => 'newsgator.png',
96    'newzcrawler' => 'newzcrawler.png',
97    'Nintendo DS' => 'nds.png',
98    'nokia' => 'nokia.png',
99    'Not Available' => 'notavailable.png',
100    'Off By One' => 'ob1.png',
101    'OmniWeb' => 'omniweb.png',
102    'Opera' => 'opera.png',
103    'Panasonic' => 'panasonic.png',
104    'PDA phone' => 'pdaphone.png',
105    'Philips' => 'philips.png',
106    'Phoenix' => 'phoenix.png',
107    'Pluck' => 'pluck.png',
108    'Pulpfiction' => 'pulpfiction.png',
109    'Real' => 'real.png',
110    'RSS' => 'rss.png',
111    'RSSbandit' => 'rssbandit.png',
112    'RSSowl' => 'rssowl.png',
113    'RSSreader' => 'rssreader.png',
114    'Safari' => 'safari.png',
115    'Sagem' => 'sagem.png',
116    'Samsung' => 'samsung.png',
117    'Sharp' => 'sharp.png',
118    'Sharp reader' => 'sharpreader.png',
119    'Shiira' => 'shiira.png',
120    'Shrook' => 'shrook.png',
121    'Siemens' => 'siemens.png',
122    'Sleipnir' => 'sleipnir.png',
123    'Sony' => 'sony.png',
124    'Sony Ericsson' => 'ericsson.png',
125    'Stainless' => 'stainless.png',
126    'Staroffice' => 'staroffice.png',
127    'Sunrise' => 'sunrise.png',
128    'Teleport' => 'teleport.png',
129    'Trium' => 'trium.png',
130    'Unknown' => 'unknown.png',
131    'W3C' => 'w3c.png',
132    'WebCopier' => 'webcopier.png',
133    'Web TV' => 'webtv.png',
134    'webzip' => 'webzip.png',
135);
136
137$osArray = array(
138    'aix' => 'aix.png',
139    'Amiga OS' => 'amigaos.png',
140    'Apple' => 'apple.png',
141    'Atari' => 'atari.png',
142    'beOS' => 'beos.png',
143    'BSD' => 'bsd.png',
144    'BSD FreeBSD' => 'bsdfreebsd.png',
145    'bsdi' => 'bsdi.png',
146    'bsdnetbsd' => 'bsdnetbsd.png',
147    'bsdopenbsd' => 'bsdopenbsd.png',
148    'CP/m' => 'cpm.png',
149    'Debian' => 'debian.png',
150    'Digital' => 'digital.png',
151    'DOS' => 'dos.png',
152    'Dreamcast' => 'dreamcast.png',
153    'Fireball Spider' => 'fireball.png',
154    'Free BSD' => 'freebsd.png',
155    'Googlebot' => 'google.png',
156    'gnu' => 'gnu.png',
157    'HP UX' => 'hpux.png',
158    'IBM' => 'ibm.png',
159    'iMode' => 'imode.png',
160    'Inferno' => 'inferno.png',
161    'iPhone' => 'iphone.png',
162    'Irix' => 'irix.png',
163    'Java' => 'java.png',
164    'kFreeBSD' => 'kfreebsd.png',
165    'Linux' => 'linux.png',
166    'Linux CentOS' => 'linuxcentos.png',
167    'Linux Debian' => 'linuxdebian.png',
168    'Linux Fedora' => 'linuxfedora.png',
169    'Linux Mandrake' => 'linuxmandr.png',
170    'Linux RedHat' => 'linuxredhat.png',
171    'Linux Suse' => 'linuxsuse.png',
172    'Linux Ubuntu' => 'linuxubuntu.png',
173    'Lycos Spider' => 'lycos.png',
174    'Mac OS' => 'mac.png',
175    'Macintosh' => 'macintosh.png',
176    'Mac OS X' => 'macosx.png',
177    'NetBSD' => 'netbsd.png',
178    'Netware' => 'netware.png',
179    'neXt' => 'next.png',
180    'Nintendo Wii' => 'wii.png',
181    'Open BSD' => 'openbsd.png',
182    'OS/2' => 'os2.png',
183    'osf' => 'osf.png',
184    'PalmOS' => 'palm.png',
185    'Playstation' => 'ps2.png',
186    'Playstation 3' => 'ps3.png',
187    'Playstation Portable' => 'psp.png',
188    'qnx' => 'qnx.png',
189    'Risc OS' => 'riscos.png',
190    'SCO' => 'sco.png',
191    'Sun OS' => 'sunos.png',
192    'Symbian' => 'symbian.png',
193    'Unix' => 'unix.png',
194    'Unknown' => 'unknown.png',
195    'vms' => 'vms.png',
196    'webtv' => 'webtv.png',
197    'Windows' => 'win.png',
198    'Windows 3.x' => 'win16.png',
199    'Windows 2000' => 'win2000.png',
200    'Windows 2003 Server' => 'win2003.png',
201    'Windows 95' => 'win95.png',
202    'Windows 98' => 'win98.png',
203    'Windows CE' => 'wince.png',
204    'Windows ME' => 'winme.png',
205    'Windows NT' => 'winnt.png',
206    'Windows XP' => 'winxp.png',
207    'Windows Vista' => 'winvista.png',
208    'Windows 7' => 'win7.png',
209    'Windows 8' => 'win8.png',
210);
211
212
213/**
214 * initialize the vars end
215 */
216
217/**
218 * function defintions start
219 */
220function individualStatsByOS($pid='',$type='hits', $tableWidth='100%') {
221      global $osArray, $CONFIG, $lang_stat_details_php, $icon_array;
222       $maxBarWidth = 200;
223      if (GALLERY_ADMIN_MODE == true){
224        foreach ($osArray as $key => $value) {
225                $query = "SELECT COUNT(*) FROM ";
226                if ($type=='vote') {
227                    $query .= $CONFIG['TABLE_VOTE_STATS'];
228                } else {
229                    $query .= $CONFIG['TABLE_HIT_STATS'];
230                }
231                $query .= " WHERE os = '$key'";
232                if ($pid!='') {
233                    $query .= " AND pid='$pid'";
234                }
235                // Now this is a very crude way to query the database which is bound to overload larger galleries. Should be reviewed!
236                $result = cpg_db_query($query);
237                $row = $result->fetchArray(true);
238                if ($row[0] != 0) {
239                    $osResultArray[$key] = $row[0];
240                }
241        }
242        array_multisort($osResultArray,SORT_DESC);
243        $osTotal = array_sum($osResultArray);
244        print '<a name="os"></a>';
245        starttable($tableWidth, $icon_array['os'] . $lang_stat_details_php['stats_by_os'], 3);
246        print <<< EOT
247        <tr>
248          <td class="tableh2" colspan="2">{$lang_stat_details_php['os']}</td>
249          <td class="tableh2" align="left">{$lang_stat_details_php['number_of_hits']} (%)</td>
250        </tr>
251EOT;
252        $loopCounter = 0;
253        foreach ($osResultArray as $key => $value) {
254          $individualBarWidth = floor(($value * $maxBarWidth) / $osTotal);
255          $individualPercentage = floor(($value * 1000) / $osTotal)/10;
256          if ($individualPercentage == floor($individualPercentage)) {
257            $individualPercentage .= '.0';
258          }
259          if ($loopCounter == 0) {
260            $row_style_class = 'tableb';
261            $loopCounter++;
262          } else {
263            $row_style_class = 'tableb tableb_alternate';
264            $loopCounter = 0;
265          }
266          print <<< EOT
267          <tr>
268            <td class="{$row_style_class}" width="20"><img src="images/os/{$osArray[$key]}" width="14" height="14" border="0" title="{$key}" alt="" /></td>
269            <td class="{$row_style_class}">{$key}</td>
270            <td class="{$row_style_class}" align="left">
271EOT;
272                print theme_display_bar($value,$osTotal,200,'', '', ' ('.$individualPercentage.' %)');
273          print <<< EOT
274            </td>
275          </tr>
276EOT;
277        }
278        print <<< EOT
279        <tr>
280          <td class="tablef" colspan="2">{$lang_stat_details_php['total']}</td>
281          <td class="tablef" align="left">{$osTotal}</td>
282        </tr>
283EOT;
284        endtable();
285
286        print '<br />';
287    }
288}
289
290function individualStatsByBrowser($pid='',$type='hits', $tableWidth='100%') {
291      global $browserArray, $CONFIG, $lang_stat_details_php, $icon_array;
292      $maxBarWidth = 200;
293      if (GALLERY_ADMIN_MODE == true){
294        foreach ($browserArray as $key => $value) {
295                $query = "SELECT COUNT(*) FROM ";
296                if ($type=='vote') {
297                    $query .= $CONFIG['TABLE_VOTE_STATS'];
298                } else {
299                    $query .= $CONFIG['TABLE_HIT_STATS'];
300                }
301                $query .= " WHERE browser = '$key'";
302                if ($pid!='') {
303                    $query .= " AND pid='$pid'";
304                }
305                // Now this is a very crude way to query the database which is bound to overload larger galleries. Should be reviewed!
306                $result = cpg_db_query($query);
307                $row = $result->fetchArray(true);
308                if ($row[0] != 0) {
309                    $browserResultArray[$key] = $row[0];
310                }
311        }
312        array_multisort($browserResultArray,SORT_DESC);
313        $browserTotal = array_sum($browserResultArray);
314        print '<a name="browser"></a>';
315        starttable($tableWidth, $icon_array['browser'] . $lang_stat_details_php['stats_by_browser'], 3);
316        print <<< EOT
317        <tr>
318          <td class="tableh2" colspan="2">{$lang_stat_details_php['browser']}</td>
319          <td class="tableh2" align="left">{$lang_stat_details_php['number_of_hits']} (%)</td>
320        </tr>
321EOT;
322        $loopCounter = 0;
323        foreach ($browserResultArray as $key => $value) {
324          $individualBarWidth = floor(($value * $maxBarWidth) / $browserTotal);
325          $individualPercentage = floor(($value * 1000) / $browserTotal)/10;
326          if ($individualPercentage == floor($individualPercentage)) {
327            $individualPercentage .= '.0';
328          }
329          if ($loopCounter == 0) {
330            $row_style_class = 'tableb';
331            $loopCounter++;
332          } else {
333            $row_style_class = 'tableb tableb_alternate';
334            $loopCounter = 0;
335          }
336          print <<< EOT
337          <tr>
338            <td class="{$row_style_class}" width="20"><img src="images/browser/{$browserArray[$key]}" width="14" height="14" border="0" title="{$key}" alt="" /></td>
339            <td class="{$row_style_class}">{$key}</td>
340            <td class="{$row_style_class}" align="left">
341EOT;
342          print theme_display_bar($value,$browserTotal,200,'', '', ' ('.$individualPercentage.' %)');
343          print <<< EOT
344            </td>
345          </tr>
346EOT;
347        }
348        print <<< EOT
349        <tr>
350          <td class="tablef" colspan="2">{$lang_stat_details_php['total']}</td>
351          <td class="tablef" align="left">{$browserTotal}</td>
352        </tr>
353EOT;
354        endtable();
355
356        print '<br />';
357    }
358}
359
360/**
361 * function defintions end
362 */
363
364//EOF