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