├── .gitignore ├── .htaccess ├── LICENSE.txt ├── README.md ├── TODO.txt ├── class ├── KippoGeo.class.php ├── KippoGraph.class.php ├── KippoIP.class.php ├── KippoInput.class.php └── KippoPlayLog.class.php ├── config.php.dist ├── favicon.ico ├── gallery.php ├── generated-graphs └── index.php ├── gpl.txt ├── images ├── alienvault.ico ├── bg.gif ├── dshield.ico ├── first.png ├── fortiguard.ico ├── index.php ├── ip_tracer.png ├── ipvoid.ico ├── kippo-graph-img.png ├── last.png ├── mcafee.ico ├── next.png ├── novirusthanks.ico ├── play.ico ├── prev.png ├── robtex.ico ├── virustotal.ico ├── warning.png └── watchguard.ico ├── include ├── export.php ├── footer.php ├── geoplugin │ └── geoplugin.class.php ├── header.php ├── index.php ├── kippo-ip.ajax.php ├── languages │ ├── lang.ar.php │ ├── lang.cs.php │ ├── lang.de.php │ ├── lang.el.php │ ├── lang.en.php │ ├── lang.es.php │ ├── lang.et.php │ ├── lang.fr.php │ ├── lang.it.php │ ├── lang.nl.php │ ├── lang.pl.php │ ├── lang.sk.php │ └── lang.sv.php ├── libchart │ ├── COPYING │ ├── ChangeLog │ ├── README │ ├── classes │ │ ├── libchart.php │ │ ├── model │ │ │ ├── ChartConfig.php │ │ │ ├── DataSet.php │ │ │ ├── Point.php │ │ │ ├── XYDataSet.php │ │ │ └── XYSeriesDataSet.php │ │ └── view │ │ │ ├── axis │ │ │ ├── Axis.php │ │ │ └── Bound.php │ │ │ ├── caption │ │ │ └── Caption.php │ │ │ ├── chart │ │ │ ├── BarChart.php │ │ │ ├── Chart.php │ │ │ ├── HorizontalBarChart.php │ │ │ ├── LineChart.php │ │ │ ├── PieChart.php │ │ │ └── VerticalBarChart.php │ │ │ ├── color │ │ │ ├── Color.php │ │ │ ├── ColorSet.php │ │ │ └── Palette.php │ │ │ ├── plot │ │ │ └── Plot.php │ │ │ ├── primitive │ │ │ ├── Padding.php │ │ │ ├── Primitive.php │ │ │ └── Rectangle.php │ │ │ └── text │ │ │ └── Text.php │ ├── doc │ │ ├── DEJAVU_LICENSE │ │ └── GNU_GPL_V3 │ ├── fonts │ │ ├── DejaVuSansCondensed-Bold.ttf │ │ ├── DejaVuSansCondensed.ttf │ │ ├── OpenSans-Bold.ttf │ │ └── OpenSans-Regular.ttf │ └── images │ │ └── PoweredBy.png ├── maxmind │ ├── GeoLite2-City.mmdb │ └── geoip2.phar ├── misc │ ├── ip2host.php │ ├── versionCheck.php │ └── xss_clean.php ├── qgooglevisualapi │ ├── QAnnotatedtimelineGoogleGraph.class.php │ ├── QApikeyGoogleGraph.class.php │ ├── QAreachartGoogleGraph.class.php │ ├── QBarchartGoogleGraph.class.php │ ├── QColumnchartGoogleGraph.class.php │ ├── QConfig.class.php │ ├── QGaugeGoogleGraph.class.php │ ├── QGoogleGraph.class.php │ ├── QInflector.class.php │ ├── QIntensitymapGoogleGraph.class.php │ ├── QLinechartGoogleGraph.class.php │ ├── QMagictableGoogleGraph.class.php │ ├── QMapGoogleGraph.class.php │ ├── QMixupGoogleGraph.class.php │ ├── QMotionchartGoogleGraph.class.php │ ├── QOrgchartGoogleGraph.class.php │ ├── QPiechartGoogleGraph.class.php │ ├── QScatterchartGoogleGraph.class.php │ ├── QTableGoogleGraph.class.php │ ├── QTool.class.php │ ├── QVizualisationGoogleGraph.class.php │ ├── QWordcloudGoogleGraph.class.php │ ├── config.inc.php │ └── readme.txt ├── rb.php ├── sql.php └── tor │ ├── tor.class.php │ └── tor_exit_node_list.txt ├── index.php ├── kippo-geo.php ├── kippo-graph.php ├── kippo-input.php ├── kippo-ip.php ├── kippo-play.php ├── kippo-playlog.php ├── kippo-scanner.php ├── robots.txt ├── scripts ├── BinFileReader.js ├── fancybox │ ├── blank.gif │ ├── fancy_close.png │ ├── fancy_loading.png │ ├── fancy_nav_left.png │ ├── fancy_nav_right.png │ ├── fancy_shadow_e.png │ ├── fancy_shadow_n.png │ ├── fancy_shadow_ne.png │ ├── fancy_shadow_nw.png │ ├── fancy_shadow_s.png │ ├── fancy_shadow_se.png │ ├── fancy_shadow_sw.png │ ├── fancy_shadow_w.png │ ├── fancy_title_left.png │ ├── fancy_title_main.png │ ├── fancy_title_over.png │ ├── fancy_title_right.png │ ├── fancybox-x.png │ ├── fancybox-y.png │ ├── fancybox.png │ ├── index.php │ ├── jquery.easing-1.3.pack.js │ ├── jquery.fancybox-1.3.2.css │ ├── jquery.fancybox-1.3.2.js │ ├── jquery.fancybox-1.3.2.pack.js │ ├── jquery.fancybox-1.3.2.setup.js │ └── jquery.mousewheel-3.0.4.pack.js ├── hoverIntent.js ├── index.php ├── jquery-1.4.1.min.js ├── jquery-1.4.4.min.js ├── jquery.getUrlParam.js ├── jquery.tablesorter.js ├── jquery.tablesorter.pager.js ├── jspl.js ├── kippo-ip.js ├── kippo-playlog.js └── superfish.js └── styles ├── forms.css ├── gallery.css ├── homepage.css ├── index.php ├── layout.css ├── navi.css ├── playlog.css ├── portfolio.css ├── tables.css └── tablesorter.css /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea/ 3 | generated-graphs/ 4 | config.php 5 | 6 | # These two are not actually ignored here, 7 | # but with git update-index --assume-unchanged 8 | include/maxmind/GeoLite2-City.mmdb 9 | include/tor/tor_exit_node_list.txt -------------------------------------------------------------------------------- /.htaccess: -------------------------------------------------------------------------------- 1 | 2 | RewriteEngine On 3 | RewriteRule ^results\.php$ http://www.garyshood.com/virus/results.php$1 [R=301,L] 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Kippo-Graph 2 | =========== 3 | 4 | Kippo-Graph is a full featured script to visualize statistics for a Kippo based SSH honeypot. 5 | 6 | It uses the Libchart PHP chart drawing library by Jean-Marc Trémeaux, 7 | QGoogleVisualizationAPI PHP Wrapper for Google's Visualization API by Thomas Schäfer, 8 | RedBeanPHP library by Gabor de Mooij, MaxMind and geoPlugin geolocation technology. 9 | 10 | REQUIREMENTS: 11 | ------------- 12 | 1. PHP version 5.3.4 or higher. 13 | 2. The following packages: _libapache2-mod-php5_, _php5-mysql_, _php5-gd_, _php5-curl_. 14 | 15 | On Ubuntu/Debian: 16 | > apt-get update && apt-get install -y libapache2-mod-php5 php5-mysql php5-gd php5-curl 17 | > 18 | > /etc/init.d/apache2 restart 19 | 20 | QUICK INSTALLATION: 21 | ------------------- 22 | > wget http://bruteforce.gr/wp-content/uploads/kippo-graph-VERSION.tar.gz 23 | > 24 | > mv kippo-graph-VERSION.tar.gz /var/www/html 25 | > 26 | > cd /var/www/html 27 | > 28 | > tar zxvf kippo-graph-VERSION.tar.gz 29 | > 30 | > mv kippo-graph-VERSION kippo-graph 31 | > 32 | > cd kippo-graph 33 | > 34 | > chmod 777 generated-graphs 35 | > 36 | > cp config.php.dist config.php 37 | > 38 | > nano config.php #enter the appropriate values 39 | 40 | Browse to http://your-server/kippo-graph to view or generate the honeypot charts and statistics. 41 | 42 | Note 1: If you choose to disable `REALTIME_STATS` in your config.php file it is advisable to 43 | setup a cron job to update the charts in the background. The recommended way to do that 44 | is to add the following line in your crontab with `crontab -e` (make sure to change the 45 | kippo-graph path if it's different): 46 | > @hourly cd /var/www/html/kippo-graph && php kippo-graph.php > /dev/null 2>&1 47 | 48 | Note 2: If you want to use the Kippo-Scanner component you will have to allow Kippo-Graph's .htaccess file 49 | to take effect. You can do this by editing your Apache configuration file at /etc/apache2/apache2.conf 50 | and changing `AllowOverride None` to `AllowOverride All` for the /var/www/ Directory (only). 51 | 52 | Note 3: To fully use the geolocation features (Intensity Map) you will need to give CREATE 53 | TEMPORARY TABLES rights to your MySQL database user (most likely it has already been done). -------------------------------------------------------------------------------- /TODO.txt: -------------------------------------------------------------------------------- 1 | TODO for new versions: 2 | + Use new version of QGoogleVisualAPI and generate more graphs (eg GeoMap instead of IntensityMap?) 3 | + 2nd tab on Intensity Map (or new map) with successes per country (temporary SQL table/query) 4 | + Add option to show results only from a particular sensor (add value in config.php and then change the SQL queries? Perhaps move all SQL query strings in seperate file) 5 | + Proxy detection resurrection, here are some lists: https://github.com/lfamorim/barrelroll/tree/master/full_list 6 | + Table with returning attackers (Kippo-Input). If username/password in auth table exists in userdb.txt then he logged in again (apart from the defaults). 7 | + Integrate or offer as separate utility the VirusTotal uploader by @0xAli (contact him again for file) 8 | + Use convert/save as ZIP file API from online-convert.com in Kippo-Input for downloaded files 9 | + Kippo-Input: downloaded files with curl (curl -O ) 10 | + Add the dig/host/geoip information from Kippo-Playlog to Kippo-IP as well 11 | 12 | DONE: 13 | + Option to use local/offline geolocation service and not geoplugin, see: https://www.maxmind.com/app/support 14 | + Add www.ip-adress.com/whois/ in Kippo-Geo for IPs (limit of 50 lookups per day is OK) 15 | + Consider replacing NoVirusThanks with http://www.garyshood.com/virus/ and http://scanthis.net/ 16 | + Integrate Kippo-Playlog 17 | + Seperate HTML and PHP where possible, tidy up code! 18 | + Add CSV dump/backup function 19 | + Graphs (.png) creation should be moved to xxx-generator for each component (or all in one!) 20 | + Move project to sf.net/googlecode.com/github.com (next milestone version) 21 | + Show basic stats like number of attacks, number of IPs, total commands, etc --OK-- 22 | + Fix XSS in Kippo-Input --OK-- 23 | + Human activity per week, Successes per day (line), Probing busiest days (Top 20), naming conventions/changes, update gallery. --OK-- 24 | + URGENT: Fix "Successful logins from same IP", "Probes per day", "Successes per day", when the DB is very big. See: http://t.co/TltEfH89 --OK-- 25 | + Successes per week graph, so gallery will look complete :P --OK-- 26 | + Add timestamp to command tables --OK-- 27 | + New table for passwd and various commands --OK-- 28 | + Generate and post CHECKSUMS for the tar archive online --OK-- 29 | + Include a license file. libchart is GPL, QGoogleVisualAPI is BSD 2-Clause (aka Modified BSD aka FreeBSD), 30 | geoplugin is free asks for recognition - OK, 31 | web template has its own license that requires link at the bottom - OK, 32 | honeycomb image in the logo requires attribution - OK, 33 | so Kippo-Graph license => GPL, mentioning all the others seperately, 34 | see: http://programmers.stackexchange.com/a/75464/43511 35 | + Make version checking more secure with a directive in config.php (UPDATE CHECK YES/NO) --OK-- 36 | + Check IPs for proxies or not --NO FREE/EASY SOLUTION, ABANDON-- 37 | + Visualize IP geolocation data --OK-- 38 | + Temporary SQL table needed for IntensityMap --OK-- 39 | + Create a proper image for index.php --OK-- 40 | + Visualize or display wget commands --OK-- 41 | + Visualize or display apt-get install commands --OK-- 42 | + Better way to visualize input/commands => Simple text/table display --OK-- 43 | + More libchart graphs (Pies, etc) where suited --OK-- 44 | -------------------------------------------------------------------------------- /class/KippoIP.class.php: -------------------------------------------------------------------------------- 1 | maxmind = new \GeoIp2\Database\Reader(DIR_ROOT . '/include/maxmind/GeoLite2-City.mmdb'); 14 | if (TOR_CHECK == 'YES') 15 | $this->tor = new Tor(); 16 | 17 | //Let's connect to the database 18 | R::setup('mysql:host=' . DB_HOST . ';port=' . DB_PORT . ';dbname=' . DB_NAME, DB_USER, DB_PASS); 19 | } 20 | 21 | function __destruct() 22 | { 23 | R::close(); 24 | } 25 | 26 | public function printOverallIpActivity() 27 | { 28 | $db_query = "SELECT A.*, B.success FROM ( 29 | SELECT ip, MAX(starttime) as starttime, COUNT(DISTINCT sessions.id) as sessions 30 | FROM sessions GROUP BY ip) A 31 | LEFT JOIN ( 32 | SELECT sessions.ip, MAX(success) as success 33 | FROM sessions, auth 34 | WHERE sessions.id = auth.session 35 | GROUP BY ip) B on A.ip = B.ip 36 | ORDER BY A.ip"; 37 | 38 | $rows = R::getAll($db_query); 39 | 40 | if (count($rows)) { 41 | echo '

Click column heads to sort data, rows to display attack details.

'; 42 | 43 | echo '
44 | Total identified IP addresses: ' . count($rows) . '
'; 45 | 46 | //We create a skeleton for the table 47 | echo ''; 48 | echo ''; 49 | echo ''; 50 | if (GEO_METHOD == 'LOCAL') 51 | echo ''; 52 | if (TOR_CHECK == 'YES') 53 | echo ''; 54 | echo ''; 55 | echo ''; 56 | echo ''; 57 | echo ''; 58 | 59 | //For every row returned from the database we add a new point to the dataset, 60 | //and create a new table row with the data as columns 61 | foreach ($rows as $row) { 62 | $success = is_null($row['success']) ? 'N/A' : $row['success']; 63 | $timestamp = is_null($row['starttime']) ? 'N/A' : $row['starttime']; 64 | 65 | echo ''; 66 | echo ''; 67 | 68 | if (GEO_METHOD == 'LOCAL') { 69 | try { 70 | $geodata = $this->maxmind->city($row['ip']); 71 | $geolocation = $geodata->city->name ? $geodata->city->name . ', ' . $geodata->country->name : $geodata->country->name; 72 | 73 | } catch (\GeoIp2\Exception\GeoIp2Exception $e) { 74 | $geolocation = 'N/A'; 75 | } 76 | echo ''; 77 | } 78 | 79 | if (TOR_CHECK == 'YES') { 80 | $exitnode = $this->tor->isTorExitNode($row['ip']) ? 'Yes' : 'No'; 81 | echo ''; 82 | } 83 | 84 | echo ''; 85 | echo ''; 86 | echo ''; 87 | echo ''; 88 | } 89 | 90 | //Close tbody and table element, it's ready. 91 | echo '
IP addressGeolocationTor exit nodeSessions countSuccessLast seen
' . $row['ip'] . '' . $geolocation . '' . $exitnode . '' . $row['sessions'] . '' . $success . '' . $timestamp . '
'; 92 | } 93 | 94 | echo '
'; 95 | echo '
'; 96 | echo ' '; 97 | echo ' '; 98 | echo ' '; 99 | echo ' '; 100 | echo ' '; 101 | echo ' '; 110 | echo '
'; 111 | echo ' CSV of all recent IP activity'; 112 | echo '
'; 113 | 114 | echo '

'; 115 | if (GEO_METHOD == 'LOCAL') { 116 | echo 'http://www.maxmind.com
'; 117 | } 118 | else { 119 | //TODO 120 | } 121 | } 122 | } 123 | 124 | ?> 125 | -------------------------------------------------------------------------------- /class/KippoPlayLog.class.php: -------------------------------------------------------------------------------- 1 | Hiding all entries which are smaller than ' . PLAYBACK_SIZE_IGNORE . 'kb.

'; 21 | 22 | if (strtoupper(BACK_END_ENGINE) === 'COWRIE') 23 | $db_size = "size"; 24 | else 25 | $db_size = "LENGTH(ttylog)"; 26 | 27 | $db_query = "SELECT * FROM (SELECT ttylog.session, auth.timestamp, ROUND($db_size/1024, 2) AS size, COUNT(input) as input 28 | FROM ttylog 29 | JOIN auth ON ttylog.session = auth.session 30 | JOIN input ON ttylog.session = input.session 31 | WHERE auth.success = 1 32 | GROUP BY ttylog.session 33 | ORDER BY auth.timestamp ASC) s 34 | WHERE size > " . PLAYBACK_SIZE_IGNORE; 35 | 36 | $rows = R::getAll($db_query); 37 | 38 | echo '
39 | Total logs: ' . count($rows) . '
'; 40 | 41 | echo ''; 42 | echo ''; 43 | echo ''; 44 | echo ''; 45 | echo ''; 46 | echo ''; 47 | echo ''; 48 | echo ''; 49 | 50 | if (count($rows)) { 51 | // We create a skeleton for the table 52 | $counter = 1; 53 | 54 | // For every row returned from the database we create a new table row with the data as columns 55 | foreach ($rows as $row) { 56 | echo ''; 57 | echo ''; 58 | echo ''; 59 | echo ''; 60 | echo ''; 61 | echo ''; 62 | echo ''; 63 | $counter++; 64 | } 65 | } 66 | 67 | // Close tbody and table element, it's ready. 68 | echo '
IDTimestampSizeInput CommandsAction
' . $counter . '' . $row['timestamp'] . '' . $row['size'] . 'kb' . '' . $row['input'] . 'Play TTY Log
'; 69 | 70 | echo '
'; 71 | echo '
'; 72 | echo ' '; 73 | echo ' '; 74 | echo ' '; 75 | echo ' '; 76 | echo ' '; 77 | echo ' '; 86 | echo '
'; 87 | echo '
'; 88 | 89 | echo '

'; 90 | } 91 | } 92 | 93 | ?> 94 | -------------------------------------------------------------------------------- /config.php.dist: -------------------------------------------------------------------------------- 1 |  88 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/favicon.ico -------------------------------------------------------------------------------- /generated-graphs/index.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/generated-graphs/index.php -------------------------------------------------------------------------------- /images/alienvault.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/alienvault.ico -------------------------------------------------------------------------------- /images/bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/bg.gif -------------------------------------------------------------------------------- /images/dshield.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/dshield.ico -------------------------------------------------------------------------------- /images/first.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/first.png -------------------------------------------------------------------------------- /images/fortiguard.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/fortiguard.ico -------------------------------------------------------------------------------- /images/index.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/index.php -------------------------------------------------------------------------------- /images/ip_tracer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/ip_tracer.png -------------------------------------------------------------------------------- /images/ipvoid.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/ipvoid.ico -------------------------------------------------------------------------------- /images/kippo-graph-img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/kippo-graph-img.png -------------------------------------------------------------------------------- /images/last.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/last.png -------------------------------------------------------------------------------- /images/mcafee.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/mcafee.ico -------------------------------------------------------------------------------- /images/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/next.png -------------------------------------------------------------------------------- /images/novirusthanks.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/novirusthanks.ico -------------------------------------------------------------------------------- /images/play.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/play.ico -------------------------------------------------------------------------------- /images/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/prev.png -------------------------------------------------------------------------------- /images/robtex.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/robtex.ico -------------------------------------------------------------------------------- /images/virustotal.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/virustotal.ico -------------------------------------------------------------------------------- /images/warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/warning.png -------------------------------------------------------------------------------- /images/watchguard.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/images/watchguard.ico -------------------------------------------------------------------------------- /include/export.php: -------------------------------------------------------------------------------- 1 | clean_input($_GET['type'])}; 24 | 25 | $rows = R::getAll($db_query); 26 | 27 | $first = true; // flag for column titeles 28 | 29 | // open file without writing to disk 30 | $out = fopen('php://output', 'w'); 31 | 32 | foreach ($rows as $row) { 33 | if ($first) { 34 | $titles = array(); 35 | foreach ($row as $key => $val) { 36 | $titles[] = $key; 37 | } 38 | fputcsv($out, $titles); // write the titles 39 | $first = false; // no longer on the column titles 40 | } 41 | fputcsv($out, $row); // write all other rows 42 | } 43 | fclose($out); 44 | 45 | R::close(); 46 | 47 | ?> 48 | -------------------------------------------------------------------------------- /include/footer.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | 9 |
10 | 11 | 16 | 17 | -------------------------------------------------------------------------------- /include/geoplugin/geoplugin.class.php: -------------------------------------------------------------------------------- 1 | host); 69 | $host = str_replace('{CURRENCY}', $this->currency, $host); 70 | 71 | $data = array(); 72 | 73 | $response = $this->fetch($host); 74 | 75 | $data = unserialize($response); 76 | 77 | //set the geoPlugin vars 78 | $this->ip = $ip; 79 | $this->city = $data['geoplugin_city']; 80 | $this->region = $data['geoplugin_region']; 81 | $this->areaCode = $data['geoplugin_areaCode']; 82 | $this->dmaCode = $data['geoplugin_dmaCode']; 83 | $this->countryCode = $data['geoplugin_countryCode']; 84 | $this->countryName = $data['geoplugin_countryName']; 85 | $this->continentCode = $data['geoplugin_continentCode']; 86 | $this->latitude = $data['geoplugin_latitude']; 87 | $this->longitude = $data['geoplugin_longitude']; 88 | $this->currencyCode = $data['geoplugin_currencyCode']; 89 | $this->currencySymbol = $data['geoplugin_currencySymbol']; 90 | $this->currencyConverter = $data['geoplugin_currencyConverter']; 91 | 92 | } 93 | 94 | function fetch($host) 95 | { 96 | 97 | if (function_exists('curl_init')) { 98 | 99 | //use cURL to fetch data 100 | $ch = curl_init(); 101 | curl_setopt($ch, CURLOPT_URL, $host); 102 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 103 | curl_setopt($ch, CURLOPT_USERAGENT, 'geoPlugin PHP Class v1.0'); 104 | $response = curl_exec($ch); 105 | curl_close($ch); 106 | 107 | } else if (ini_get('allow_url_fopen')) { 108 | 109 | //fall back to fopen() 110 | $response = file_get_contents($host, 'r'); 111 | 112 | } else { 113 | 114 | trigger_error('geoPlugin class Error: Cannot retrieve data. Either compile PHP with cURL support or enable allow_url_fopen in php.ini ', E_USER_ERROR); 115 | return; 116 | 117 | } 118 | 119 | return $response; 120 | } 121 | 122 | function convert($amount, $float = 2, $symbol = true) 123 | { 124 | 125 | //easily convert amounts to geolocated currency. 126 | if (!is_numeric($this->currencyConverter) || $this->currencyConverter == 0) { 127 | trigger_error('geoPlugin class Notice: currencyConverter has no value.', E_USER_NOTICE); 128 | return $amount; 129 | } 130 | if (!is_numeric($amount)) { 131 | trigger_error('geoPlugin class Warning: The amount passed to geoPlugin::convert is not numeric.', E_USER_WARNING); 132 | return $amount; 133 | } 134 | if ($symbol === true) { 135 | return $this->currencySymbol . round(($amount * $this->currencyConverter), $float); 136 | } else { 137 | return round(($amount * $this->currencyConverter), $float); 138 | } 139 | } 140 | 141 | function nearby($radius = 10, $limit = null) 142 | { 143 | 144 | if (!is_numeric($this->latitude) || !is_numeric($this->longitude)) { 145 | trigger_error('geoPlugin class Warning: Incorrect latitude or longitude values.', E_USER_NOTICE); 146 | return array(array()); 147 | } 148 | 149 | $host = "http://www.geoplugin.net/extras/nearby.gp?lat=" . $this->latitude . "&long=" . $this->longitude . "&radius={$radius}"; 150 | 151 | if (is_numeric($limit)) 152 | $host .= "&limit={$limit}"; 153 | 154 | return unserialize($this->fetch($host)); 155 | 156 | } 157 | 158 | 159 | } 160 | 161 | ?> -------------------------------------------------------------------------------- /include/header.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <?php echo $page_title; ?> 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 19 |
20 | 21 |
22 |
23 |
Version: 1.5.1 | Website: bruteforce.gr/kippo-graph 24 |
25 |
26 |
27 |
28 | 29 |
30 |
31 | 40 |
41 |
42 |
43 | -------------------------------------------------------------------------------- /include/index.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/include/index.php -------------------------------------------------------------------------------- /include/kippo-ip.ajax.php: -------------------------------------------------------------------------------- 1 | clean_input($_POST['ip']); 8 | 9 | if (!filter_var($ip, FILTER_VALIDATE_IP)) { 10 | echo "Error parsing IP address."; 11 | exit(); 12 | } 13 | 14 | R::setup('mysql:host=' . DB_HOST . ';port=' . DB_PORT . ';dbname=' . DB_NAME, DB_USER, DB_PASS); 15 | 16 | $db_query = "SELECT timestamp, ip, session, username, password, success 17 | FROM sessions, auth 18 | WHERE sessions.id = auth.session AND sessions.ip='$ip' 19 | ORDER BY auth.timestamp ASC"; 20 | 21 | $rows = R::getAll($db_query); 22 | 23 | if (count($rows)) { 24 | //We create a skeleton for the table 25 | echo ''; 26 | echo ''; 27 | echo ''; 28 | echo ''; 29 | echo ''; 30 | echo ''; 31 | echo ''; 32 | echo ''; 33 | echo ''; 34 | echo ''; 35 | echo ''; 36 | echo ''; 37 | 38 | //For every row returned from the database we add a new point to the dataset, 39 | //and create a new table row with the data as columns 40 | foreach ($rows as $row) { 41 | echo ''; 42 | echo ''; 43 | echo ''; 44 | echo ''; 45 | echo ''; 46 | echo ''; 47 | echo ''; 48 | echo ''; 49 | } 50 | 51 | //Close tbody and table element, it's ready. 52 | echo '
Total connection attempts from ' . $ip . ': ' . count($rows) . '
TimestampIPSessionUsernamePasswordSuccess
' . $row['timestamp'] . '' . $row['ip'] . '' . $row['session'] . '' . $xss_clean->clean_input($row['username']) . '' . $xss_clean->clean_input($row['password']) . '' . $row['success'] . '
'; 53 | 54 | 55 | echo '
'; 56 | echo '
'; 57 | echo ' '; 58 | echo ' '; 59 | echo ' '; 60 | echo ' '; 61 | echo ' '; 62 | echo ' '; 68 | echo '
'; 69 | echo '
'; 70 | 71 | echo '

'; 72 | } else { 73 | echo '

No attempt records were found

'; 74 | } 75 | 76 | $db_query = "SELECT * FROM 77 | (SELECT DISTINCT sessions.id FROM SESSIONS WHERE sessions.ip='$ip') A 78 | JOIN (SELECT * FROM INPUT) B on A.id=B.session ORDER BY TIMESTAMP"; 79 | 80 | $rows = R::getAll($db_query); 81 | 82 | if (count($rows)) { 83 | //We create a skeleton for the table 84 | echo ''; 85 | echo ''; 86 | echo ''; 87 | echo ''; 88 | echo ''; 89 | echo ''; 90 | echo ''; 91 | echo ''; 92 | echo ''; 93 | echo ''; 94 | 95 | //For every row returned from the database we add a new point to the dataset, 96 | //and create a new table row with the data as columns 97 | foreach ($rows as $row) { 98 | echo ''; 99 | echo ''; 100 | echo ''; 101 | echo ''; 102 | echo ''; 103 | echo ''; 104 | } 105 | //Close tbody and table element, it's ready. 106 | echo '
Total input activity from ' . $ip . ': ' . count($rows) . '
TimestampSessionSuccessInput
' . $row['timestamp'] . '' . $row['session'] . '' . $row['success'] . '' . $xss_clean->clean_input($row['input']) . '
'; 107 | 108 | echo '
'; 109 | echo '
'; 110 | echo ' '; 111 | echo ' '; 112 | echo ' '; 113 | echo ' '; 114 | echo ' '; 115 | echo ' '; 121 | echo '
'; 122 | echo '
'; 123 | 124 | echo '

'; 125 | } else { 126 | echo '

No activity records were found

'; 127 | } 128 | 129 | R::close(); 130 | 131 | ?> -------------------------------------------------------------------------------- /include/languages/lang.ar.php: -------------------------------------------------------------------------------- 1 | أحدث نسخة!'); 7 | define('NEW_VERSION_AVAILABLE', ' - هناك نسخة أحدث متاحة للتحميل!'); 8 | 9 | //KIPPO-GRAPH-GENERATOR.PHP STRINGS 10 | define('TOP_10_PASSWORDS', 'أكثر 10 كلمات مرور تم تجربتها'); 11 | define('TOP_10_USERNAMES', 'أكثر 10 أسماء مستخدمين تم تجربتها'); 12 | define('TOP_10_COMBINATIONS', 'أكثر 10 تركيبات إسم مستخدم:باسوورد تم تجربتها'); 13 | define('TOP_10_SUCCESSFUL_COMBINATIONS', 'Top 10 successful username-password combinations'); 14 | define('AUTH_FAIL', 'فشل'); 15 | define('AUTH_SUCCESS', 'ناجح'); 16 | define('OVERALL_SUCCESS_RATIO', 'إجمالي نسبة النجاح'); 17 | define('MOST_SUCCESSFUL_LOGINS_PER_DAY', 'أكثر عدد مرات دخول ناجحة (أكثر 20)'); 18 | define('SUCCESSES_PER_DAY', 'محاولات ناجحة في اليوم'); 19 | define('SUCCESSES_PER_WEEK', 'محاولات ناجحة في الإسبوع'); 20 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP', 'عدد مرات الإتصال الخاصة بآي بي واحد (أكثر 10)'); 21 | define('SUCCESSFUL_LOGINS_FROM_SAME_IP', 'عدد مرات الدخول الناجحة من آي بي واحد (أكثر 20)'); 22 | define('MOST_PROBES_PER_DAY', 'عدد مرات الإتصال في اليوم الواحد (أكثر 20)'); 23 | define('PROBES_PER_DAY', 'عدد مرات الإتصال اليومي'); 24 | define('PROBES_PER_WEEK', 'عدد مرات الإتصال الإسبوعي'); 25 | define('TOP_10_SSH_CLIENTS', ' أكثر 10 نسخ برامج إتصال SSH مستخدمة'); 26 | 27 | //KIPPO-GRAPH.PHP STRINGS 28 | //TODO 29 | 30 | //KIPPO-INPUT.PHP STRINGS 31 | //MORE TODO 32 | define('HUMAN_ACTIVITY_BUSIEST_DAYS', 'أكثر الأيام نشاطاً بسبب النشاطات البشرية (أكثر 20)'); 33 | define('HUMAN_ACTIVITY_PER_DAY', 'النشاط البشري اليومي'); 34 | define('HUMAN_ACTIVITY_PER_WEEK', 'النشاط البشري الإسبوعي'); 35 | define('TOP_10_INPUT_OVERALL', 'أكثر 10 أوامر مدخلة (عموماً)'); 36 | define('TOP_10_SUCCESSFUL_INPUT', 'أكثر 10 أوامر ناجحة'); 37 | define('TOP_10_FAILED_INPUT', 'أكثر 10 أوامر فاشلة'); 38 | 39 | //KIPPO-GEO.PHP STRINGS 40 | //MORE TODO 41 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP_CC', 'عدد مرات الإتصال من آي بي واحد (أكثر 10) + رموز الدول'); 42 | define('NUMBER_OF_CONNECTIONS_PER_COUNTRY', 'عدد مرات الإتصال من الدولة'); 43 | ?> -------------------------------------------------------------------------------- /include/languages/lang.cs.php: -------------------------------------------------------------------------------- 1 | nejnovější verzi!'); 7 | define('NEW_VERSION_AVAILABLE', ' - Je dostupná nová verze ke stažení!'); 8 | 9 | //KIPPO-GRAPH-GENERATOR.PHP STRINGS 10 | define('TOP_10_PASSWORDS', 'Top 10 zkoušených hesel'); 11 | define('TOP_10_USERNAMES', 'Top 10 zkoušených uživatelů'); 12 | define('TOP_10_COMBINATIONS', 'Top 10 kombinací uživatel-heslo'); 13 | define('TOP_10_SUCCESSFUL_COMBINATIONS', 'Top 10 successful username-password combinations'); 14 | define('AUTH_FAIL', 'Neúspěšné'); 15 | define('AUTH_SUCCESS', 'Úspěšné'); 16 | define('OVERALL_SUCCESS_RATIO', 'Celkový poměr úspěšnosti'); 17 | define('MOST_SUCCESSFUL_LOGINS_PER_DAY', 'Nejvíce úspěšných přihlášení za den (Top 20)'); 18 | define('SUCCESSES_PER_DAY', 'Úspěchy za den'); 19 | define('SUCCESSES_PER_WEEK', 'Úspěchy za týden'); 20 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP', 'Počet připojení podle unikátní IP (Top 10)'); 21 | define('SUCCESSFUL_LOGINS_FROM_SAME_IP', 'Úspěšné přihlášení od stejné IP (Top 20)'); 22 | define('MOST_PROBES_PER_DAY', 'Nejvíce sond za den (Top 20)'); 23 | define('PROBES_PER_DAY', 'Sond za den'); 24 | define('PROBES_PER_WEEK', 'Sond za týden'); 25 | define('TOP_10_SSH_CLIENTS', 'Top 10 SSH klientů'); 26 | 27 | //KIPPO-GRAPH.PHP STRINGS 28 | //TODO 29 | 30 | //KIPPO-INPUT.PHP STRINGS 31 | //MORE TODO 32 | define('HUMAN_ACTIVITY_BUSIEST_DAYS', 'Lidská činnost - nejrušnější den (Top 20)'); 33 | define('HUMAN_ACTIVITY_PER_DAY', 'Lidská činnost za den'); 34 | define('HUMAN_ACTIVITY_PER_WEEK', 'Lidská činnost za týden'); 35 | define('TOP_10_INPUT_OVERALL', 'Top 10 vstupů (celkově)'); 36 | define('TOP_10_SUCCESSFUL_INPUT', 'Top 10 úspěšných vstupů'); 37 | define('TOP_10_FAILED_INPUT', 'Top 10 neúspěšných vstupů'); 38 | 39 | //KIPPO-GEO.PHP STRINGS 40 | //MORE TODO 41 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP_CC', 'Počet připojení podle unikátní IP (Top 10) + Kódy zemí'); 42 | define('NUMBER_OF_CONNECTIONS_PER_COUNTRY', 'Počet připojení podle země'); 43 | ?> 44 | -------------------------------------------------------------------------------- /include/languages/lang.de.php: -------------------------------------------------------------------------------- 1 | neuste Version!'); 7 | define('NEW_VERSION_AVAILABLE', ' - Es steht eine neue Version zum Download bereit!'); 8 | 9 | //KIPPO-GRAPH-GENERATOR.PHP STRINGS 10 | define('TOP_10_PASSWORDS', 'Top 10 benutzte Passwörter'); 11 | define('TOP_10_USERNAMES', 'Top 10 benutzte Benutzernamen'); 12 | define('TOP_10_COMBINATIONS', 'Top 10 Benutzername - Passwort Kombinationen'); 13 | define('TOP_10_SUCCESSFUL_COMBINATIONS', 'Top 10 successful username-password combinations'); 14 | define('AUTH_FAIL', 'Fehlschlag'); 15 | define('AUTH_SUCCESS', 'Erfolg'); 16 | define('OVERALL_SUCCESS_RATIO', 'Insgesammte Erfolgsquote'); 17 | define('MOST_SUCCESSFUL_LOGINS_PER_DAY', 'Die meisten erfolgreichen Logins pro Tag (Top 20)'); 18 | define('SUCCESSES_PER_DAY', 'Erfolge pro Tag'); 19 | define('SUCCESSES_PER_WEEK', 'Erfolge pro Woche'); 20 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP', 'Anzahl der Verbindugnen pro eindeutige IP(Top 10)'); 21 | define('SUCCESSFUL_LOGINS_FROM_SAME_IP', 'Erfolgreiche Anmeldungen von derselben IP (Top 20)'); 22 | define('MOST_PROBES_PER_DAY', 'Die meisten Versuche pro Tag (Top 20)'); 23 | define('PROBES_PER_DAY', 'Versuche pro Tag'); 24 | define('PROBES_PER_WEEK', 'Versuche pro Woche'); 25 | define('TOP_10_SSH_CLIENTS', 'Top 10 SSH Clienten'); 26 | 27 | //KIPPO-GRAPH.PHP STRINGS 28 | //TODO 29 | 30 | //KIPPO-INPUT.PHP STRINGS 31 | //MORE TODO 32 | define('HUMAN_ACTIVITY_BUSIEST_DAYS', 'Menschliche Aktivität an dem belebtesten Tagen (Top 20)'); 33 | define('HUMAN_ACTIVITY_PER_DAY', 'Menschliche Aktivität pro Tag'); 34 | define('HUMAN_ACTIVITY_PER_WEEK', 'Menschliche Aktivität pro Woche'); 35 | define('TOP_10_INPUT_OVERALL', 'Top 10 Eingaben (insgesamt)'); 36 | define('TOP_10_SUCCESSFUL_INPUT', 'Top 10 erfolgreicher Eingaben'); 37 | define('TOP_10_FAILED_INPUT', 'Top 10 fehlgeschlagener Eingaben'); 38 | 39 | //KIPPO-GEO.PHP STRINGS 40 | //MORE TODO 41 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP_CC', 'Anzahl der Verbindungnen pro eindeutige IP(Top 10) + Ländercodes'); 42 | define('NUMBER_OF_CONNECTIONS_PER_COUNTRY', 'Anzahl der Verbindungen pro Land'); 43 | ?> -------------------------------------------------------------------------------- /include/languages/lang.el.php: -------------------------------------------------------------------------------- 1 | τελευταία έκδοση!'); 7 | define('NEW_VERSION_AVAILABLE', ' - Υπάρχει μια νέα έκδοση διαθέσιμη για λήψη!'); 8 | 9 | //KIPPO-GRAPH-GENERATOR.PHP STRINGS 10 | define('TOP_10_PASSWORDS', '10 κορυφαίοι κωδικοί που επιχειρήθηκαν'); 11 | define('TOP_10_USERNAMES', '10 κορυφαία ονόματα χρήστη που επιχειρήθηκαν'); 12 | define('TOP_10_COMBINATIONS', '10 κορυφαίοι συνδυασμοί ονομάτος χρήστη-κωδικού που επιχειρήθηκαν'); 13 | define('TOP_10_SUCCESSFUL_COMBINATIONS', 'Top 10 successful username-password combinations'); 14 | define('AUTH_FAIL', 'Αποτυχία'); 15 | define('AUTH_SUCCESS', 'Επιτυχία'); 16 | define('OVERALL_SUCCESS_RATIO', 'Συνολικό ποσοστό επιτυχίας'); 17 | define('MOST_SUCCESSFUL_LOGINS_PER_DAY', 'Περισσότερες επιτυχίες ανά ημέρα (κορυφαίες 20)'); 18 | define('SUCCESSES_PER_DAY', 'Επιτυχίες ανά ημέρα'); 19 | define('SUCCESSES_PER_WEEK', 'Επιτυχίες ανά εβδομάδα'); 20 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP', 'Αριθμός συνδέσεων ανά μοναδική IP (κορυφαίες 10)'); 21 | define('SUCCESSFUL_LOGINS_FROM_SAME_IP', 'Επιτυχείς είσοδοι από την ίδια IP (κορυφαίες 20)'); 22 | define('MOST_PROBES_PER_DAY', 'Περισσότερες προσπάθειες σύνδεσης ανά ημέρα (κορυφαίες 20)'); 23 | define('PROBES_PER_DAY', 'Προσπάθειες σύνδεσης ανά ημέρα'); 24 | define('PROBES_PER_WEEK', 'Προσπάθειες σύνδεσης ανά εβδομάδα'); 25 | define('TOP_10_SSH_CLIENTS', '10 κορυφαίοι πελάτες SSH'); 26 | 27 | //KIPPO-GRAPH.PHP STRINGS 28 | //TODO 29 | 30 | //KIPPO-INPUT.PHP STRINGS 31 | //MORE TODO 32 | define('HUMAN_ACTIVITY_BUSIEST_DAYS', 'Ημέρες αυξημένης ανθρώπινης δραστηριότητας (κορυφαίες 20)'); 33 | define('HUMAN_ACTIVITY_PER_DAY', 'Ανθρώπινη δραστηριότητα ανά ημέρα'); 34 | define('HUMAN_ACTIVITY_PER_WEEK', 'Ανθρώπινη δραστηριότητα ανά εβδομάδα'); 35 | define('TOP_10_INPUT_OVERALL', '10 κορυφαίες ενέργειες (συνολικά)'); 36 | define('TOP_10_SUCCESSFUL_INPUT', '10 κορυφαίες επιτυχείς ενέργειες'); 37 | define('TOP_10_FAILED_INPUT', '10 κορυφαίες αποτυχημένες ενέργειες'); 38 | 39 | //KIPPO-GEO.PHP STRINGS 40 | //MORE TODO 41 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP_CC', 'Αριθμός συνδέσεων ανά μοναδική IP (κορυφαίες 10) + Κωδικοί Χωρών'); 42 | define('NUMBER_OF_CONNECTIONS_PER_COUNTRY', 'Αριθμός συνδέσεων ανά χώρα'); 43 | ?> -------------------------------------------------------------------------------- /include/languages/lang.en.php: -------------------------------------------------------------------------------- 1 | latest version!'); 7 | define('NEW_VERSION_AVAILABLE', ' - There is a new version available for download!'); 8 | 9 | //KIPPO-GRAPH-GENERATOR.PHP STRINGS 10 | define('TOP_10_PASSWORDS', 'Top 10 passwords attempted'); 11 | define('TOP_10_USERNAMES', 'Top 10 usernames attempted'); 12 | define('TOP_10_COMBINATIONS', 'Top 10 username-password combinations'); 13 | define('TOP_10_SUCCESSFUL_COMBINATIONS', 'Top 10 successful username-password combinations'); 14 | define('AUTH_FAIL', 'Failure'); 15 | define('AUTH_SUCCESS', 'Success'); 16 | define('OVERALL_SUCCESS_RATIO', 'Overall success ratio'); 17 | define('MOST_SUCCESSFUL_LOGINS_PER_DAY', 'Most successful logins per day (Top 20)'); 18 | define('SUCCESSES_PER_DAY', 'Successes per day'); 19 | define('SUCCESSES_PER_WEEK', 'Successes per week'); 20 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP', 'Number of connections per unique IP (Top 10)'); 21 | define('SUCCESSFUL_LOGINS_FROM_SAME_IP', 'Successful logins from same IP (Top 20)'); 22 | define('MOST_PROBES_PER_DAY', 'Most probes per day (Top 20)'); 23 | define('PROBES_PER_DAY', 'Probes per day'); 24 | define('PROBES_PER_WEEK', 'Probes per week'); 25 | define('TOP_10_SSH_CLIENTS', 'Top 10 SSH clients'); 26 | 27 | //KIPPO-GRAPH.PHP STRINGS 28 | //TODO 29 | 30 | //KIPPO-INPUT.PHP STRINGS 31 | //MORE TODO 32 | define('HUMAN_ACTIVITY_BUSIEST_DAYS', 'Human activity busiest days (Top 20)'); 33 | define('HUMAN_ACTIVITY_PER_DAY', 'Human activity per day'); 34 | define('HUMAN_ACTIVITY_PER_WEEK', 'Human activity per week'); 35 | define('TOP_10_INPUT_OVERALL', 'Top 10 input (overall)'); 36 | define('TOP_10_SUCCESSFUL_INPUT', 'Top 10 successful input'); 37 | define('TOP_10_FAILED_INPUT', 'Top 10 failed input'); 38 | 39 | //KIPPO-GEO.PHP STRINGS 40 | //MORE TODO 41 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP_CC', 'Number of connections per unique IP (Top 10) + Country Codes'); 42 | define('NUMBER_OF_CONNECTIONS_PER_COUNTRY', 'Number of connections per country'); 43 | ?> -------------------------------------------------------------------------------- /include/languages/lang.es.php: -------------------------------------------------------------------------------- 1 | última versión!'); 7 | define('NEW_VERSION_AVAILABLE', ' - Hay una nueva versión disponible en el siguiente link descargar!'); 8 | 9 | //KIPPO-GRAPH-GENERATOR.PHP STRINGS 10 | define('TOP_10_PASSWORDS', 'Principales contraseñas probadas'); 11 | define('TOP_10_USERNAMES', 'Principales usuarios probados'); 12 | define('TOP_10_COMBINATIONS', 'Principales combinaciones de usuario y contraseña'); 13 | define('TOP_10_SUCCESSFUL_COMBINATIONS', 'Top 10 successful username-password combinations'); 14 | define('AUTH_FAIL', 'Incorrecto'); 15 | define('AUTH_SUCCESS', 'Correcto'); 16 | define('OVERALL_SUCCESS_RATIO', 'Proporción de intentos de autenticación correctos'); 17 | define('MOST_SUCCESSFUL_LOGINS_PER_DAY', 'Proporción de intentos de autenticación correctos por día(Top 20)'); 18 | define('SUCCESSES_PER_DAY', 'Intentos de autenticación correctos por día'); 19 | define('SUCCESSES_PER_WEEK', 'Intentos de autenticación correctos por semana'); 20 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP', 'Número de conexiones realizadas por IP (Top 10)'); 21 | define('SUCCESSFUL_LOGINS_FROM_SAME_IP', 'Intentos de autenticación correctos por IP (Top 20)'); 22 | define('MOST_PROBES_PER_DAY', 'Principales intentos de acceso por día(Top 20)'); 23 | define('PROBES_PER_DAY', 'Intentos de acceso por día'); 24 | define('PROBES_PER_WEEK', 'Intentos de acceso por semana'); 25 | define('TOP_10_SSH_CLIENTS', 'Clientes de SSH más utilizados'); 26 | 27 | //KIPPO-GRAPH.PHP STRINGS 28 | //TODO 29 | 30 | //KIPPO-INPUT.PHP STRINGS 31 | //MORE TODO 32 | define('HUMAN_ACTIVITY_BUSIEST_DAYS', 'Principal actividad de usuarios por día(Top 20)'); 33 | define('HUMAN_ACTIVITY_PER_DAY', 'Actividad de usuarios por día'); 34 | define('HUMAN_ACTIVITY_PER_WEEK', 'Actividad de usuarios por semana'); 35 | define('TOP_10_INPUT_OVERALL', 'Principales instrucciones utilizadas'); 36 | define('TOP_10_SUCCESSFUL_INPUT', 'Principales instrucciones con resultado exitoso'); 37 | define('TOP_10_FAILED_INPUT', 'Principales instrucciones con resultado fallido'); 38 | 39 | //KIPPO-GEO.PHP STRINGS 40 | //MORE TODO 41 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP_CC', 'Número de conexiones realizadas por IP (Top 10) + Código del País'); 42 | define('NUMBER_OF_CONNECTIONS_PER_COUNTRY', 'Número de conexiones por país'); 43 | ?> -------------------------------------------------------------------------------- /include/languages/lang.et.php: -------------------------------------------------------------------------------- 1 | uuemat versiooni!'); 7 | define('NEW_VERSION_AVAILABLE', ' - Saadaval on uus versioon download!'); 8 | 9 | //KIPPO-GRAPH-GENERATOR.PHP STRINGS 10 | define('TOP_10_PASSWORDS', 'Top 10 salasõna katsetust'); 11 | define('TOP_10_USERNAMES', 'Top 10 kasutajanime katsetust'); 12 | define('TOP_10_COMBINATIONS', 'Top 10 kasutajanime-salasõna kombinatsiooni'); 13 | define('TOP_10_SUCCESSFUL_COMBINATIONS', 'Top 10 successful username-password combinations'); 14 | define('AUTH_FAIL', 'Ebaõnnestumine'); 15 | define('AUTH_SUCCESS', 'Õnnestumine'); 16 | define('OVERALL_SUCCESS_RATIO', 'Üldise õnnestumise suhtarv'); 17 | define('MOST_SUCCESSFUL_LOGINS_PER_DAY', 'Kõige edukamad sisselogimised päevas (Top 20)'); 18 | define('SUCCESSES_PER_DAY', 'Õnnestumised päevas'); 19 | define('SUCCESSES_PER_WEEK', 'Õnnestumised nädalas'); 20 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP', 'Ühenduste arv unikaalselt IP aadressilt (Top 10)'); 21 | define('SUCCESSFUL_LOGINS_FROM_SAME_IP', 'Edukad sisselogimised samalt IP aadressilt (Top 20)'); 22 | define('MOST_PROBES_PER_DAY', 'Enamik proovimisi päevas (Top 20)'); 23 | define('PROBES_PER_DAY', 'Proovimised päevas'); 24 | define('PROBES_PER_WEEK', 'Proovimised nädalas'); 25 | define('TOP_10_SSH_CLIENTS', 'Top 10 SSH klienti'); 26 | 27 | //KIPPO-GRAPH.PHP STRINGS 28 | //TODO 29 | 30 | //KIPPO-INPUT.PHP STRINGS 31 | //MORE TODO 32 | define('HUMAN_ACTIVITY_BUSIEST_DAYS', 'Inimtegevuse aktiivsus päeviti (Top 20)'); 33 | define('HUMAN_ACTIVITY_PER_DAY', 'Inimtegevuse aktiivsus päevas'); 34 | define('HUMAN_ACTIVITY_PER_WEEK', 'Inimtegevuse aktiivsus nädalas'); 35 | define('TOP_10_INPUT_OVERALL', 'Top 10 sisestust (üldine)'); 36 | define('TOP_10_SUCCESSFUL_INPUT', 'Top 10 õnnestunud sisestust'); 37 | define('TOP_10_FAILED_INPUT', 'Top 10 ebaõnnestunud sisestust'); 38 | 39 | //KIPPO-GEO.PHP STRINGS 40 | //MORE TODO 41 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP_CC', 'Ühenduste arv unikaalselt IP aadressilt (Top 10) + Riigikood'); 42 | define('NUMBER_OF_CONNECTIONS_PER_COUNTRY', 'Ühenduste arv riigiti'); 43 | ?> 44 | -------------------------------------------------------------------------------- /include/languages/lang.fr.php: -------------------------------------------------------------------------------- 1 | dernière version !'); 7 | define('NEW_VERSION_AVAILABLE', ' - Il y a une nouvelle version disponible au téléchargement !'); 8 | 9 | //KIPPO-GRAPH-GENERATOR.PHP STRINGS 10 | define('TOP_10_PASSWORDS', 'Top 10 des mots de passe'); 11 | define('TOP_10_USERNAMES', 'Top 10 des noms d\'utilisateur'); 12 | define('TOP_10_COMBINATIONS', 'Top 10 des combinaisons noms d\'utilisateur / mots de passe'); 13 | define('TOP_10_SUCCESSFUL_COMBINATIONS', 'Top 10 successful username-password combinations'); 14 | define('AUTH_FAIL', 'Echecs'); 15 | define('AUTH_SUCCESS', 'Succès'); 16 | define('OVERALL_SUCCESS_RATIO', 'Proportion de réussite globale'); 17 | define('MOST_SUCCESSFUL_LOGINS_PER_DAY', 'Nombre d\'identifications réussies par jour (Top 20)'); 18 | define('SUCCESSES_PER_DAY', 'Nombre de réussites par jour'); 19 | define('SUCCESSES_PER_WEEK', 'Nombre de réussites par semaine'); 20 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP', 'Nombre de connexions par adresse IP unique (Top 10)'); 21 | define('SUCCESSFUL_LOGINS_FROM_SAME_IP', 'Nombre d\'identifications réussies depuis la même adresse IP (Top 20)'); 22 | define('MOST_PROBES_PER_DAY', 'Nombre de sondes par jour (Top 20)'); 23 | define('PROBES_PER_DAY', 'Nombre de sondes par jour'); 24 | define('PROBES_PER_WEEK', 'Nombre de sondes par semaine'); 25 | define('TOP_10_SSH_CLIENTS', 'Top 10 des clients SSH'); 26 | 27 | //KIPPO-GRAPH.PHP STRINGS 28 | //TODO 29 | 30 | //KIPPO-INPUT.PHP STRINGS 31 | //MORE TODO 32 | define('HUMAN_ACTIVITY_BUSIEST_DAYS', 'Activité humaine par jour (Top 20)'); 33 | define('HUMAN_ACTIVITY_PER_DAY', 'Activité humaine par jour'); 34 | define('HUMAN_ACTIVITY_PER_WEEK', 'Activité humaine par semaine'); 35 | define('TOP_10_INPUT_OVERALL', 'Top 10 des saisies clavier (global)'); 36 | define('TOP_10_SUCCESSFUL_INPUT', 'Top 10 des saisies clavier réussies'); 37 | define('TOP_10_FAILED_INPUT', 'Top 10 des saisies clavier échouées'); 38 | 39 | //KIPPO-GEO.PHP STRINGS 40 | //MORE TODO 41 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP_CC', 'Nombre de connexions par adresse IP unique (Top 10) + Codes des pays'); 42 | define('NUMBER_OF_CONNECTIONS_PER_COUNTRY', 'Nombre de connexions par pays'); 43 | ?> 44 | -------------------------------------------------------------------------------- /include/languages/lang.it.php: -------------------------------------------------------------------------------- 1 | l\'ultima versione!'); 7 | define('NEW_VERSION_AVAILABLE', ' - E\' disponibile una nuova versione da scaricare!'); 8 | 9 | //KIPPO-GRAPH-GENERATOR.PHP STRINGS 10 | define('TOP_10_PASSWORDS', 'Top 10 password tentate'); 11 | define('TOP_10_USERNAMES', 'Top 10 username tentati'); 12 | define('TOP_10_COMBINATIONS', 'Top 10 combinazioni username-password tentate'); 13 | define('TOP_10_SUCCESSFUL_COMBINATIONS', 'Top 10 successful username-password combinations'); 14 | define('AUTH_FAIL', 'Fallimento'); 15 | define('AUTH_SUCCESS', 'Successo'); 16 | define('OVERALL_SUCCESS_RATIO', 'Tasso globale di successo'); 17 | define('MOST_SUCCESSFUL_LOGINS_PER_DAY', 'Maggiori accessi riusciti per giorno (Top 20)'); 18 | define('SUCCESSES_PER_DAY', 'Successi per giorno'); 19 | define('SUCCESSES_PER_WEEK', 'Successi per settimana'); 20 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP', 'Numero di connessioni per IP univoco (Top 10)'); 21 | define('SUCCESSFUL_LOGINS_FROM_SAME_IP', 'Accessi riusciti dallo stesso IP (Top 20)'); 22 | define('MOST_PROBES_PER_DAY', 'Maggiori contatti per giorno (Top 20)'); 23 | define('PROBES_PER_DAY', 'Contatti per giorno'); 24 | define('PROBES_PER_WEEK', 'Contatti per settimana'); 25 | define('TOP_10_SSH_CLIENTS', 'Top 10 SSH clients'); 26 | 27 | //KIPPO-GRAPH.PHP STRINGS 28 | //TODO 29 | 30 | //KIPPO-INPUT.PHP STRINGS 31 | //MORE TODO 32 | define('HUMAN_ACTIVITY_BUSIEST_DAYS', 'Giorni con più attività umana (Top 20)'); 33 | define('HUMAN_ACTIVITY_PER_DAY', 'Attività umana per giorno'); 34 | define('HUMAN_ACTIVITY_PER_WEEK', 'Attività umana per settimana'); 35 | define('TOP_10_INPUT_OVERALL', 'Top 10 input (globali)'); 36 | define('TOP_10_SUCCESSFUL_INPUT', 'Top 10 input di successo'); 37 | define('TOP_10_FAILED_INPUT', 'Top 10 input falliti'); 38 | 39 | //KIPPO-GEO.PHP STRINGS 40 | //MORE TODO 41 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP_CC', 'Numero di connessioni per IP univoco (Top 10) + Codici Nazione'); 42 | define('NUMBER_OF_CONNECTIONS_PER_COUNTRY', 'Numero di connessioni per nazione'); 43 | ?> 44 | -------------------------------------------------------------------------------- /include/languages/lang.nl.php: -------------------------------------------------------------------------------- 1 | laatste versie!'); 7 | define('NEW_VERSION_AVAILABLE', ' - Er is een nieuwere versie beschikbaar voor download!'); 8 | 9 | //KIPPO-GRAPH-GENERATOR.PHP STRINGS 10 | define('TOP_10_PASSWORDS', 'Top 10 wachtwoorden'); 11 | define('TOP_10_USERNAMES', 'Top 10 gebruikersnamen'); 12 | define('TOP_10_COMBINATIONS', 'Top 10 gebruikersnaam-wachtwoord combinaties'); 13 | define('TOP_10_SUCCESSFUL_COMBINATIONS', 'Top 10 successful username-password combinations'); 14 | define('AUTH_FAIL', 'Onsuccesvol'); 15 | define('AUTH_SUCCESS', 'Succesvol'); 16 | define('OVERALL_SUCCESS_RATIO', 'Gemiddelde succesratio'); 17 | define('MOST_SUCCESSFUL_LOGINS_PER_DAY', 'Meest succesvolle aanmeldpogingen per dag (Top 20)'); 18 | define('SUCCESSES_PER_DAY', 'Succesvolle aanmeldpogingen per dag'); 19 | define('SUCCESSES_PER_WEEK', 'Succesvolle aanmeldpogingen per week'); 20 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP', 'Aantal connecties per uniek IP (Top 10)'); 21 | define('SUCCESSFUL_LOGINS_FROM_SAME_IP', 'Successvolle aanmeldpogingen van hetzelfde IP (Top 20)'); 22 | define('MOST_PROBES_PER_DAY', 'Meeste probes per dag (Top 20)'); 23 | define('PROBES_PER_DAY', 'Probes per dag'); 24 | define('PROBES_PER_WEEK', 'Probes per week'); 25 | define('TOP_10_SSH_CLIENTS', 'Top 10 SSH clients'); 26 | 27 | //KIPPO-GRAPH.PHP STRINGS 28 | //TODO 29 | 30 | //KIPPO-INPUT.PHP STRINGS 31 | //MORE TODO 32 | define('HUMAN_ACTIVITY_BUSIEST_DAYS', 'Meeste menselijke activiteit per dag (Top 20)'); 33 | define('HUMAN_ACTIVITY_PER_DAY', 'Menselijke activiteit per dag'); 34 | define('HUMAN_ACTIVITY_PER_WEEK', 'Menselijke activiteit per week'); 35 | define('TOP_10_INPUT_OVERALL', 'Top 10 input (gemiddeld)'); 36 | define('TOP_10_SUCCESSFUL_INPUT', 'Top 10 successvolle input'); 37 | define('TOP_10_FAILED_INPUT', 'Top 10 mislukte input'); 38 | 39 | //KIPPO-GEO.PHP STRINGS 40 | //MORE TODO 41 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP_CC', 'Aantal connecties per uniek IP (Top 10) + landcodes'); 42 | define('NUMBER_OF_CONNECTIONS_PER_COUNTRY', 'Aantal connecties per land'); 43 | ?> 44 | -------------------------------------------------------------------------------- /include/languages/lang.pl.php: -------------------------------------------------------------------------------- 1 | latest wersji!'); 7 | define('NEW_VERSION_AVAILABLE', ' - Nowa new wersja dostępna: do świągnięcia!'); 8 | 9 | //KIPPO-GRAPH-GENERATOR.PHP STRINGS 10 | define('TOP_10_PASSWORDS', 'Top 10 użytych haseł'); 11 | define('TOP_10_USERNAMES', 'Top 10 użytych nazw użytkownika'); 12 | define('TOP_10_COMBINATIONS', 'Top 10 kombinacji uzytkownik-hasło'); 13 | define('TOP_10_SUCCESSFUL_COMBINATIONS', 'Top 10 successful username-password combinations'); 14 | define('AUTH_FAIL', 'Nieudane'); 15 | define('AUTH_SUCCESS', 'Udane'); 16 | define('OVERALL_SUCCESS_RATIO', 'Ogólny współczynnik udanych prób'); 17 | define('MOST_SUCCESSFUL_LOGINS_PER_DAY', 'Najbardziej udane logowania na dzień (Top 20)'); 18 | define('SUCCESSES_PER_DAY', 'Udane próby na dzień'); 19 | define('SUCCESSES_PER_WEEK', 'Udane próby na tydzień'); 20 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP', 'Ilość połączeń z jednego adresu IP (Top 10)'); 21 | define('SUCCESSFUL_LOGINS_FROM_SAME_IP', 'Udane logowania z jednego adresu IP (Top 20)'); 22 | define('MOST_PROBES_PER_DAY', 'Najwięcej prób na dzień (Top 20)'); 23 | define('PROBES_PER_DAY', 'Prób na dzień'); 24 | define('PROBES_PER_WEEK', 'Prób na tydzień'); 25 | define('TOP_10_SSH_CLIENTS', 'Top 10 klientów SSH'); 26 | 27 | //KIPPO-GRAPH.PHP STRINGS 28 | //TODO 29 | 30 | //KIPPO-INPUT.PHP STRINGS 31 | //MORE TODO 32 | define('HUMAN_ACTIVITY_BUSIEST_DAYS', 'Ludzka aktywność w najaktywniejsze dni (Top 20)'); 33 | define('HUMAN_ACTIVITY_PER_DAY', 'Ludzka aktywność na dzień'); 34 | define('HUMAN_ACTIVITY_PER_WEEK', 'Ludzka aktywność na tydzień'); 35 | define('TOP_10_INPUT_OVERALL', 'Top 10 komend (ogólnie)'); 36 | define('TOP_10_SUCCESSFUL_INPUT', 'Top 10 udanych komend'); 37 | define('TOP_10_FAILED_INPUT', 'Top 10 nieudanych komend'); 38 | 39 | //KIPPO-GEO.PHP STRINGS 40 | //MORE TODO 41 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP_CC', 'Ilość połączeń z jednego adresu IP (Top 10) + Kod Kraju'); 42 | define('NUMBER_OF_CONNECTIONS_PER_COUNTRY', 'Ilość połączeń z danego kraju'); 43 | ?> -------------------------------------------------------------------------------- /include/languages/lang.sk.php: -------------------------------------------------------------------------------- 1 | najnovšiu verziu!'); 7 | define('NEW_VERSION_AVAILABLE', ' - Je dostupná nová verzia na stiahnutie!'); 8 | 9 | //KIPPO-GRAPH-GENERATOR.PHP STRINGS 10 | define('TOP_10_PASSWORDS', 'Top 10 hesiel'); 11 | define('TOP_10_USERNAMES', 'Top 10 užívateľov'); 12 | define('TOP_10_COMBINATIONS', 'Top 10 kombinácií užívateľ-heslo'); 13 | define('TOP_10_SUCCESSFUL_COMBINATIONS', 'Top 10 successful username-password combinations'); 14 | define('AUTH_FAIL', 'Neúspešné'); 15 | define('AUTH_SUCCESS', 'Úspešné'); 16 | define('OVERALL_SUCCESS_RATIO', 'Pomer úspešnosti'); 17 | define('MOST_SUCCESSFUL_LOGINS_PER_DAY', 'Najviac úspešných prihlásení za deň (Top 20)'); 18 | define('SUCCESSES_PER_DAY', 'Úspešné prihlásenia za den'); 19 | define('SUCCESSES_PER_WEEK', 'Úspešné prihlásenia za týždeň'); 20 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP', 'Počet spojení podľa unikátnej IP adresy (Top 10)'); 21 | define('SUCCESSFUL_LOGINS_FROM_SAME_IP', 'Úspešné prihlásenia z rovnakej IP adresy (Top 20)'); 22 | define('MOST_PROBES_PER_DAY', 'Najviac pokusov za deň (Top 20)'); 23 | define('PROBES_PER_DAY', 'Pokusov za deň'); 24 | define('PROBES_PER_WEEK', 'Pokusov za týždeň'); 25 | define('TOP_10_SSH_CLIENTS', 'Top 10 SSH klientov'); 26 | 27 | //KIPPO-GRAPH.PHP STRINGS 28 | //TODO 29 | 30 | //KIPPO-INPUT.PHP STRINGS 31 | //MORE TODO 32 | define('HUMAN_ACTIVITY_BUSIEST_DAYS', 'Najrušnejšie dni ľudskej aktivity (Top 20)'); 33 | define('HUMAN_ACTIVITY_PER_DAY', 'Ľudská aktivita za deň'); 34 | define('HUMAN_ACTIVITY_PER_WEEK', 'Ľudská aktivita za týždeň'); 35 | define('TOP_10_INPUT_OVERALL', 'Top 10 vstupov (celkovo)'); 36 | define('TOP_10_SUCCESSFUL_INPUT', 'Top 10 úspešných vstupov'); 37 | define('TOP_10_FAILED_INPUT', 'Top 10 neúspešných vstupov'); 38 | 39 | //KIPPO-GEO.PHP STRINGS 40 | //MORE TODO 41 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP_CC', 'Počet spojení podľa unikátnej IP adresy (Top 10) + Kódy krajín'); 42 | define('NUMBER_OF_CONNECTIONS_PER_COUNTRY', 'Počet spojení podľa krajiny'); 43 | ?> 44 | -------------------------------------------------------------------------------- /include/languages/lang.sv.php: -------------------------------------------------------------------------------- 1 | senaste versionen!'); 7 | define('NEW_VERSION_AVAILABLE', ' - Det finns en ny version tillgänglig för nedladdning!'); 8 | 9 | //KIPPO-GRAPH-GENERATOR.PHP STRINGS 10 | define('TOP_10_PASSWORDS', 'Topp 10 försökta lösenord'); 11 | define('TOP_10_USERNAMES', 'Topp 10 försökta användarnamn'); 12 | define('TOP_10_COMBINATIONS', 'Topp 10 kombinationer av användarnamn-lösenord'); 13 | define('TOP_10_SUCCESSFUL_COMBINATIONS', 'Top 10 successful username-password combinations'); 14 | define('AUTH_FAIL', 'Fel'); 15 | define('AUTH_SUCCESS', 'Lyckades'); 16 | define('OVERALL_SUCCESS_RATIO', 'Helhetsförhållande över lyckade försök '); 17 | define('MOST_SUCCESSFUL_LOGINS_PER_DAY', 'Flest lyckade inloggningsförsök per dag (Topp 20)'); 18 | define('SUCCESSES_PER_DAY', 'Lyckade försök per dag'); 19 | define('SUCCESSES_PER_WEEK', 'Lyckade försök per vecka'); 20 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP', 'Antal anslutningar per unikt IP (Topp 10)'); 21 | define('SUCCESSFUL_LOGINS_FROM_SAME_IP', 'Lyckade inloggningsförsök från samma IP (Topp 20)'); 22 | define('MOST_PROBES_PER_DAY', 'Flest avsökningar per dag (Topp 20)'); 23 | define('PROBES_PER_DAY', 'Avsökningar per dag'); 24 | define('PROBES_PER_WEEK', 'Avsökningar per vecka'); 25 | define('TOP_10_SSH_CLIENTS', 'Topp 10 SSH-klienter'); 26 | 27 | //KIPPO-GRAPH.PHP STRINGS 28 | //TODO 29 | 30 | //KIPPO-INPUT.PHP STRINGS 31 | //MORE TODO 32 | define('HUMAN_ACTIVITY_BUSIEST_DAYS', 'Dagar med mest aktivitet (Topp 20)'); 33 | define('HUMAN_ACTIVITY_PER_DAY', 'Aktivitet per dag'); 34 | define('HUMAN_ACTIVITY_PER_WEEK', 'Aktivitet per vecka'); 35 | define('TOP_10_INPUT_OVERALL', 'Topp 10 inmatningar (totalt)'); 36 | define('TOP_10_SUCCESSFUL_INPUT', 'Topp 10 lyckade inmatningar'); 37 | define('TOP_10_FAILED_INPUT', 'Topp 10 fel inmatningar'); 38 | 39 | //KIPPO-GEO.PHP STRINGS 40 | //MORE TODO 41 | define('NUMBER_OF_CONNECTIONS_PER_UNIQUE_IP_CC', 'Antal anslutningar per unikt IP (Topp 10) + Landskoder'); 42 | define('NUMBER_OF_CONNECTIONS_PER_COUNTRY', 'Antal anslutningar per land'); 43 | ?> -------------------------------------------------------------------------------- /include/libchart/COPYING: -------------------------------------------------------------------------------- 1 | Open Source License 2 | --------------------------------------------------------------------------- 3 | Libchart is distributed under the terms of the GNU GPL v3. 4 | This includes everything in the source code distribution 5 | except where otherwise stated. 6 | A copy of the GNU GPL v3 can be found in doc/GNU_GPL_V3. 7 | 8 | Third Party Content 9 | --------------------------------------------------------------------------- 10 | The following third party software is distributed with Libchart and 11 | is provided under other licenses and/or has source available from 12 | other locations. 13 | 14 | Files in the fonts directory are distributed under Dejavu font license. 15 | A copy of the Dejavu font license can be found in doc/DEJAVU_LICENSE. 16 | -------------------------------------------------------------------------------- /include/libchart/ChangeLog: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/include/libchart/ChangeLog -------------------------------------------------------------------------------- /include/libchart/README: -------------------------------------------------------------------------------- 1 | 2 | Libchart - Simple PHP chart drawing library 3 | ============================================= 4 | 5 | Libchart is a free chart creation PHP library, that is easy to use. 6 | 7 | -------------------------------------------------------------------------------- 8 | 9 | 10 | Features 11 | ========== 12 | 13 | * Bar charts (horizontal or vertical). 14 | * Pie charts. 15 | * Line charts. 16 | * Compatibility with PHP 5. 17 | 18 | -------------------------------------------------------------------------------- 19 | 20 | 21 | Dependencies 22 | ============== 23 | 24 | * PHP 5, compiled with: 25 | * GD 2+ 26 | * FreeType 2+ 27 | 28 | -------------------------------------------------------------------------------- 29 | 30 | 31 | Installation 32 | ============== 33 | 34 | In order to use Libchart, unpack the archive in you project directory and 35 | include libchart.php. Please have a look at the demo files for more information. 36 | You need to chmod 777 the "generated" directory in order to generate the demos. 37 | There is also a tutorial available at the project homepage. 38 | 39 | 40 | -------------------------------------------------------------------------------- 41 | 42 | 43 | Contact info 44 | ============== 45 | 46 | WWW: http://naku.dohcrew.com/libchart/ 47 | MAIL: jm.tremeaux at gmail dot com 48 | -------------------------------------------------------------------------------- /include/libchart/classes/libchart.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | require_once 'model/ChartConfig.php'; 21 | require_once 'model/Point.php'; 22 | require_once 'model/DataSet.php'; 23 | require_once 'model/XYDataSet.php'; 24 | require_once 'model/XYSeriesDataSet.php'; 25 | 26 | require_once 'view/primitive/Padding.php'; 27 | require_once 'view/primitive/Rectangle.php'; 28 | require_once 'view/primitive/Primitive.php'; 29 | require_once 'view/text/Text.php'; 30 | require_once 'view/color/Color.php'; 31 | require_once 'view/color/ColorSet.php'; 32 | require_once 'view/color/Palette.php'; 33 | require_once 'view/axis/Bound.php'; 34 | require_once 'view/axis/Axis.php'; 35 | require_once 'view/plot/Plot.php'; 36 | require_once 'view/caption/Caption.php'; 37 | require_once 'view/chart/Chart.php'; 38 | require_once 'view/chart/BarChart.php'; 39 | require_once 'view/chart/VerticalBarChart.php'; 40 | require_once 'view/chart/HorizontalBarChart.php'; 41 | require_once 'view/chart/LineChart.php'; 42 | require_once 'view/chart/PieChart.php'; 43 | ?> -------------------------------------------------------------------------------- /include/libchart/classes/model/ChartConfig.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * Configuration attributes of the chart. 22 | * 23 | * @author Jean-Marc Tr�meaux (jm.tremeaux at gmail.com) 24 | */ 25 | class ChartConfig 26 | { 27 | /** 28 | * Use several colors for a single data set chart (as if it was a multiple data set). 29 | * 30 | * @var Boolean 31 | */ 32 | private $useMultipleColor; 33 | 34 | /** 35 | * Show caption on individual data points. 36 | * 37 | * @var Boolean 38 | */ 39 | private $showPointCaption; 40 | 41 | /** 42 | * Sort data points (only pie charts). 43 | * 44 | * @var Boolean 45 | */ 46 | private $sortDataPoint; 47 | 48 | /** 49 | * Creates a new ChartConfig with default options. 50 | */ 51 | public function ChartConfig() 52 | { 53 | $this->useMultipleColor = false; 54 | $this->showPointCaption = true; 55 | $this->sortDataPoint = true; 56 | } 57 | 58 | /** 59 | * If true the chart will use several colors for a single data set chart 60 | * (as if it was a multiple data set). 61 | * 62 | * @param $useMultipleColor Use several colors : boolean 63 | */ 64 | public function setUseMultipleColor($useMultipleColor) 65 | { 66 | $this->useMultipleColor = $useMultipleColor; 67 | } 68 | 69 | /** 70 | * If true the chart will use several colors for a single data set chart 71 | * (as if it was a multiple data set). 72 | * 73 | * @return $useMultipleColor Use several colors : boolean 74 | */ 75 | public function getUseMultipleColor() 76 | { 77 | return $this->useMultipleColor; 78 | } 79 | 80 | /** 81 | * Set the option to show caption on individual data points. 82 | * 83 | * @param $showPointCaption Show caption on individual data points : boolean 84 | */ 85 | public function setShowPointCaption($showPointCaption) 86 | { 87 | $this->showPointCaption = $showPointCaption; 88 | } 89 | 90 | /** 91 | * Get the option to show caption on individual data points. 92 | * 93 | * @return Show caption on individual data points : boolean 94 | */ 95 | public function getShowPointCaption() 96 | { 97 | return $this->showPointCaption; 98 | } 99 | 100 | /** 101 | * Set the option to sort data points (only pie charts). 102 | * 103 | * @param $sortDataPoint Sort data points : boolean 104 | */ 105 | public function setSortDataPoint($sortDataPoint) 106 | { 107 | $this->sortDataPoint = $sortDataPoint; 108 | } 109 | 110 | /** 111 | * Get the option to sort data points (only pie charts). 112 | * 113 | * @return Sort data points : boolean 114 | */ 115 | public function getSortDataPoint() 116 | { 117 | return $this->sortDataPoint; 118 | } 119 | } 120 | 121 | ?> -------------------------------------------------------------------------------- /include/libchart/classes/model/DataSet.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * Superclass of all data sets. 22 | * 23 | * @author Jean-Marc Tr�meaux (jm.tremeaux at gmail.com) 24 | * Created on 10 may 2007 25 | */ 26 | abstract class DataSet 27 | { 28 | } 29 | 30 | ?> -------------------------------------------------------------------------------- /include/libchart/classes/model/Point.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * Point of coordinates (X,Y). 22 | * The value of X isn't really of interest, but X is used as a label to display on the horizontal axis. 23 | * 24 | * @author Jean-Marc Tr�meaux (jm.tremeaux at gmail.com) 25 | */ 26 | class Point 27 | { 28 | private $x; 29 | private $y; 30 | 31 | /** 32 | * Creates a new sampling point of coordinates (x, y) 33 | * 34 | * @param integer x coordinate (label) 35 | * @param integer y coordinate (value) 36 | */ 37 | public function Point($x, $y) 38 | { 39 | $this->x = $x; 40 | $this->y = $y; 41 | } 42 | 43 | /** 44 | * Gets the x coordinate (label). 45 | * 46 | * @return integer x coordinate (label) 47 | */ 48 | public function getX() 49 | { 50 | return $this->x; 51 | } 52 | 53 | /** 54 | * Gets the y coordinate (value). 55 | * 56 | * @return integer y coordinate (value) 57 | */ 58 | public function getY() 59 | { 60 | return $this->y; 61 | } 62 | } 63 | 64 | ?> -------------------------------------------------------------------------------- /include/libchart/classes/model/XYDataSet.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * Set of data in the form of (x, y) items. 22 | * 23 | * @author Jean-Marc Tr�meaux (jm.tremeaux at gmail.com) 24 | * Created on 10 may 2007 25 | */ 26 | class XYDataSet extends DataSet 27 | { 28 | private $pointList; 29 | 30 | /** 31 | * Constructor of XYDataSet. 32 | * 33 | */ 34 | public function XYDataSet() 35 | { 36 | $this->pointList = array(); 37 | } 38 | 39 | /** 40 | * Add a new point to the dataset. 41 | * 42 | * @param Point Point to add to the dataset 43 | */ 44 | 45 | public function addPoint($point) 46 | { 47 | array_push($this->pointList, $point); 48 | } 49 | 50 | /** 51 | * Getter of pointList. 52 | * 53 | * @return List of points. 54 | */ 55 | public function getPointList() 56 | { 57 | return $this->pointList; 58 | } 59 | } 60 | 61 | ?> -------------------------------------------------------------------------------- /include/libchart/classes/model/XYSeriesDataSet.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * This dataset comprises several series of points and is used to plot multiple lines charts. 22 | * Each serie is a XYDataSet. 23 | * 24 | * @author Jean-Marc Tr�meaux (jm.tremeaux at gmail.com) 25 | * Created on 20 july 2007 26 | */ 27 | class XYSeriesDataSet extends DataSet 28 | { 29 | /** 30 | * List of titles 31 | */ 32 | private $titleList; 33 | 34 | /** 35 | * List of XYDataSet. 36 | */ 37 | private $serieList; 38 | 39 | /** 40 | * Constructor of XYSeriesDataSet. 41 | * 42 | */ 43 | public function XYSeriesDataSet() 44 | { 45 | $this->titleList = array(); 46 | $this->serieList = array(); 47 | } 48 | 49 | /** 50 | * Add a new serie to the dataset. 51 | * 52 | * @param string Title (label) of the serie. 53 | * @param XYDataSet Serie of points to add 54 | */ 55 | public function addSerie($title, $serie) 56 | { 57 | array_push($this->titleList, $title); 58 | array_push($this->serieList, $serie); 59 | } 60 | 61 | /** 62 | * Getter of titleList. 63 | * 64 | * @return List of titles. 65 | */ 66 | public function getTitleList() 67 | { 68 | return $this->titleList; 69 | } 70 | 71 | /** 72 | * Getter of serieList. 73 | * 74 | * @return List of series. 75 | */ 76 | public function getSerieList() 77 | { 78 | return $this->serieList; 79 | } 80 | } 81 | 82 | ?> -------------------------------------------------------------------------------- /include/libchart/classes/view/axis/Axis.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * Automatic axis boundaries and ticks calibration 22 | * 23 | * @author Jean-Marc Tr�meaux (jm.tremeaux at gmail.com) 24 | */ 25 | class Axis 26 | { 27 | private $min; 28 | private $max; 29 | private $guide; 30 | private $delta; 31 | private $magnitude; 32 | private $displayMin; 33 | private $displayMax; 34 | private $tics; 35 | 36 | /** 37 | * Creates a new axis formatter. 38 | * 39 | * @param integer minimum value on the axis 40 | * @param integer maximum value on the axis 41 | */ 42 | public function Axis($min, $max) 43 | { 44 | $this->min = $min; 45 | $this->max = $max; 46 | 47 | $this->guide = 10; 48 | } 49 | 50 | /** 51 | * Computes value between two ticks. 52 | */ 53 | public function quantizeTics() 54 | { 55 | // Approximate number of decades, in [1..10[ 56 | $norm = $this->delta / $this->magnitude; 57 | 58 | // Approximate number of tics per decade 59 | $posns = $this->guide / $norm; 60 | 61 | if ($posns > 20) { 62 | $tics = 0.05; // e.g. 0, .05, .10, ... 63 | } else if ($posns > 10) { 64 | $tics = 0.2; // e.g. 0, .1, .2, ... 65 | } else if ($posns > 5) { 66 | $tics = 0.4; // e.g. 0, 0.2, 0.4, ... 67 | } else if ($posns > 3) { 68 | $tics = 0.5; // e.g. 0, 0.5, 1, ... 69 | } else if ($posns > 2) { 70 | $tics = 1; // e.g. 0, 1, 2, ... 71 | } else if ($posns > 0.25) { 72 | $tics = 2; // e.g. 0, 2, 4, 6 73 | } else { 74 | $tics = ceil($norm); 75 | } 76 | 77 | $this->tics = $tics * $this->magnitude; 78 | } 79 | 80 | /** 81 | * Computes automatic boundaries on the axis 82 | */ 83 | public function computeBoundaries() 84 | { 85 | // Range 86 | $this->delta = abs($this->max - $this->min); 87 | 88 | // Check for null distribution 89 | if ($this->delta == 0) 90 | $this->delta = 1; 91 | 92 | // Order of magnitude of range 93 | $this->magnitude = pow(10, floor(log10($this->delta))); 94 | 95 | $this->quantizeTics(); 96 | 97 | $this->displayMin = floor($this->min / $this->tics) * $this->tics; 98 | $this->displayMax = ceil($this->max / $this->tics) * $this->tics; 99 | $this->displayDelta = $this->displayMax - $this->displayMin; 100 | 101 | // Check for null distribution 102 | if ($this->displayDelta == 0) { 103 | $this->displayDelta = 1; 104 | } 105 | } 106 | 107 | /** 108 | * Get the lower boundary on the axis3 109 | * 110 | * @return integer lower boundary on the axis 111 | */ 112 | public function getLowerBoundary() 113 | { 114 | return $this->displayMin; 115 | } 116 | 117 | /** 118 | * Get the upper boundary on the axis3 119 | * 120 | * @return integer upper boundary on the axis 121 | */ 122 | public function getUpperBoundary() 123 | { 124 | return $this->displayMax; 125 | } 126 | 127 | /** 128 | * Get the value between two ticks3 129 | * 130 | * @return integer value between two ticks 131 | */ 132 | public function getTics() 133 | { 134 | return $this->tics; 135 | } 136 | } 137 | 138 | ?> -------------------------------------------------------------------------------- /include/libchart/classes/view/axis/Bound.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * Object representing the bounds of a dataset (its minimal and maximal values) on its vertical axis. 22 | * The bounds are automatically calculated from a XYDataSet or XYSeriesDataSet. 23 | * Default (calculated) bounds can be overriden using the setLowerBound() and setUpperBound() methods. 24 | * 25 | * @author Jean-Marc Tr�meaux (jm.tremeaux at gmail.com) 26 | * Created on 25 july 2007 27 | */ 28 | class Bound 29 | { 30 | /** 31 | * Manually set lower bound, overrides the value calculated by computeBound(). 32 | */ 33 | private $lowerBound = null; 34 | 35 | /** 36 | * Manually set upper bound, overrides the value calculated by computeBound(). 37 | */ 38 | private $upperBound = null; 39 | 40 | /** 41 | * Computed min bound. 42 | */ 43 | private $yMinValue = null; 44 | 45 | /** 46 | * Computed max bound. 47 | */ 48 | private $yMaxValue = null; 49 | 50 | /** 51 | * Compute the boundaries on the axis. 52 | * 53 | * @param dataSet The data set 54 | */ 55 | public function computeBound($dataSet) 56 | { 57 | // Check if the data set is empty 58 | $dataSetEmpty = true; 59 | $serieList = null; 60 | if ($dataSet instanceof XYDataSet) { 61 | $pointList = $dataSet->getPointList(); 62 | $dataSetEmpty = count($pointList) == 0; 63 | 64 | if (!$dataSetEmpty) { 65 | // Process it as a serie 66 | $serieList = array(); 67 | array_push($serieList, $dataSet); 68 | } 69 | } else if ($dataSet instanceof XYSeriesDataSet) { 70 | $serieList = $dataSet->getSerieList(); 71 | if (count($serieList) > 0) { 72 | $serie = current($serieList); 73 | $dataSetEmpty = count($serie) == 0; 74 | } 75 | } else { 76 | die("Error: unknown dataset type"); 77 | } 78 | 79 | // If the dataset is empty, default some bounds 80 | $yMin = 0; 81 | $yMax = 1; 82 | if (!$dataSetEmpty) { 83 | // Compute lower and upper bound on the value axis 84 | unset($yMin); 85 | unset($yMax); 86 | 87 | foreach ($serieList as $serie) { 88 | foreach ($serie->getPointList() as $point) { 89 | $y = $point->getY(); 90 | 91 | if (!isset($yMin)) { 92 | $yMin = $y; 93 | $yMax = $y; 94 | } else { 95 | if ($y < $yMin) { 96 | $yMin = $y; 97 | } 98 | 99 | if ($y > $yMax) { 100 | $yMax = $y; 101 | } 102 | } 103 | } 104 | } 105 | } 106 | 107 | // If user specified bounds and they are actually greater than computer bounds, override computed bounds 108 | if (isset($this->lowerBound) && $this->lowerBound < $yMin) { 109 | $this->yMinValue = $this->lowerBound; 110 | } else { 111 | $this->yMinValue = $yMin; 112 | } 113 | 114 | if (isset($this->upperBound) && $this->upperBound > $yMax) { 115 | $this->yMaxValue = $this->upperBound; 116 | } else { 117 | $this->yMaxValue = $yMax; 118 | } 119 | } 120 | 121 | /** 122 | * Getter of yMinValue. 123 | * 124 | * @return min bound 125 | */ 126 | public function getYMinValue() 127 | { 128 | return $this->yMinValue; 129 | } 130 | 131 | /** 132 | * Getter of yMaxValue. 133 | * 134 | * @return max bound 135 | */ 136 | public function getYMaxValue() 137 | { 138 | return $this->yMaxValue; 139 | } 140 | 141 | /** 142 | * Set manually the lower boundary value (overrides the automatic formatting). 143 | * Typical usage is to set the bars starting from zero. 144 | * 145 | * @param double lower boundary value 146 | */ 147 | public function setLowerBound($lowerBound) 148 | { 149 | $this->lowerBound = $lowerBound; 150 | } 151 | 152 | /** 153 | * Set manually the upper boundary value (overrides the automatic formatting). 154 | * 155 | * @param double upper boundary value 156 | */ 157 | public function setUpperBound($upperBound) 158 | { 159 | $this->upperBound = $upperBound; 160 | } 161 | } 162 | 163 | ?> -------------------------------------------------------------------------------- /include/libchart/classes/view/caption/Caption.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * Caption. 22 | * 23 | * @author Jean-Marc Tr�meaux (jm.tremeaux at gmail.com) 24 | * Created on 30 july 2007 25 | */ 26 | class Caption 27 | { 28 | protected $labelBoxWidth; 29 | protected $labelBoxHeight; 30 | 31 | // Plot 32 | protected $plot; 33 | 34 | // Label list 35 | protected $labelList; 36 | 37 | // Color set 38 | protected $colorSet; 39 | 40 | /** 41 | * Constructor of Caption 42 | */ 43 | public function Caption() 44 | { 45 | $this->labelBoxWidth = 15; 46 | $this->labelBoxHeight = 15; 47 | } 48 | 49 | /** 50 | * Render the caption. 51 | */ 52 | public function render() 53 | { 54 | // Get graphical obects 55 | $img = $this->plot->getImg(); 56 | $palette = $this->plot->getPalette(); 57 | $text = $this->plot->getText(); 58 | $primitive = $this->plot->getPrimitive(); 59 | 60 | // Get the caption area 61 | $captionArea = $this->plot->getCaptionArea(); 62 | 63 | // Get the pie color set 64 | $colorSet = $this->colorSet; 65 | $colorSet->reset(); 66 | 67 | $i = 0; 68 | foreach ($this->labelList as $label) { 69 | // Get the next color 70 | $color = $colorSet->currentColor(); 71 | $colorSet->next(); 72 | 73 | $boxX1 = $captionArea->x1; 74 | $boxX2 = $boxX1 + $this->labelBoxWidth; 75 | $boxY1 = $captionArea->y1 + 5 + $i * ($this->labelBoxHeight + 5); 76 | $boxY2 = $boxY1 + $this->labelBoxHeight; 77 | 78 | $primitive->outlinedBox($boxX1, $boxY1, $boxX2, $boxY2, $palette->axisColor[0], $palette->axisColor[1]); 79 | imagefilledrectangle($img, $boxX1 + 2, $boxY1 + 2, $boxX2 - 2, $boxY2 - 2, $color->getColor($img)); 80 | 81 | $text->printText($img, $boxX2 + 5, $boxY1 + $this->labelBoxHeight / 2, $this->plot->getTextColor(), $label, $text->fontCondensed, $text->VERTICAL_CENTER_ALIGN); 82 | 83 | $i++; 84 | } 85 | } 86 | 87 | /** 88 | * Sets the plot. 89 | * 90 | * @param Plot The plot 91 | */ 92 | public function setPlot($plot) 93 | { 94 | $this->plot = $plot; 95 | } 96 | 97 | /** 98 | * Sets the label list. 99 | * 100 | * @param Array label list 101 | */ 102 | public function setLabelList($labelList) 103 | { 104 | $this->labelList = $labelList; 105 | } 106 | 107 | 108 | /** 109 | * Sets the color set. 110 | * 111 | * @param Array Color set 112 | */ 113 | public function setColorSet($colorSet) 114 | { 115 | $this->colorSet = $colorSet; 116 | } 117 | } 118 | 119 | ?> -------------------------------------------------------------------------------- /include/libchart/classes/view/chart/Chart.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /*! \mainpage Libchart 21 | * 22 | * This is the reference API, automatically compiled by Doxygen. 23 | * You can find here information that is not covered by the tutorial. 24 | * 25 | */ 26 | 27 | /** 28 | * Base chart class. 29 | * 30 | * @author Jean-Marc Tr�meaux (jm.tremeaux at gmail.com) 31 | */ 32 | abstract class Chart 33 | { 34 | /** 35 | * The chart configuration. 36 | */ 37 | protected $config; 38 | 39 | /** 40 | * The data set. 41 | */ 42 | protected $dataSet; 43 | 44 | /** 45 | * Plot (holds graphical attributes). 46 | */ 47 | protected $plot; 48 | 49 | /** 50 | * Abstract constructor of Chart. 51 | * 52 | * @param integer width of the image 53 | * @param integer height of the image 54 | */ 55 | protected function Chart($width, $height) 56 | { 57 | // Initialize the configuration 58 | $this->config = new ChartConfig(); 59 | 60 | // Creates the plot 61 | $this->plot = new Plot($width, $height); 62 | $this->plot->setTitle("Untitled chart"); 63 | $this->plot->setLogoFileName(dirname(__FILE__) . "/../../../images/PoweredBy.png"); 64 | } 65 | 66 | /** 67 | * Checks the data model before rendering the graph. 68 | */ 69 | protected function checkDataModel() 70 | { 71 | // Check if a dataset was defined 72 | if (!$this->dataSet) { 73 | die("Error: No dataset defined."); 74 | } 75 | 76 | // Maybe no points are defined, but that's ok. This will yield and empty graph with default boundaries. 77 | } 78 | 79 | /** 80 | * Create the image. 81 | */ 82 | protected function createImage() 83 | { 84 | $this->plot->createImage(); 85 | } 86 | 87 | /** 88 | * Sets the data set. 89 | * 90 | * @param dataSet The data set 91 | */ 92 | public function setDataSet($dataSet) 93 | { 94 | $this->dataSet = $dataSet; 95 | } 96 | 97 | /** 98 | * Return the chart configuration. 99 | * 100 | * @return configuration : ChartConfig 101 | */ 102 | public function getConfig() 103 | { 104 | return $this->config; 105 | } 106 | 107 | /** 108 | * Return the plot. 109 | * 110 | * @return plot 111 | */ 112 | public function getPlot() 113 | { 114 | return $this->plot; 115 | } 116 | 117 | /** 118 | * Sets the title. 119 | * 120 | * @param string New title 121 | */ 122 | public function setTitle($title) 123 | { 124 | $this->plot->setTitle($title); 125 | } 126 | } 127 | 128 | ?> -------------------------------------------------------------------------------- /include/libchart/classes/view/color/Color.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * Color. 22 | * 23 | * @author Jean-Marc Tr�meaux (jm.tremeaux at gmail.com) 24 | */ 25 | class Color 26 | { 27 | private $red; 28 | private $green; 29 | private $blue; 30 | private $alpha; 31 | private $gdColor; 32 | 33 | /** 34 | * Creates a new color 35 | * 36 | * @param integer red [0..255] 37 | * @param integer green [0..255] 38 | * @param integer blue [0..255] 39 | * @param integer alpha [0..255] 40 | */ 41 | public function Color($red, $green, $blue, $alpha = 0) 42 | { 43 | $this->red = (int)$red; 44 | $this->green = (int)$green; 45 | $this->blue = (int)$blue; 46 | $this->alpha = (int)round($alpha * 127.0 / 255); 47 | 48 | $this->gdColor = null; 49 | } 50 | 51 | /** 52 | * Get GD color. 53 | * 54 | * @param $img GD image resource 55 | */ 56 | public function getColor($img) 57 | { 58 | // Checks if color has already been allocated 59 | if (!$this->gdColor) { 60 | if ($this->alpha == 0 || !function_exists('imagecolorallocatealpha')) { 61 | $this->gdColor = imagecolorallocate($img, $this->red, $this->green, $this->blue); 62 | } else { 63 | $this->gdColor = imagecolorallocatealpha($img, $this->red, $this->green, $this->blue, $this->alpha); 64 | } 65 | } 66 | 67 | // Returns GD color 68 | return $this->gdColor; 69 | } 70 | 71 | /** 72 | * Clip a color component in the interval [0..255] 73 | * 74 | * @param integer Component 75 | * @return Clipped component 76 | */ 77 | public function clip($component) 78 | { 79 | if ($component < 0) { 80 | $component = 0; 81 | } else if ($component > 255) { 82 | $component = 255; 83 | } 84 | 85 | return $component; 86 | } 87 | 88 | /** 89 | * Return a new color, which is a shadow of this one. 90 | * 91 | * @param double Multiplication factor 92 | * @return Shadow color 93 | */ 94 | public function getShadowColor($shadowFactor) 95 | { 96 | $red = $this->clip($this->red * $shadowFactor); 97 | $green = $this->clip($this->green * $shadowFactor); 98 | $blue = $this->clip($this->blue * $shadowFactor); 99 | $shadowColor = new Color($red, $green, $blue); 100 | 101 | return $shadowColor; 102 | } 103 | } 104 | 105 | ?> -------------------------------------------------------------------------------- /include/libchart/classes/view/color/ColorSet.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * A set of colors, used for drawing series of data. 22 | * 23 | * @author Jean-Marc Tr�meaux (jm.tremeaux at gmail.com) 24 | * Created on 26 july 2007 25 | */ 26 | class ColorSet 27 | { 28 | public $colorList; 29 | public $shadowColorList; 30 | 31 | /** 32 | * ColorSet constructor. 33 | * 34 | * @param $shadowFactor Shadow factor 35 | * @param $colorArray Colors as an array 36 | */ 37 | public function ColorSet($colorList, $shadowFactor) 38 | { 39 | $this->colorList = $colorList; 40 | $this->shadowColorList = array(); 41 | 42 | // Generate the shadow color set 43 | foreach ($colorList as $color) { 44 | $shadowColor = $color->getShadowColor($shadowFactor); 45 | 46 | array_push($this->shadowColorList, $shadowColor); 47 | } 48 | } 49 | 50 | /** 51 | * Reset the iterator over the collections of colors. 52 | */ 53 | public function reset() 54 | { 55 | reset($this->colorList); 56 | reset($this->shadowColorList); 57 | } 58 | 59 | /** 60 | * Iterate over the colors and shadow colors. When we go after the last one, loop over. 61 | * 62 | */ 63 | public function next() 64 | { 65 | $value = next($this->colorList); 66 | next($this->shadowColorList); 67 | 68 | // When we go after the last value, loop over. 69 | if ($value == FALSE) { 70 | $this->reset(); 71 | } 72 | } 73 | 74 | /** 75 | * Returns the current color. 76 | * 77 | * @return Current color 78 | */ 79 | public function currentColor() 80 | { 81 | return current($this->colorList); 82 | } 83 | 84 | /** 85 | * Returns the current shadow color. 86 | * 87 | * @return Current shadow color 88 | */ 89 | public function currentShadowColor() 90 | { 91 | return current($this->shadowColorList); 92 | } 93 | } 94 | 95 | ?> -------------------------------------------------------------------------------- /include/libchart/classes/view/color/Palette.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * Color palette shared by all chart types. 22 | * 23 | * @author Jean-Marc Tr�meaux (jm.tremeaux at gmail.com) 24 | * Created on 25 july 2007 25 | */ 26 | class Palette 27 | { 28 | // Plot attributes 29 | public $red; 30 | public $axisColor; 31 | public $backgroundColor; 32 | 33 | // Specific chart attributes 34 | public $barColorSet; 35 | public $lineColorSet; 36 | public $pieColorSet; 37 | 38 | /** 39 | * Palette constructor. 40 | */ 41 | public function Palette() 42 | { 43 | $this->red = new Color(255, 0, 0); 44 | 45 | // Set the colors for the horizontal and vertical axis 46 | $this->setAxisColor(array( 47 | new Color(201, 201, 201), 48 | new Color(158, 158, 158) 49 | )); 50 | 51 | // Set the colors for the background 52 | $this->setBackgroundColor(array( 53 | new Color(242, 242, 242), 54 | new Color(231, 231, 231), 55 | new Color(239, 239, 239), 56 | new Color(253, 253, 253) 57 | )); 58 | 59 | // Set the colors for the bars 60 | $this->setBarColor(array( 61 | new Color(42, 71, 181), 62 | new Color(243, 198, 118), 63 | new Color(128, 63, 35), 64 | new Color(195, 45, 28), 65 | new Color(224, 198, 165), 66 | new Color(239, 238, 218), 67 | new Color(40, 72, 59), 68 | new Color(71, 112, 132), 69 | new Color(167, 192, 199), 70 | new Color(218, 233, 202) 71 | )); 72 | 73 | // Set the colors for the lines 74 | $this->setLineColor(array( 75 | new Color(172, 172, 210), 76 | new Color(2, 78, 0), 77 | new Color(148, 170, 36), 78 | new Color(233, 191, 49), 79 | new Color(240, 127, 41), 80 | new Color(243, 63, 34), 81 | new Color(190, 71, 47), 82 | new Color(135, 81, 60), 83 | new Color(128, 78, 162), 84 | new Color(121, 75, 255), 85 | new Color(142, 165, 250), 86 | new Color(162, 254, 239), 87 | new Color(137, 240, 166), 88 | new Color(104, 221, 71), 89 | new Color(98, 174, 35), 90 | new Color(93, 129, 1) 91 | )); 92 | 93 | // Set the colors for the pie 94 | $this->setPieColor(array( 95 | new Color(2, 78, 0), 96 | new Color(148, 170, 36), 97 | new Color(233, 191, 49), 98 | new Color(240, 127, 41), 99 | new Color(243, 63, 34), 100 | new Color(190, 71, 47), 101 | new Color(135, 81, 60), 102 | new Color(128, 78, 162), 103 | new Color(121, 75, 255), 104 | new Color(142, 165, 250), 105 | new Color(162, 254, 239), 106 | new Color(137, 240, 166), 107 | new Color(104, 221, 71), 108 | new Color(98, 174, 35), 109 | new Color(93, 129, 1) 110 | )); 111 | } 112 | 113 | /** 114 | * Set the colors for the axis. 115 | * 116 | * @param colors Array of Color 117 | */ 118 | public function setAxisColor($colors) 119 | { 120 | $this->axisColor = $colors; 121 | } 122 | 123 | /** 124 | * Set the colors for the background. 125 | * 126 | * @param colors Array of Color 127 | */ 128 | public function setBackgroundColor($colors) 129 | { 130 | $this->backgroundColor = $colors; 131 | } 132 | 133 | /** 134 | * Set the colors for the bar charts. 135 | * 136 | * @param colors Array of Color 137 | */ 138 | public function setBarColor($colors) 139 | { 140 | $this->barColorSet = new ColorSet($colors, 0.75); 141 | } 142 | 143 | /** 144 | * Set the colors for the line charts. 145 | * 146 | * @param colors Array of Color 147 | */ 148 | public function setLineColor($colors) 149 | { 150 | $this->lineColorSet = new ColorSet($colors, 0.75); 151 | } 152 | 153 | /** 154 | * Set the colors for the pie charts. 155 | * 156 | * @param colors Array of Color 157 | */ 158 | public function setPieColor($colors) 159 | { 160 | $this->pieColorSet = new ColorSet($colors, 0.7); 161 | } 162 | } 163 | 164 | ?> -------------------------------------------------------------------------------- /include/libchart/classes/view/primitive/Padding.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * Primitive geometric object representing a padding. 22 | * 23 | * @author Jean-Marc Tr�meaux (jm.tremeaux at gmail.com) 24 | * @Created on 27 july 2007 25 | */ 26 | class Padding 27 | { 28 | /** 29 | * Top padding. 30 | */ 31 | public $top; 32 | 33 | /** 34 | * Right padding. 35 | */ 36 | public $right; 37 | 38 | /** 39 | * Bottom padding. 40 | */ 41 | public $bottom; 42 | 43 | /** 44 | * Left padding. 45 | */ 46 | public $left; 47 | 48 | /** 49 | * Creates a new padding. 50 | * 51 | * @param integer Top padding 52 | * @param integer Right padding 53 | * @param integer Bottom padding 54 | * @param integer Left padding 55 | */ 56 | public function Padding($top, $right = null, $bottom = null, $left = null) 57 | { 58 | $this->top = $top; 59 | if ($right == null) { 60 | $this->right = $top; 61 | $this->bottom = $top; 62 | $this->left = $top; 63 | } else { 64 | $this->right = $right; 65 | $this->bottom = $bottom; 66 | $this->left = $left; 67 | } 68 | } 69 | } 70 | 71 | ?> -------------------------------------------------------------------------------- /include/libchart/classes/view/primitive/Primitive.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * Graphic primitives, extends GD with chart related primitives. 22 | * 23 | * @author Jean-Marc Tr�meaux (jm.tremeaux at gmail.com) 24 | */ 25 | class Primitive 26 | { 27 | private $img; 28 | 29 | /** 30 | * Creates a new primitive object 31 | * 32 | * @param resource GD image resource 33 | */ 34 | public function Primitive($img) 35 | { 36 | $this->img = $img; 37 | } 38 | 39 | /** 40 | * Draws a straight line. 41 | * 42 | * @param integer line start (X) 43 | * @param integer line start (Y) 44 | * @param integer line end (X) 45 | * @param integer line end (Y) 46 | * @param Color line color 47 | */ 48 | public function line($x1, $y1, $x2, $y2, $color, $width = 1) 49 | { 50 | imagefilledpolygon($this->img, array($x1, $y1 - $width / 2, $x1, $y1 + $width / 2, $x2, $y2 + $width / 2, $x2, $y2 - $width / 2), 4, $color->getColor($this->img)); 51 | // imageline($this->img, $x1, $y1, $x2, $y2, $color->getColor($this->img)); 52 | } 53 | 54 | /** 55 | * Draw a filled gray box with thick borders and darker corners. 56 | * 57 | * @param integer top left coordinate (x) 58 | * @param integer top left coordinate (y) 59 | * @param integer bottom right coordinate (x) 60 | * @param integer bottom right coordinate (y) 61 | * @param Color edge color 62 | * @param Color corner color 63 | */ 64 | public function outlinedBox($x1, $y1, $x2, $y2, $color0, $color1) 65 | { 66 | imagefilledrectangle($this->img, $x1, $y1, $x2, $y2, $color0->getColor($this->img)); 67 | imagerectangle($this->img, $x1, $y1, $x1 + 1, $y1 + 1, $color1->getColor($this->img)); 68 | imagerectangle($this->img, $x2 - 1, $y1, $x2, $y1 + 1, $color1->getColor($this->img)); 69 | imagerectangle($this->img, $x1, $y2 - 1, $x1 + 1, $y2, $color1->getColor($this->img)); 70 | imagerectangle($this->img, $x2 - 1, $y2 - 1, $x2, $y2, $color1->getColor($this->img)); 71 | } 72 | 73 | } 74 | 75 | ?> -------------------------------------------------------------------------------- /include/libchart/classes/view/primitive/Rectangle.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * A rectangle identified by the top-left and the bottom-right corners. 22 | * 23 | * @author Jean-Marc Tr�meaux (jm.tremeaux at gmail.com) 24 | * @Created on 27 july 2007 25 | */ 26 | class Rectangle 27 | { 28 | /** 29 | * Top left X. 30 | */ 31 | public $x1; 32 | 33 | /** 34 | * Top left Y. 35 | */ 36 | public $y1; 37 | 38 | /** 39 | * Bottom right X. 40 | */ 41 | public $x2; 42 | 43 | /** 44 | * Bottom right Y. 45 | */ 46 | public $y2; 47 | 48 | /** 49 | * Constructor of Rectangle. 50 | * 51 | * @param x1 Left edge coordinate 52 | * @param y1 Upper edge coordinate 53 | * @param x2 Right edge coordinate 54 | * @param y2 Bottom edge coordinate 55 | */ 56 | public function Rectangle($x1, $y1, $x2, $y2) 57 | { 58 | $this->x1 = $x1; 59 | $this->y1 = $y1; 60 | $this->x2 = $x2; 61 | $this->y2 = $y2; 62 | } 63 | 64 | /** 65 | * Apply a padding and returns the resulting rectangle. 66 | * The result is an enlarged rectangle. 67 | * 68 | * @return Padded rectangle 69 | */ 70 | public function getPaddedRectangle($padding) 71 | { 72 | $rectangle = new Rectangle( 73 | $this->x1 + $padding->left, 74 | $this->y1 + $padding->top, 75 | $this->x2 - $padding->right, 76 | $this->y2 - $padding->bottom 77 | ); 78 | 79 | //echo "(" . $this->x1 . "," . $this->y1 . ") (" . $this->x2 . "," . $this->y2 . ")
"; 80 | return $rectangle; 81 | } 82 | } 83 | 84 | ?> -------------------------------------------------------------------------------- /include/libchart/classes/view/text/Text.php: -------------------------------------------------------------------------------- 1 | . 17 | * 18 | */ 19 | 20 | /** 21 | * Text drawing helper 22 | * 23 | * @author Jean-Marc Tr�meaux (jm.tremeaux at gmail.com) 24 | */ 25 | class Text 26 | { 27 | public $HORIZONTAL_LEFT_ALIGN = 1; 28 | public $HORIZONTAL_CENTER_ALIGN = 2; 29 | public $HORIZONTAL_RIGHT_ALIGN = 4; 30 | public $VERTICAL_TOP_ALIGN = 8; 31 | public $VERTICAL_CENTER_ALIGN = 16; 32 | public $VERTICAL_BOTTOM_ALIGN = 32; 33 | 34 | /** 35 | * Creates a new text drawing helper. 36 | */ 37 | public function Text() 38 | { 39 | $baseDir = dirname(__FILE__) . "/../../../"; 40 | 41 | //Free low-res fonts based on Bitstream Vera 42 | //$this->fontCondensed = $baseDir . "fonts/DejaVuSansCondensed.ttf"; 43 | //$this->fontCondensedBold = $baseDir . "fonts/DejaVuSansCondensed-Bold.ttf"; 44 | 45 | //New font (OpenSans > FreeSans) 46 | $this->fontCondensed = $baseDir . "fonts/OpenSans-Regular.ttf"; 47 | $this->fontCondensedBold = $baseDir . "fonts/OpenSans-Bold.ttf"; 48 | } 49 | 50 | /** 51 | * Print text. 52 | * 53 | * @param Image GD image 54 | * @param integer text coordinate (x) 55 | * @param integer text coordinate (y) 56 | * @param Color text color 57 | * @param string text value 58 | * @param string font file name 59 | * @param bitfield text alignment 60 | */ 61 | public function printText($img, $px, $py, $color, $text, $fontFileName, $align = 0) 62 | { 63 | if (!($align & $this->HORIZONTAL_CENTER_ALIGN) && !($align & $this->HORIZONTAL_RIGHT_ALIGN)) { 64 | $align |= $this->HORIZONTAL_LEFT_ALIGN; 65 | } 66 | 67 | if (!($align & $this->VERTICAL_CENTER_ALIGN) && !($align & $this->VERTICAL_BOTTOM_ALIGN)) { 68 | $align |= $this->VERTICAL_TOP_ALIGN; 69 | } 70 | 71 | $fontSize = 8; 72 | $lineSpacing = 1; 73 | 74 | list ($llx, $lly, $lrx, $lry, $urx, $ury, $ulx, $uly) = imageftbbox($fontSize, 0, $fontFileName, $text, array("linespacing" => $lineSpacing)); 75 | 76 | $textWidth = $lrx - $llx; 77 | $textHeight = $lry - $ury; 78 | 79 | $angle = 0; 80 | 81 | if ($align & $this->HORIZONTAL_CENTER_ALIGN) { 82 | $px -= $textWidth / 2; 83 | } 84 | 85 | if ($align & $this->HORIZONTAL_RIGHT_ALIGN) { 86 | $px -= $textWidth; 87 | } 88 | 89 | if ($align & $this->VERTICAL_CENTER_ALIGN) { 90 | $py += $textHeight / 2; 91 | } 92 | 93 | if ($align & $this->VERTICAL_TOP_ALIGN) { 94 | $py += $textHeight; 95 | } 96 | 97 | imagettftext($img, $fontSize, $angle, $px, $py, $color->getColor($img), $fontFileName, $text); 98 | } 99 | 100 | /** 101 | * Print text centered horizontally on the image. 102 | * 103 | * @param Image GD image 104 | * @param integer text coordinate (y) 105 | * @param Color text color 106 | * @param string text value 107 | * @param string font file name 108 | */ 109 | public function printCentered($img, $py, $color, $text, $fontFileName) 110 | { 111 | $this->printText($img, imagesx($img) / 2, $py, $color, $text, $fontFileName, $this->HORIZONTAL_CENTER_ALIGN | $this->VERTICAL_CENTER_ALIGN); 112 | } 113 | 114 | /** 115 | * Print text in diagonal. 116 | * 117 | * @param Image GD image 118 | * @param integer text coordinate (x) 119 | * @param integer text coordinate (y) 120 | * @param Color text color 121 | * @param string text value 122 | */ 123 | public function printDiagonal($img, $px, $py, $color, $text) 124 | { 125 | $fontSize = 8; 126 | $fontFileName = $this->fontCondensed; 127 | 128 | $lineSpacing = 1; 129 | 130 | list ($lx, $ly, $rx, $ry) = imageftbbox($fontSize, 0, $fontFileName, $text, array("linespacing" => $lineSpacing)); 131 | $textWidth = $rx - $lx; 132 | 133 | $angle = -45; 134 | 135 | imagettftext($img, $fontSize, $angle, $px, $py, $color->getColor($img), $fontFileName, $text); 136 | } 137 | } 138 | 139 | ?> -------------------------------------------------------------------------------- /include/libchart/doc/DEJAVU_LICENSE: -------------------------------------------------------------------------------- 1 | Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. 2 | 3 | Bitstream Vera Fonts Copyright 4 | ------------------------------ 5 | 6 | Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is 7 | a trademark of Bitstream, Inc. 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy 10 | of the fonts accompanying this license ("Fonts") and associated 11 | documentation files (the "Font Software"), to reproduce and distribute the 12 | Font Software, including without limitation the rights to use, copy, merge, 13 | publish, distribute, and/or sell copies of the Font Software, and to permit 14 | persons to whom the Font Software is furnished to do so, subject to the 15 | following conditions: 16 | 17 | The above copyright and trademark notices and this permission notice shall 18 | be included in all copies of one or more of the Font Software typefaces. 19 | 20 | The Font Software may be modified, altered, or added to, and in particular 21 | the designs of glyphs or characters in the Fonts may be modified and 22 | additional glyphs or characters may be added to the Fonts, only if the fonts 23 | are renamed to names not containing either the words "Bitstream" or the word 24 | "Vera". 25 | 26 | This License becomes null and void to the extent applicable to Fonts or Font 27 | Software that has been modified and is distributed under the "Bitstream 28 | Vera" names. 29 | 30 | The Font Software may be sold as part of a larger software package but no 31 | copy of one or more of the Font Software typefaces may be sold by itself. 32 | 33 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 34 | OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, 35 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, 36 | TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME 37 | FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING 38 | ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, 39 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 40 | THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE 41 | FONT SOFTWARE. 42 | 43 | Except as contained in this notice, the names of Gnome, the Gnome 44 | Foundation, and Bitstream Inc., shall not be used in advertising or 45 | otherwise to promote the sale, use or other dealings in this Font Software 46 | without prior written authorization from the Gnome Foundation or Bitstream 47 | Inc., respectively. For further information, contact: fonts at gnome dot 48 | org. 49 | 50 | $Id: LICENSE,v 1.1 2004/08/14 15:50:46 src Exp $ 51 | 52 | -------------------------------------------------------------------------------- /include/libchart/fonts/DejaVuSansCondensed-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/include/libchart/fonts/DejaVuSansCondensed-Bold.ttf -------------------------------------------------------------------------------- /include/libchart/fonts/DejaVuSansCondensed.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/include/libchart/fonts/DejaVuSansCondensed.ttf -------------------------------------------------------------------------------- /include/libchart/fonts/OpenSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/include/libchart/fonts/OpenSans-Bold.ttf -------------------------------------------------------------------------------- /include/libchart/fonts/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/include/libchart/fonts/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /include/libchart/images/PoweredBy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/include/libchart/images/PoweredBy.png -------------------------------------------------------------------------------- /include/maxmind/GeoLite2-City.mmdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/include/maxmind/GeoLite2-City.mmdb -------------------------------------------------------------------------------- /include/maxmind/geoip2.phar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/include/maxmind/geoip2.phar -------------------------------------------------------------------------------- /include/misc/ip2host.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /include/misc/versionCheck.php: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /include/misc/xss_clean.php: -------------------------------------------------------------------------------- 1 | kses 8 | * https://github.com/RichardVasquez/kses/ 9 | * 10 | * This was built from numerous sources 11 | * (thanks all, sorry I didn't track to credit you) 12 | * 13 | * It was tested against *most* exploits here: http://ha.ckers.org/xss.html 14 | * WARNING: Some weren't tested!!! 15 | * Those include the Actionscript and SSI samples, or any newer than Jan 2011 16 | * 17 | */ 18 | 19 | class xssClean { 20 | 21 | /* 22 | * Recursive worker to strip risky elements 23 | * 24 | * @param string $input Content to be cleaned. It MAY be modified in output 25 | * @return string $output Modified $input string 26 | */ 27 | public function clean_input( $input, $safe_level = 0 ) { 28 | 29 | $output = $input; 30 | do { 31 | // Treat $input as buffer on each loop, faster than new var 32 | $input = $output; 33 | 34 | // Remove unwanted tags 35 | $output = $this->strip_tags( $input ); 36 | $output = $this->strip_encoded_entities( $output ); 37 | 38 | // Use 2nd input param if not empty or '0' 39 | if ( $safe_level !== 0 ) { 40 | $output = $this->strip_base64( $output ); 41 | } 42 | 43 | } while ( $output !== $input ); 44 | 45 | return $output; 46 | 47 | } 48 | 49 | /* 50 | * Focuses on stripping encoded entities 51 | * *** This appears to be why people use this sample code. Unclear how well Kses does this *** 52 | * 53 | * @param string $input Content to be cleaned. It MAY be modified in output 54 | * @return string $input Modified $input string 55 | */ 56 | private function strip_encoded_entities( $input ) { 57 | 58 | // Fix &entity\n; 59 | $input = str_replace(array('&','<','>'), array('&amp;','&lt;','&gt;'), $input); 60 | $input = preg_replace('/(&#*\w+)[\x00-\x20]+;/u', '$1;', $input); 61 | $input = preg_replace('/(&#x*[0-9A-F]+);*/iu', '$1;', $input); 62 | $input = html_entity_decode($input, ENT_COMPAT, 'UTF-8'); 63 | 64 | // Remove any attribute starting with "on" or xmlns 65 | $input = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+[>\b]?#iu', '$1>', $input); 66 | 67 | // Remove javascript: and vbscript: protocols 68 | $input = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $input); 69 | $input = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $input); 70 | $input = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $input); 71 | 72 | // Only works in IE: 73 | $input = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $input); 74 | $input = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $input); 75 | $input = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu', '$1>', $input); 76 | 77 | return $input; 78 | 79 | } 80 | 81 | /* 82 | * Focuses on stripping unencoded HTML tags & namespaces 83 | * 84 | * @param string $input Content to be cleaned. It MAY be modified in output 85 | * @return string $input Modified $input string 86 | */ 87 | private function strip_tags( $input ) { 88 | // Remove tags 89 | $input = preg_replace('#]*+>#i', '', $input); 90 | 91 | // Remove namespaced elements 92 | $input = preg_replace('#]*+>#i', '', $input); 93 | 94 | return $input; 95 | 96 | } 97 | 98 | /* 99 | * Focuses on stripping entities from Base64 encoded strings 100 | * 101 | * NOT ENABLED by default! 102 | * To enable 2nd param of clean_input() can be set to anything other than 0 or '0': 103 | * ie: xssClean->clean_input( $input_string, 1 ) 104 | * 105 | * @param string $input Maybe Base64 encoded string 106 | * @return string $output Modified & re-encoded $input string 107 | */ 108 | private function strip_base64( $input ) { 109 | 110 | $decoded = base64_decode( $input ); 111 | 112 | $decoded = $this->strip_tags( $decoded ); 113 | $decoded = $this->strip_encoded_entities( $decoded ); 114 | 115 | $output = base64_encode( $decoded ); 116 | 117 | return $output; 118 | 119 | } 120 | 121 | } -------------------------------------------------------------------------------- /include/qgooglevisualapi/QAnnotatedtimelineGoogleGraph.class.php: -------------------------------------------------------------------------------- 1 | "740px", "height" => "240px", "displayAnnotations" => "true"); 26 | 27 | /** 28 | * holder for google api package name 29 | * 30 | * @var string 31 | */ 32 | protected $package = ""; 33 | 34 | /** 35 | * holder for registered api methods 36 | * 37 | * @var array 38 | */ 39 | protected $configuration = array( 40 | "allowHtml" => array("datatype" => "bool"), 41 | "annotationsWidth" => array("datatype" => "number"), 42 | "allowHtml" => array("datatype" => "bool"), 43 | "colors" => array("datatype" => "array"), 44 | "displayAnnotations" => array("datatype" => "bool"), 45 | "displayAnnotationsFilters" => array("datatype" => "bool"), 46 | "displayExactValues" => array("datatype" => "bool"), 47 | "min" => array("datatype" => "number"), 48 | "legend" => array( 49 | "values" => array("fixed", "maximize"), 50 | "datatype" => "string" 51 | ), 52 | "wmode" => array( 53 | "values" => array("opaque", "window", "transparent"), 54 | "datatype" => "string" 55 | ), 56 | "zoomEndTime" => array("datatype" => "date"), 57 | "zoomStartTime" => array("datatype" => "date"), 58 | ); 59 | 60 | } 61 | -------------------------------------------------------------------------------- /include/qgooglevisualapi/QApikeyGoogleGraph.class.php: -------------------------------------------------------------------------------- 1 | 400, "height" => 240, "legend" => "bottom"); 26 | 27 | /** 28 | * holder for google api package name 29 | * 30 | * @var string 31 | */ 32 | protected $package = ""; 33 | 34 | /** 35 | * holder for default properties 36 | * 37 | * @var array 38 | */ 39 | protected $configuration = array( 40 | "axisColor" => array("datatype" => "string,object"), 41 | "axisBackgroundColor" => array("datatype" => "string,object"), 42 | "backgroundColor" => array("datatype" => "string,object"), 43 | "borderColor" => array("datatype" => "string,object"), 44 | "colors" => array("datatype" => "array"), 45 | "focusBorderColor" => array("datatype" => "string,object"), 46 | "height" => array("datatype" => "integer"), 47 | "isStacked" => array("datatype" => "bool"), 48 | "legend" => array( 49 | "values" => array("right", "left", "top", "bottom", "none"), 50 | "datatype" => "string" 51 | ), 52 | "legendBackgroundColor" => array("datatype" => "string,object"), 53 | "legendTextColor" => array("datatype" => "string,object"), 54 | "lineSize" => array("datatype" => "integer"), 55 | "pointSize" => array("datatype" => "integer"), 56 | "reverseAxis" => array("datatype" => "bool"), 57 | "title" => array("datatype" => "string"), 58 | "titleX" => array("datatype" => "string"), 59 | "titleY" => array("datatype" => "string"), 60 | "titleColor" => array("datatype" => "string,object"), 61 | "width" => array("datatype" => "integer"), 62 | ); 63 | 64 | } 65 | -------------------------------------------------------------------------------- /include/qgooglevisualapi/QBarchartGoogleGraph.class.php: -------------------------------------------------------------------------------- 1 | 400, "height" => 240, "legend" => "bottom"); 24 | 25 | /** 26 | * holder for default properties 27 | * 28 | * @var array 29 | */ 30 | protected $package = ""; 31 | 32 | /** 33 | * holder for registered api methods 34 | * 35 | * @var array 36 | */ 37 | protected $configuration = array( 38 | "axisColor" => array("datatype" => "string,object"), 39 | "axisBackgroundColor" => array("datatype" => "string,object"), 40 | "backgroundColor" => array("datatype" => "string,object"), 41 | "is3D" => array("datatype" => "bool"), 42 | "borderColor" => array("datatype" => "string,object"), 43 | "colors" => array("datatype" => "array"), 44 | "focusBorderColor" => array("datatype" => "string,object"), 45 | "height" => array("datatype" => "integer"), 46 | "isStacked" => array("datatype" => "bool"), 47 | "legend" => array( 48 | "values" => array("right", "left", "top", "bottom", "none"), 49 | "datatype" => "string" 50 | ), 51 | "legendBackgroundColor" => array("datatype" => "string,object"), 52 | "legendTextColor" => array("datatype" => "string,object"), 53 | "lineSize" => array("datatype" => "integer"), 54 | "pointSize" => array("datatype" => "integer"), 55 | "reverseAxis" => array("datatype" => "bool"), 56 | "title" => array("datatype" => "string"), 57 | "titleX" => array("datatype" => "string"), 58 | "titleY" => array("datatype" => "string"), 59 | "titleColor" => array("datatype" => "string,object"), 60 | "width" => array("datatype" => "integer"), 61 | ); 62 | 63 | } -------------------------------------------------------------------------------- /include/qgooglevisualapi/QColumnchartGoogleGraph.class.php: -------------------------------------------------------------------------------- 1 | 200, "height" => 240, "legend" => "bottom"); 24 | 25 | /** 26 | * holder for google api package name 27 | * 28 | * @var string 29 | */ 30 | protected $package = ""; 31 | 32 | /** 33 | * holder for registered api methods 34 | * 35 | * @var array 36 | */ 37 | protected $configuration = array( 38 | "axisColor" => array("datatype" => "string,object"), 39 | "axisBackgroundColor" => array("datatype" => "string,object"), 40 | "backgroundColor" => array("datatype" => "string,object"), 41 | "is3D" => array("datatype" => "bool"), 42 | "borderColor" => array("datatype" => "string,object"), 43 | "colors" => array("datatype" => "array"), 44 | "focusBorderColor" => array("datatype" => "string,object"), 45 | "height" => array("datatype" => "integer"), 46 | "isStacked" => array("datatype" => "bool"), 47 | "legend" => array( 48 | "values" => array("right", "left", "top", "bottom", "none"), 49 | "datatype" => "string" 50 | ), 51 | "legendBackgroundColor" => array("datatype" => "string,object"), 52 | "legendTextColor" => array("datatype" => "string,object"), 53 | "lineSize" => array("datatype" => "integer"), 54 | "pointSize" => array("datatype" => "integer"), 55 | "reverseAxis" => array("datatype" => "bool"), 56 | "title" => array("datatype" => "string"), 57 | "titleX" => array("datatype" => "string"), 58 | "titleY" => array("datatype" => "string"), 59 | "titleColor" => array("datatype" => "string,object"), 60 | "width" => array("datatype" => "integer"), 61 | ); 62 | 63 | } 64 | -------------------------------------------------------------------------------- /include/qgooglevisualapi/QConfig.class.php: -------------------------------------------------------------------------------- 1 | 400, 29 | "height" => 120, 30 | "redFrom" => 90, 31 | "redTo" => 100, 32 | "yellowFrom" => 75, 33 | "yellowTo" => 90, 34 | "minorTicks" => 5, 35 | ); 36 | 37 | /** 38 | * holder for google api package name 39 | * 40 | * @var string 41 | */ 42 | protected $package = ""; 43 | 44 | /** 45 | * holder for registered api methods 46 | * 47 | * @var array 48 | */ 49 | protected $configuration = array( 50 | "width" => array("datatype" => "integer"), 51 | "height" => array("datatype" => "integer"), 52 | "redFrom" => array("datatype" => "integer"), 53 | "redTo" => array("datatype" => "integer"), 54 | "yellowFrom" => array("datatype" => "integer"), 55 | "yellowTo" => array("datatype" => "integer"), 56 | "greenFrom" => array("datatype" => "integer"), 57 | "greenTo" => array("datatype" => "integer"), 58 | "min" => array("datatype" => "integer"), 59 | "max" => array("datatype" => "integer"), 60 | "majorTicks" => array("datatype" => "integer"), 61 | "minorTicks" => array("datatype" => "integer"), 62 | ); 63 | 64 | 65 | } 66 | -------------------------------------------------------------------------------- /include/qgooglevisualapi/QInflector.class.php: -------------------------------------------------------------------------------- 1 | pluralRules) || empty($this->pluralRules)) { 30 | $this->setPluralRules(); 31 | } 32 | 33 | foreach ($this->pluralRules as $rule => $replacement) { 34 | if (preg_match($rule, $word)) { 35 | $this->pluralized[$word] = preg_replace($rule, $replacement, $word); 36 | return $this->pluralized[$word]; 37 | } 38 | } 39 | return $word; 40 | } 41 | 42 | private function setPluralRules() 43 | { 44 | $pluralRules = array( 45 | '/(nt)bus$/i' => '\1\2busses', 46 | '/(s)tatus$/i' => '\1\2tati', 47 | '/(th)is$/i' => '\1ose', // this 48 | '/(quiz|jazz)$/i' => '\1zes', 49 | '/^(ox)$/i' => '\1\2en', // ox 50 | '/([m|l])ouse$/i' => '\1ice', // mouse, louse 51 | '/(matr|vert|ind)(ix|ex)$/i' => '\1ices', // matrix, vertex, index 52 | '/(x|ch|ss|sh)$/i' => '\1es', // search, switch, fix, box, process, address 53 | '/([^aeiouy]|qu)y$/i' => '\1ies', // query, ability, agency 54 | '/(hive)$/i' => '\1s', // archive, hive 55 | '/(?:([^f])fe|([lr])f)$/i' => '\1\2ves', // half, safe, wife 56 | '/sis$/i' => 'ses', // basis, diagnosis 57 | '/([ti])um$/i' => '\1a', // datum, medium 58 | '/(p)erson$/i' => '\1eople', // person, salesperson 59 | '/(m)an$/i' => '\1en', // man, woman, spokesman 60 | '/(c)hild$/i' => '\1hildren', // child 61 | '/(buffal|tomat)o$/i' => '\1\2oes', // buffalo, tomato 62 | '/us$/' => 'i', // us 63 | '/(alias)/i' => '\1es', // alias 64 | '/(octop|vir)us$/i' => '\1i', 65 | '/(ax|cri|test)is$/i' => '\1es', 66 | '/s$/' => 's', // no change (compatibility) 67 | '/$/' => 's', 68 | ); 69 | 70 | $this->pluralRules = $pluralRules; 71 | 72 | } 73 | 74 | 75 | public function singularize($word) 76 | { 77 | 78 | if (!isset($this->singularRules) || empty($this->singularRules)) { 79 | $this->setSingularRules(); 80 | } 81 | 82 | foreach ($this->singularRules as $rule => $replacement) { 83 | if (preg_match($rule, $word)) { 84 | $this->singularized[$word] = preg_replace($rule, $replacement, $word); 85 | return $this->singularized[$word]; 86 | } 87 | } 88 | return $word; 89 | } 90 | 91 | protected function setSingularRules() 92 | { 93 | 94 | $coreSingularRules = array('/(s)tatuses$/i' => '\1\2tatus', 95 | '/(quiz)zes$/i' => '\\1', 96 | '/(matr)ices$/i' => '\1ix', 97 | '/(vert|ind)ices$/i' => '\1ex', 98 | '/^(ox)en/i' => '\1', 99 | '/(alias)es$/i' => '\1', 100 | '/([octop|vir])i$/i' => '\1us', 101 | '/(cris|ax|test)es$/i' => '\1is', 102 | '/(shoe)s$/i' => '\1', 103 | '/(o)es$/i' => '\1', 104 | '/ouses$/' => 'ouse', 105 | '/uses$/' => 'us', 106 | '/([m|l])ice$/i' => '\1ouse', 107 | '/(x|ch|ss|sh)es$/i' => '\1', 108 | '/(m)ovies$/i' => '\1\2ovie', 109 | '/(s)eries$/i' => '\1\2eries', 110 | '/([^aeiouy]|qu)ies$/i' => '\1y', 111 | '/([lr])ves$/i' => '\1f', 112 | '/(tive)s$/i' => '\1', 113 | '/(th)ose$/i' => '\1is', 114 | '/(hive)s$/i' => '\1', 115 | '/(drive)s$/i' => '\1', 116 | '/([^f])ves$/i' => '\1fe', 117 | '/(^analy)ses$/i' => '\1sis', 118 | '/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i' => '\1\2sis', 119 | '/([ti])a$/i' => '\1um', 120 | '/(p)eople$/i' => '\1\2erson', 121 | '/(m)en$/i' => '\1an', 122 | '/(c)hildren$/i' => '\1\2hild', 123 | '/(n)ews$/i' => '\1\2ews', 124 | '/s$/i' => ''); 125 | 126 | 127 | $this->singularRules = $coreSingularRules; 128 | } 129 | 130 | } 131 | 132 | ?> -------------------------------------------------------------------------------- /include/qgooglevisualapi/QLinechartGoogleGraph.class.php: -------------------------------------------------------------------------------- 1 | 400, "height" => 200, "legend" => "bottom"); 31 | 32 | /** 33 | * holder for default properties 34 | * 35 | * @var array 36 | */ 37 | protected $configuration = array( 38 | "axisColor" => array("datatype" => "string,object"), 39 | "axisBackgroundColor" => array("datatype" => "string,object"), 40 | "backgroundColor" => array("datatype" => "string,object"), 41 | "borderColor" => array("datatype" => "string,object"), 42 | "colors" => array("datatype" => "array"), 43 | "focusBorderColor" => array("datatype" => "string,object"), 44 | "height" => array("datatype" => "integer"), 45 | "legend" => array( 46 | "values" => array("right", "left", "top", "bottom", "none"), 47 | "datatype" => "string" 48 | ), 49 | "legendBackgroundColor" => array("datatype" => "string,object"), 50 | "legendTextColor" => array("datatype" => "string,object"), 51 | "lineSize" => array("datatype" => "integer"), 52 | "pointSize" => array("datatype" => "integer"), 53 | "reverseAxis" => array("datatype" => "bool"), 54 | "title" => array("datatype" => "string"), 55 | "titleX" => array("datatype" => "string"), 56 | "titleY" => array("datatype" => "string"), 57 | "titleColor" => array("datatype" => "string,object"), 58 | "width" => array("datatype" => "integer"), 59 | ); 60 | 61 | } 62 | -------------------------------------------------------------------------------- /include/qgooglevisualapi/QMapGoogleGraph.class.php: -------------------------------------------------------------------------------- 1 | "740px", 30 | "height" => "240px", 31 | "showTip" => 'true', 32 | 33 | ); 34 | 35 | /** 36 | * holder for google api package name 37 | * 38 | * @var string 39 | */ 40 | protected $package = ""; 41 | 42 | /** 43 | * package setup info 44 | * 45 | * @var array 46 | */ 47 | protected $packageSetup = array( 48 | "script" => array( 49 | "type" => "text/javascript", 50 | "src" => "//maps.google.com/maps/api/js?sensor=false" //QApikeyGoogleGraph::KEY, 51 | ) 52 | ); 53 | 54 | /** 55 | * holder for registered api methods 56 | * 57 | * @var array 58 | */ 59 | protected $configuration = array( 60 | "enableScrollWheel" => array("datatype" => "bool"), 61 | "showTip" => array("datatype" => "bool"), 62 | "showLine" => array("datatype" => "bool"), 63 | "lineColor" => array("datatype" => "string"), 64 | "lineWidth" => array("datatype" => "integer"), 65 | ); 66 | 67 | 68 | } 69 | -------------------------------------------------------------------------------- /include/qgooglevisualapi/QMotionchartGoogleGraph.class.php: -------------------------------------------------------------------------------- 1 | 600, "height" => 400); 26 | 27 | /** 28 | * holder for google api package name 29 | * 30 | * @var string 31 | */ 32 | protected $package = ""; 33 | 34 | /** 35 | * holder for default properties 36 | * 37 | * @var array 38 | */ 39 | protected $configuration = array( 40 | "width" => array("datatype" => "integer"), 41 | "height" => array("datatype" => "integer"), 42 | ); 43 | 44 | } 45 | -------------------------------------------------------------------------------- /include/qgooglevisualapi/QOrgchartGoogleGraph.class.php: -------------------------------------------------------------------------------- 1 | array( 39 | "values" => array("small", "medium", "large"), 40 | "datatype" => "string" 41 | ) 42 | ); 43 | 44 | } 45 | -------------------------------------------------------------------------------- /include/qgooglevisualapi/QPiechartGoogleGraph.class.php: -------------------------------------------------------------------------------- 1 | 400, "height" => 200, "legend" => "bottom"); 33 | 34 | /** 35 | * holder for default properties 36 | * 37 | * @var array 38 | */ 39 | protected $configuration = array( 40 | "axisColor" => array("datatype" => "string,object"), 41 | "axisBackgroundColor" => array("datatype" => "string,object"), 42 | "backgroundColor" => array("datatype" => "string,object"), 43 | "borderColor" => array("datatype" => "string,object"), 44 | "colors" => array("datatype" => "array"), 45 | "focusBorderColor" => array("datatype" => "string,object"), 46 | "height" => array("datatype" => "integer"), 47 | "legend" => array( 48 | "values" => array("right", "left", "top", "bottom", "none"), 49 | "datatype" => "string" 50 | ), 51 | "legendBackgroundColor" => array("datatype" => "string,object"), 52 | "legendTextColor" => array("datatype" => "string,object"), 53 | "lineSize" => array("datatype" => "integer"), 54 | "pointSize" => array("datatype" => "integer"), 55 | "reverseAxis" => array("datatype" => "bool"), 56 | "title" => array("datatype" => "string"), 57 | "titleX" => array("datatype" => "string"), 58 | "titleY" => array("datatype" => "string"), 59 | "titleColor" => array("datatype" => "string,object"), 60 | "width" => array("datatype" => "integer"), 61 | "smoothLine" => array("datatype" => "bool"), 62 | ); 63 | 64 | } 65 | -------------------------------------------------------------------------------- /include/qgooglevisualapi/QScatterchartGoogleGraph.class.php: -------------------------------------------------------------------------------- 1 | array("datatype" => "string,object"), 42 | "axisBackgroundColor" => array("datatype" => "string,object"), 43 | "backgroundColor" => array("datatype" => "string,object"), 44 | "borderColor" => array("datatype" => "string,object"), 45 | "colors" => array("datatype" => "array"), 46 | "focusBorderColor" => array("datatype" => "string,object"), 47 | "height" => array("datatype" => "integer"), 48 | "legend" => array( 49 | "values" => array("right", "left", "top", "bottom", "none"), 50 | "datatype" => "string" 51 | ), 52 | "legendBackgroundColor" => array("datatype" => "string,object"), 53 | "legendTextColor" => array("datatype" => "string,object"), 54 | "lineSize" => array("datatype" => "integer"), 55 | "pointSize" => array("datatype" => "integer"), 56 | "reverseAxis" => array("datatype" => "bool"), 57 | "title" => array("datatype" => "string"), 58 | "titleX" => array("datatype" => "string"), 59 | "titleY" => array("datatype" => "string"), 60 | "titleColor" => array("datatype" => "string,object"), 61 | "width" => array("datatype" => "integer"), 62 | 63 | ); 64 | 65 | } 66 | -------------------------------------------------------------------------------- /include/qgooglevisualapi/QTableGoogleGraph.class.php: -------------------------------------------------------------------------------- 1 | "true"); 26 | 27 | /** 28 | * holder for registered visualisation methods 29 | * 30 | * @var array 31 | */ 32 | protected $configuration = array( 33 | 34 | "allowHtml" => array("datatype" => "bool"), 35 | "page" => array( 36 | "string" => "string,object", 37 | "values" => array("enable", "event", "disable") 38 | ), 39 | "pageSize" => array("datatype" => "integer"), 40 | "sort" => array("datatype" => "integer"), 41 | "showRowNumber" => array( 42 | "string" => "string,object", 43 | "values" => array("enable", "event", "disable"), 44 | ) 45 | ); 46 | 47 | protected $methods = array( 48 | "draw" => array("data", "options"), 49 | "getSelection" => null, 50 | "setSelection" => array("selection") 51 | ); 52 | 53 | protected $events = array( 54 | "select" => null, 55 | "page" => array("number" => "integer"), 56 | "sort" => array("column" => "integer", "ascending" => "bool") 57 | 58 | ); 59 | 60 | } 61 | -------------------------------------------------------------------------------- /include/qgooglevisualapi/QWordcloudGoogleGraph.class.php: -------------------------------------------------------------------------------- 1 | 600, "height" => 400); 26 | 27 | /** 28 | * holder for google api package name 29 | * 30 | * @var string 31 | */ 32 | protected $package = ""; 33 | 34 | /** 35 | * holder for default properties 36 | * 37 | * @var array 38 | */ 39 | protected $configuration = array( 40 | "width" => array("datatype" => "integer"), 41 | "height" => array("datatype" => "integer"), 42 | ); 43 | 44 | /** 45 | * package setup info 46 | * 47 | * 48 | * @var array 49 | */ 50 | protected $packageSetup = array( 51 | "link" => 52 | array( 53 | "rel" => "stylesheet", 54 | "type" => "text/css", 55 | "href" => "//visapi-gadgets.googlecode.com/svn/trunk/wordcloud/wc.css" 56 | ), 57 | "script" => array( 58 | "type" => "text/javascript", 59 | "src" => "//visapi-gadgets.googlecode.com/svn/trunk/wordcloud/wc.js" 60 | ) 61 | ); 62 | 63 | /** 64 | * set for package setup script and css 65 | * @param array $array 66 | * @return self 67 | */ 68 | public function setPackageSetup($array) 69 | { 70 | $this->packageSetup = $array; 71 | return $this; 72 | } 73 | 74 | /** 75 | * custom append method 76 | * 77 | * @return self 78 | */ 79 | public function customAppend() 80 | { 81 | $this->putProperty("function", "var oc = document.getElementById('" . $this->getProperty("id") . "');"); 82 | $this->putProperty("function", "var vt = new " . $this->vizualisationType . "(oc);"); 83 | $this->putProperty("function", "vt.draw(data, null);"); 84 | } 85 | 86 | public function setValues($values = array()) 87 | { 88 | 89 | $this->putProperty("function", ""); 90 | $this->putProperty("function", "data.addRows(" . (count($values) / $this->columns) . ");"); 91 | 92 | foreach ($values as $value) { 93 | 94 | if (is_string($value[2])) { 95 | $value3 = "'" . $value[2] . "'"; 96 | } elseif (is_bool($value[2])) { 97 | $value3 = $value[2] ? "true" : "false"; 98 | } else { 99 | $value3 = $value[2]; 100 | } 101 | $this->putProperty("function", "data.setCell(" . $value[0] . "," . $value[1] . "," . $value3 . ");"); 102 | } 103 | return $this; 104 | } 105 | 106 | public function getReferenceLink() 107 | { 108 | $link = 'Goto Google Visualization Web API Gallery'; 109 | return $link; 110 | } 111 | 112 | } 113 | -------------------------------------------------------------------------------- /include/qgooglevisualapi/config.inc.php: -------------------------------------------------------------------------------- 1 | _TorBulkExitListWorking('https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=8.8.8.8')) { 10 | $exit_node_array = file('https://check.torproject.org/cgi-bin/TorBulkExitList.py?ip=8.8.8.8'); 11 | file_put_contents(DIR_ROOT . '/include/tor/tor_exit_node_list.txt', $exit_node_array); 12 | } else { 13 | $exit_node_array = file(DIR_ROOT . '/include/tor/tor_exit_node_list.txt'); 14 | } 15 | 16 | for ($i = 0; $i < 3; $i++) 17 | array_shift($exit_node_array); 18 | 19 | $this->exit_node_array = $exit_node_array; 20 | } 21 | 22 | public function isTorExitNode($ip) 23 | { 24 | return in_array($ip, $this->exit_node_array); 25 | } 26 | 27 | function _TorBulkExitListWorking($url) 28 | { 29 | $ch = curl_init($url); 30 | curl_setopt($ch, CURLOPT_NOBODY, true); 31 | curl_exec($ch); 32 | 33 | $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 34 | 35 | if ($code == 200) 36 | $status = true; 37 | else 38 | $status = false; 39 | 40 | curl_close($ch); 41 | return $status; 42 | } 43 | } 44 | 45 | ?> -------------------------------------------------------------------------------- /kippo-geo.php: -------------------------------------------------------------------------------- 1 | 4 | $page_title = "Geolocation Information | Fast Visualization for your Kippo Based SSH Honeypot"; 5 | 6 | # Used for nav menu 7 | $page_file = "kippo-geo.php"; 8 | 9 | require('include/header.php'); 10 | ?> 11 | 12 |
13 |
14 |
15 | 16 |

Geolocation information gathered from the top 10 IP addresses probing the system

17 |
18 | 19 | WARNING: ' . DIR_ROOT . '/generated-graphs/' . ' is not writeable. Images will not be generated.'; 26 | echo "

"; 27 | } 28 | 29 | require_once(DIR_ROOT . '/class/KippoGeo.class.php'); 30 | 31 | $kippoGeo = new KippoGeo(); 32 | 33 | //----------------------------------------------------------------------------------------------------------------- 34 | //KIPPO-GEO DATA 35 | //----------------------------------------------------------------------------------------------------------------- 36 | $kippoGeo->printKippoGeoData(); 37 | //----------------------------------------------------------------------------------------------------------------- 38 | //END 39 | //----------------------------------------------------------------------------------------------------------------- 40 | 41 | ?> 42 | 43 |
44 |
45 |
46 |
47 | 48 | 51 | -------------------------------------------------------------------------------- /kippo-ip.php: -------------------------------------------------------------------------------- 1 | 4 | $page_title = "Network | Fast Visualization for your Kippo Based SSH Honeypot"; 5 | 6 | # Used for nav menu 7 | $page_file = "kippo-ip.php"; 8 | 9 | # Custom head 10 | $page_head = ' 11 | 12 | 13 | 14 | '; 15 | 16 | require('include/header.php'); 17 | ?> 18 | 19 |
20 |
21 |
22 | 23 |

IP activity gathered from the honeypot system

24 |
25 | printOverallIpActivity(); 37 | //----------------------------------------------------------------------------------------------------------------- 38 | //END 39 | //----------------------------------------------------------------------------------------------------------------- 40 | 41 | ?> 42 | 43 |
44 |
45 |
46 |
47 |
48 | 49 | -------------------------------------------------------------------------------- /kippo-playlog.php: -------------------------------------------------------------------------------- 1 | 4 | $page_title = "Playlog Overview | Fast Visualization for your Kippo Based SSH Honeypot"; 5 | 6 | # Used for nav menu 7 | $page_file = "kippo-playlog.php"; 8 | 9 | # Custom head 10 | $page_head = ' 11 | 12 | 13 | 14 | 15 | 16 | 17 | '; 18 | 19 | require('include/header.php'); 20 | ?> 21 | 22 |
23 |
24 |
25 | 26 |

Replay input by attackers captured by the honeypot system

27 |
28 | printLogs(); 40 | //----------------------------------------------------------------------------------------------------------------- 41 | //END 42 | //----------------------------------------------------------------------------------------------------------------- 43 | ?> 44 | 45 |
46 |
47 |
48 |
49 | 50 | 53 | -------------------------------------------------------------------------------- /kippo-scanner.php: -------------------------------------------------------------------------------- 1 | urldecode('100000000'), 14 | 'fileurl' => urlencode($file_url), 15 | 'method' => urldecode('url'), 16 | ); 17 | 18 | $fields_string = ""; 19 | foreach ($fields as $key => $value) { 20 | $fields_string .= $key . '=' . $value . '&'; 21 | } 22 | rtrim($fields_string, '&'); 23 | 24 | $ch = curl_init($scanner_url); 25 | 26 | curl_setopt($ch, CURLOPT_URL, $scanner_url); 27 | curl_setopt($ch, CURLOPT_POST, count($fields)); 28 | curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); 29 | curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 30 | curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 31 | 32 | $result = curl_exec($ch); 33 | 34 | curl_close($ch); 35 | } 36 | 37 | if (isset($_GET['file_url'])) { 38 | $xss_clean = new xssClean(); 39 | $file_url = $xss_clean->clean_input($_GET['file_url']); 40 | scanFileUrl($file_url); 41 | } else { 42 | echo "Kippo-Graph virus scanning submission error. You need to supply a valid file URL."; 43 | } 44 | ?> -------------------------------------------------------------------------------- /robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: / -------------------------------------------------------------------------------- /scripts/BinFileReader.js: -------------------------------------------------------------------------------- 1 | /** 2 | * BinFileReader.js 3 | * You can find more about this function at 4 | * http://nagoon97.com/reading-binary-files-using-ajax/ 5 | * 6 | * Copyright (c) 2008 Andy G.P. Na 7 | * The source code is freely distributable under the terms of an MIT-style license. 8 | */ 9 | function BinFileReader(fileURL) { 10 | var _exception = {}; 11 | _exception.FileLoadFailed = 1; 12 | _exception.EOFReached = 2; 13 | 14 | var filePointer = 0; 15 | var fileSize = -1; 16 | var fileContents; 17 | 18 | this.getFileSize = function () { 19 | return fileSize; 20 | } 21 | 22 | this.getFilePointer = function () { 23 | return filePointer; 24 | } 25 | 26 | this.movePointerTo = function (iTo) { 27 | if (iTo < 0) filePointer = 0; 28 | else if (iTo > this.getFileSize()) throwException(_exception.EOFReached); 29 | else filePointer = iTo; 30 | 31 | return filePointer; 32 | }; 33 | 34 | this.movePointer = function (iDirection) { 35 | this.movePointerTo(filePointer + iDirection); 36 | 37 | return filePointer; 38 | }; 39 | 40 | this.readNumber = function (iNumBytes, iFrom) { 41 | iNumBytes = iNumBytes || 1; 42 | iFrom = iFrom || filePointer; 43 | 44 | this.movePointerTo(iFrom + iNumBytes); 45 | 46 | var result = 0; 47 | for (var i = iFrom + iNumBytes; i > iFrom; i--) { 48 | result = result * 256 + this.readByteAt(i - 1); 49 | } 50 | 51 | return result; 52 | }; 53 | 54 | this.readString = function (iNumChars, iFrom) { 55 | iNumChars = iNumChars || 1; 56 | iFrom = iFrom || filePointer; 57 | 58 | this.movePointerTo(iFrom); 59 | 60 | var result = ""; 61 | var tmpTo = iFrom + iNumChars; 62 | for (var i = iFrom; i < tmpTo; i++) { 63 | result += String.fromCharCode(this.readNumber(1)); 64 | } 65 | 66 | return result; 67 | }; 68 | 69 | this.readUnicodeString = function (iNumChars, iFrom) { 70 | iNumChars = iNumChars || 1; 71 | iFrom = iFrom || filePointer; 72 | 73 | this.movePointerTo(iFrom); 74 | 75 | var result = ""; 76 | var tmpTo = iFrom + iNumChars * 2; 77 | for (var i = iFrom; i < tmpTo; i += 2) { 78 | result += String.fromCharCode(this.readNumber(2)); 79 | } 80 | 81 | return result; 82 | }; 83 | 84 | function throwException(errorCode) { 85 | switch (errorCode) { 86 | case _exception.FileLoadFailed: 87 | throw new Error('Error: Filed to load "' + fileURL + '"'); 88 | break; 89 | case _exception.EOFReached: 90 | throw new Error("Error: EOF reached"); 91 | break; 92 | } 93 | } 94 | 95 | function BinFileReaderImpl(fileURL) { 96 | fileContents = atob(log); 97 | fileSize = fileContents.length; 98 | 99 | this.readByteAt = function (i) { 100 | return fileContents.charCodeAt(i) & 0xff; 101 | } 102 | } 103 | 104 | BinFileReaderImpl.apply(this, [fileURL]); 105 | } 106 | -------------------------------------------------------------------------------- /scripts/fancybox/blank.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/blank.gif -------------------------------------------------------------------------------- /scripts/fancybox/fancy_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancy_close.png -------------------------------------------------------------------------------- /scripts/fancybox/fancy_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancy_loading.png -------------------------------------------------------------------------------- /scripts/fancybox/fancy_nav_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancy_nav_left.png -------------------------------------------------------------------------------- /scripts/fancybox/fancy_nav_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancy_nav_right.png -------------------------------------------------------------------------------- /scripts/fancybox/fancy_shadow_e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancy_shadow_e.png -------------------------------------------------------------------------------- /scripts/fancybox/fancy_shadow_n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancy_shadow_n.png -------------------------------------------------------------------------------- /scripts/fancybox/fancy_shadow_ne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancy_shadow_ne.png -------------------------------------------------------------------------------- /scripts/fancybox/fancy_shadow_nw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancy_shadow_nw.png -------------------------------------------------------------------------------- /scripts/fancybox/fancy_shadow_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancy_shadow_s.png -------------------------------------------------------------------------------- /scripts/fancybox/fancy_shadow_se.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancy_shadow_se.png -------------------------------------------------------------------------------- /scripts/fancybox/fancy_shadow_sw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancy_shadow_sw.png -------------------------------------------------------------------------------- /scripts/fancybox/fancy_shadow_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancy_shadow_w.png -------------------------------------------------------------------------------- /scripts/fancybox/fancy_title_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancy_title_left.png -------------------------------------------------------------------------------- /scripts/fancybox/fancy_title_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancy_title_main.png -------------------------------------------------------------------------------- /scripts/fancybox/fancy_title_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancy_title_over.png -------------------------------------------------------------------------------- /scripts/fancybox/fancy_title_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancy_title_right.png -------------------------------------------------------------------------------- /scripts/fancybox/fancybox-x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancybox-x.png -------------------------------------------------------------------------------- /scripts/fancybox/fancybox-y.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancybox-y.png -------------------------------------------------------------------------------- /scripts/fancybox/fancybox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/fancybox.png -------------------------------------------------------------------------------- /scripts/fancybox/index.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/fancybox/index.php -------------------------------------------------------------------------------- /scripts/fancybox/jquery.fancybox-1.3.2.setup.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | $("a[rel=gallery_group]").fancybox({ 3 | 'transitionIn': 'elastic', 4 | 'transitionOut': 'elastic', 5 | 'titlePosition': 'outside', 6 | 'speedIn': 600, 7 | 'speedOut': 600, 8 | 'overlayShow': true, 9 | 'overlayColor': '#000', 10 | 'overlayOpacity': 0.9 11 | }); 12 | }); -------------------------------------------------------------------------------- /scripts/fancybox/jquery.mousewheel-3.0.4.pack.js: -------------------------------------------------------------------------------- 1 | /*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) 2 | * Licensed under the MIT License (LICENSE.txt). 3 | * 4 | * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. 5 | * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. 6 | * Thanks to: Seamus Leahy for adding deltaX and deltaY 7 | * 8 | * Version: 3.0.4 9 | * 10 | * Requires: 1.2.2+ 11 | */ 12 | 13 | (function (d) { 14 | function g(a) { 15 | var b = a || window.event, i = [].slice.call(arguments, 1), c = 0, h = 0, e = 0; 16 | a = d.event.fix(b); 17 | a.type = "mousewheel"; 18 | if (a.wheelDelta)c = a.wheelDelta / 120; 19 | if (a.detail)c = -a.detail / 3; 20 | e = c; 21 | if (b.axis !== undefined && b.axis === b.HORIZONTAL_AXIS) { 22 | e = 0; 23 | h = -1 * c 24 | } 25 | if (b.wheelDeltaY !== undefined)e = b.wheelDeltaY / 120; 26 | if (b.wheelDeltaX !== undefined)h = -1 * b.wheelDeltaX / 120; 27 | i.unshift(a, c, h, e); 28 | return d.event.handle.apply(this, i) 29 | } 30 | 31 | var f = ["DOMMouseScroll", "mousewheel"]; 32 | d.event.special.mousewheel = {setup: function () { 33 | if (this.addEventListener)for (var a = 34 | f.length; a;)this.addEventListener(f[--a], g, false); else this.onmousewheel = g 35 | }, teardown: function () { 36 | if (this.removeEventListener)for (var a = f.length; a;)this.removeEventListener(f[--a], g, false); else this.onmousewheel = null 37 | }}; 38 | d.fn.extend({mousewheel: function (a) { 39 | return a ? this.bind("mousewheel", a) : this.trigger("mousewheel") 40 | }, unmousewheel: function (a) { 41 | return this.unbind("mousewheel", a) 42 | }}) 43 | })(jQuery); -------------------------------------------------------------------------------- /scripts/hoverIntent.js: -------------------------------------------------------------------------------- 1 | (function ($) { 2 | /* hoverIntent by Brian Cherne */ 3 | $.fn.hoverIntent = function (f, g) { 4 | // default configuration options 5 | var cfg = { 6 | sensitivity: 7, 7 | interval: 100, 8 | timeout: 0 9 | }; 10 | // override configuration options with user supplied object 11 | cfg = $.extend(cfg, g ? { over: f, out: g } : f); 12 | 13 | // instantiate variables 14 | // cX, cY = current X and Y position of mouse, updated by mousemove event 15 | // pX, pY = previous X and Y position of mouse, set by mouseover and polling interval 16 | var cX, cY, pX, pY; 17 | 18 | // A private function for getting mouse position 19 | var track = function (ev) { 20 | cX = ev.pageX; 21 | cY = ev.pageY; 22 | }; 23 | 24 | // A private function for comparing current and previous mouse position 25 | var compare = function (ev, ob) { 26 | ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); 27 | // compare mouse positions to see if they've crossed the threshold 28 | if (( Math.abs(pX - cX) + Math.abs(pY - cY) ) < cfg.sensitivity) { 29 | $(ob).unbind("mousemove", track); 30 | // set hoverIntent state to true (so mouseOut can be called) 31 | ob.hoverIntent_s = 1; 32 | return cfg.over.apply(ob, [ev]); 33 | } else { 34 | // set previous coordinates for next time 35 | pX = cX; 36 | pY = cY; 37 | // use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs) 38 | ob.hoverIntent_t = setTimeout(function () { 39 | compare(ev, ob); 40 | }, cfg.interval); 41 | } 42 | }; 43 | 44 | // A private function for delaying the mouseOut function 45 | var delay = function (ev, ob) { 46 | ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); 47 | ob.hoverIntent_s = 0; 48 | return cfg.out.apply(ob, [ev]); 49 | }; 50 | 51 | // A private function for handling mouse 'hovering' 52 | var handleHover = function (e) { 53 | // next three lines copied from jQuery.hover, ignore children onMouseOver/onMouseOut 54 | var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget; 55 | while (p && p != this) { 56 | try { 57 | p = p.parentNode; 58 | } catch (e) { 59 | p = this; 60 | } 61 | } 62 | if (p == this) { 63 | return false; 64 | } 65 | 66 | // copy objects to be passed into t (required for event object to be passed in IE) 67 | var ev = jQuery.extend({}, e); 68 | var ob = this; 69 | 70 | // cancel hoverIntent timer if it exists 71 | if (ob.hoverIntent_t) { 72 | ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); 73 | } 74 | 75 | // else e.type == "onmouseover" 76 | if (e.type == "mouseover") { 77 | // set "previous" X and Y position based on initial entry point 78 | pX = ev.pageX; 79 | pY = ev.pageY; 80 | // update "current" X and Y position based on mousemove 81 | $(ob).bind("mousemove", track); 82 | // start polling interval (self-calling timeout) to compare mouse coordinates over time 83 | if (ob.hoverIntent_s != 1) { 84 | ob.hoverIntent_t = setTimeout(function () { 85 | compare(ev, ob); 86 | }, cfg.interval); 87 | } 88 | 89 | // else e.type == "onmouseout" 90 | } else { 91 | // unbind expensive mousemove event 92 | $(ob).unbind("mousemove", track); 93 | // if hoverIntent state is true, then call the mouseOut function after the specified delay 94 | if (ob.hoverIntent_s == 1) { 95 | ob.hoverIntent_t = setTimeout(function () { 96 | delay(ev, ob); 97 | }, cfg.timeout); 98 | } 99 | } 100 | }; 101 | 102 | // bind the function to the two event listeners 103 | return this.mouseover(handleHover).mouseout(handleHover); 104 | }; 105 | 106 | })(jQuery); -------------------------------------------------------------------------------- /scripts/index.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/scripts/index.php -------------------------------------------------------------------------------- /scripts/jquery.getUrlParam.js: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2006-2007 Mathias Bank (http://www.mathias-bank.de) 2 | * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 3 | * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. 4 | * 5 | * Version 2.1 6 | * 7 | * Thanks to 8 | * Hinnerk Ruemenapf - http://hinnerk.ruemenapf.de/ for bug reporting and fixing. 9 | * Tom Leonard for some improvements 10 | * 11 | */ 12 | jQuery.fn.extend({ 13 | /** 14 | * Returns get parameters. 15 | * 16 | * If the desired param does not exist, null will be returned 17 | * 18 | * To get the document params: 19 | * @example value = $(document).getUrlParam("paramName"); 20 | * 21 | * To get the params of a html-attribut (uses src attribute) 22 | * @example value = $('#imgLink').getUrlParam("paramName"); 23 | */ 24 | getUrlParam: function (strParamName) { 25 | strParamName = escape(unescape(strParamName)); 26 | 27 | var returnVal = new Array(); 28 | var qString = null; 29 | 30 | if ($(this).attr("nodeName") == "#document") { 31 | //document-handler 32 | 33 | if (window.location.search.search(strParamName) > -1) { 34 | 35 | qString = window.location.search.substr(1, window.location.search.length).split("&"); 36 | } 37 | 38 | } else if ($(this).attr("src") != "undefined") { 39 | 40 | var strHref = $(this).attr("src") 41 | if (strHref.indexOf("?") > -1) { 42 | var strQueryString = strHref.substr(strHref.indexOf("?") + 1); 43 | qString = strQueryString.split("&"); 44 | } 45 | } else if ($(this).attr("href") != "undefined") { 46 | 47 | var strHref = $(this).attr("href") 48 | if (strHref.indexOf("?") > -1) { 49 | var strQueryString = strHref.substr(strHref.indexOf("?") + 1); 50 | qString = strQueryString.split("&"); 51 | } 52 | } else { 53 | return null; 54 | } 55 | 56 | 57 | if (qString == null) return null; 58 | 59 | 60 | for (var i = 0; i < qString.length; i++) { 61 | if (escape(unescape(qString[i].split("=")[0])) == strParamName) { 62 | returnVal.push(qString[i].split("=")[1]); 63 | } 64 | 65 | } 66 | 67 | 68 | if (returnVal.length == 0) return null; 69 | else if (returnVal.length == 1) return returnVal[0]; 70 | else return returnVal; 71 | } 72 | }); 73 | -------------------------------------------------------------------------------- /scripts/kippo-ip.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | $("#Overall-IP-Activity") 3 | .tablesorter({sortList: [ 4 | [3, 1] 5 | ], widthFixed: true, widgets: ['zebra']}) 6 | .tablesorterPager({container: $("#pager1")}); 7 | }); 8 | function getIPinfo(ip) { 9 | $.ajax({ 10 | type: "POST", 11 | url: 'include/kippo-ip.ajax.php', 12 | data: 'ip=' + ip, 13 | complete: function (response) { 14 | $('#extended-ip-info').html(response.responseText); 15 | 16 | $("#IP-attemps") 17 | .tablesorter({widthFixed: true, widgets: ['zebra']}) 18 | .tablesorterPager({container: $("#pager2")}); 19 | 20 | $("#IP-commands") 21 | .tablesorter({widthFixed: true, widgets: ['zebra']}) 22 | .tablesorterPager({container: $("#pager3")}); 23 | 24 | }, 25 | error: function () { 26 | $('#output').html('Bummer: there was an error!'); 27 | } 28 | }); 29 | return false; 30 | } 31 | -------------------------------------------------------------------------------- /scripts/kippo-playlog.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | $("#Playlog-List") 3 | .tablesorter({sortList: [ 4 | [1, 1] 5 | ], widthFixed: true, widgets: ['zebra']}) 6 | .tablesorterPager({container: $("#pager1")}); 7 | }); 8 | -------------------------------------------------------------------------------- /scripts/superfish.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Superfish v1.4.8 - jQuery menu widget 3 | * Copyright (c) 2008 Joel Birch 4 | * 5 | * Dual licensed under the MIT and GPL licenses: 6 | * http://www.opensource.org/licenses/mit-license.php 7 | * http://www.gnu.org/licenses/gpl.html 8 | * 9 | * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt 10 | */ 11 | (function ($) { 12 | $.fn.superfish = function (op) { 13 | 14 | var sf = $.fn.superfish, 15 | c = sf.c, 16 | $arrow = $([' »'].join('')), 17 | over = function () { 18 | var $$ = $(this), menu = getMenu($$); 19 | clearTimeout(menu.sfTimer); 20 | $$.showSuperfishUl().siblings().hideSuperfishUl(); 21 | }, 22 | out = function () { 23 | var $$ = $(this), menu = getMenu($$), o = sf.op; 24 | clearTimeout(menu.sfTimer); 25 | menu.sfTimer = setTimeout(function () { 26 | o.retainPath = ($.inArray($$[0], o.$path) > -1); 27 | $$.hideSuperfishUl(); 28 | if (o.$path.length && $$.parents(['li.', o.hoverClass].join('')).length < 1) { 29 | over.call(o.$path); 30 | } 31 | }, o.delay); 32 | }, 33 | getMenu = function ($menu) { 34 | var menu = $menu.parents(['ul.', c.menuClass, ':first'].join(''))[0]; 35 | sf.op = sf.o[menu.serial]; 36 | return menu; 37 | }, 38 | addArrow = function ($a) { 39 | $a.addClass(c.anchorClass).append($arrow.clone()); 40 | }; 41 | 42 | return this.each(function () { 43 | var s = this.serial = sf.o.length; 44 | var o = $.extend({}, sf.defaults, op); 45 | o.$path = $('li.' + o.pathClass, this).slice(0, o.pathLevels).each(function () { 46 | $(this).addClass([o.hoverClass, c.bcClass].join(' ')) 47 | .filter('li:has(ul)').removeClass(o.pathClass); 48 | }); 49 | sf.o[s] = sf.op = o; 50 | 51 | $('li:has(ul)', this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over, out).each(function () { 52 | if (o.autoArrows) addArrow($('>a:first-child', this)); 53 | }) 54 | .not('.' + c.bcClass) 55 | .hideSuperfishUl(); 56 | 57 | var $a = $('a', this); 58 | $a.each(function (i) { 59 | var $li = $a.eq(i).parents('li'); 60 | $a.eq(i).focus(function () { 61 | over.call($li); 62 | }).blur(function () { 63 | out.call($li); 64 | }); 65 | }); 66 | o.onInit.call(this); 67 | 68 | }).each(function () { 69 | var menuClasses = [c.menuClass]; 70 | if (sf.op.dropShadows && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass); 71 | $(this).addClass(menuClasses.join(' ')); 72 | }); 73 | }; 74 | 75 | var sf = $.fn.superfish; 76 | sf.o = []; 77 | sf.op = {}; 78 | sf.IE7fix = function () { 79 | var o = sf.op; 80 | if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity != undefined) 81 | this.toggleClass(sf.c.shadowClass + '-off'); 82 | }; 83 | sf.c = { 84 | bcClass: 'sf-breadcrumb', 85 | menuClass: 'sf-js-enabled', 86 | anchorClass: 'sf-with-ul', 87 | arrowClass: 'sf-sub-indicator', 88 | shadowClass: 'sf-shadow' 89 | }; 90 | sf.defaults = { 91 | hoverClass: 'sfHover', 92 | pathClass: 'overideThisToUse', 93 | pathLevels: 1, 94 | delay: 800, 95 | animation: {opacity: 'show'}, 96 | speed: 'normal', 97 | autoArrows: true, 98 | dropShadows: true, 99 | disableHI: false, // true disables hoverIntent detection 100 | onInit: function () { 101 | }, // callback functions 102 | onBeforeShow: function () { 103 | }, 104 | onShow: function () { 105 | }, 106 | onHide: function () { 107 | } 108 | }; 109 | $.fn.extend({ 110 | hideSuperfishUl: function () { 111 | var o = sf.op, 112 | not = (o.retainPath === true) ? o.$path : ''; 113 | o.retainPath = false; 114 | var $ul = $(['li.', o.hoverClass].join(''), this).add(this).not(not).removeClass(o.hoverClass) 115 | .find('>ul').hide().css('visibility', 'hidden'); 116 | o.onHide.call($ul); 117 | return this; 118 | }, 119 | showSuperfishUl: function () { 120 | var o = sf.op, 121 | sh = sf.c.shadowClass + '-off', 122 | $ul = this.addClass(o.hoverClass) 123 | .find('>ul:hidden').css('visibility', 'visible'); 124 | sf.IE7fix.call($ul); 125 | o.onBeforeShow.call($ul); 126 | $ul.animate(o.animation, o.speed, function () { 127 | sf.IE7fix.call($ul); 128 | o.onShow.call($ul); 129 | }); 130 | return this; 131 | } 132 | }); 133 | 134 | })(jQuery); -------------------------------------------------------------------------------- /styles/forms.css: -------------------------------------------------------------------------------- 1 | /* 2 | Template Name: Realistic 3 | File: Forms CSS 4 | Author: OS Templates 5 | Author URI: http://www.os-templates.com/ 6 | Licence: Website Template Licence 7 | */ 8 | 9 | form, fieldset, legend { 10 | margin: 0; 11 | padding: 0; 12 | border: none; 13 | } 14 | 15 | legend { 16 | display: none; 17 | } 18 | 19 | input, textarea, select { 20 | font-size: 12px; 21 | font-family: Georgia, "Times New Roman", Times, serif; 22 | } 23 | 24 | /* ----------------------------------------------Search Form-------------------------------------*/ 25 | 26 | #topbar input { 27 | display: block; 28 | float: left; 29 | width: 155px; 30 | margin: 0 5px 0 0; 31 | padding: 5px; 32 | color: #565656; 33 | background-color: #EBEBEB; 34 | border: 1px solid #C3C3C3; 35 | font-size: 12px; 36 | } 37 | 38 | #topbar input#go { 39 | width: 68px; 40 | height: 26px; 41 | margin: 0; 42 | padding: 4px 0; 43 | text-transform: uppercase; 44 | color: #FFFFFF; 45 | background-color: #565656; 46 | border-color: #C3C3C3; 47 | cursor: pointer; 48 | font-weight: bold; 49 | } 50 | 51 | /* ----------------------------------------------Forms in Content Area-------------------------------------*/ 52 | 53 | .container #respond { 54 | display: block; 55 | width: 100%; 56 | } 57 | 58 | .container #respond input { 59 | width: 170px; 60 | padding: 2px; 61 | border: 1px solid #CCCCCC; 62 | margin: 5px 5px 0 0; 63 | } 64 | 65 | .container #respond textarea { 66 | width: 98%; 67 | border: 1px solid #CCCCCC; 68 | padding: 2px; 69 | overflow: auto; 70 | } 71 | 72 | .container #respond p { 73 | margin: 5px 0; 74 | } 75 | 76 | .container #respond #submit, .container #respond #reset { 77 | margin: 0; 78 | padding: 5px; 79 | color: #666666; 80 | background-color: #F7F7F7; 81 | border: 1px solid #CCCCCC; 82 | cursor: pointer; 83 | } -------------------------------------------------------------------------------- /styles/gallery.css: -------------------------------------------------------------------------------- 1 | /* 2 | Template Name: Realistic 3 | File: Gallery CSS 4 | Author: OS Templates 5 | Author URI: http://www.os-templates.com/ 6 | Licence: Website Template Licence 7 | */ 8 | 9 | #gallery { 10 | position: relative; 11 | margin: 0 auto 0; 12 | display: block; 13 | width: 900px; 14 | padding-bottom: 10px; 15 | } 16 | 17 | #gallery ul { 18 | margin: 0; 19 | padding: 0; 20 | list-style: none; 21 | } 22 | 23 | #gallery li { 24 | display: block; 25 | float: left; 26 | width: 280px; 27 | margin: 0 30px 20px 0; 28 | padding: 0; 29 | } 30 | 31 | #gallery li a img { 32 | display: block; 33 | width: 260px; 34 | height: 130px; 35 | margin: 0; 36 | padding: 0; 37 | border: 10px solid #E0E0E0; 38 | } 39 | 40 | #gallery li a:hover img { 41 | border-color: #B4B4B4; 42 | } 43 | 44 | #gallery li.last { 45 | margin-right: 0; 46 | } -------------------------------------------------------------------------------- /styles/homepage.css: -------------------------------------------------------------------------------- 1 | /* 2 | Template Name: Realistic 3 | File: Homepage CSS 4 | Author: OS Templates 5 | Author URI: http://www.os-templates.com/ 6 | Licence: Website Template Licence 7 | */ 8 | 9 | #hpage_services { 10 | } 11 | 12 | #hpage_services .block { 13 | display: inline; 14 | float: left; 15 | width: 280px; 16 | margin: 0 30px 0 0; 17 | padding: 0; 18 | } 19 | 20 | #hpage_services .last { 21 | margin-right: 0; 22 | } 23 | 24 | #hpage_services img { 25 | display: inline; 26 | float: left; 27 | } 28 | 29 | #hpage_services strong { 30 | float: left; 31 | margin: 8px 0 0 10px; 32 | padding: 0; 33 | font-size: 22px; 34 | font-weight: normal; 35 | color: #4A4A4A; 36 | background-color: #FFF; 37 | } 38 | 39 | #hpage_services p { 40 | display: block; 41 | margin: 0; 42 | padding: 10px 0 0 0; 43 | clear: both; 44 | line-height: 1.6em; 45 | } 46 | 47 | #hpage_services .spacer { 48 | clear: both; 49 | padding: 8px 0; 50 | line-height: normal; 51 | } 52 | 53 | /* ------Latest Homepage Projects-----*/ 54 | 55 | #hpage_latest { 56 | position: relative; 57 | margin: 0 auto 0; 58 | display: block; 59 | width: 960px; 60 | padding: 30px 0 0 0; 61 | } 62 | 63 | #hpage_latest img { 64 | display: inline; 65 | } 66 | 67 | #hpage_latest .imgholder { 68 | display: block; 69 | width: 260px; 70 | margin: 0; 71 | padding: 0 20px 22px 20px; 72 | background: url("../images/hpage_latest_shadow.gif") bottom left no-repeat; 73 | } 74 | 75 | #hpage_latest ul { 76 | margin: 0; 77 | padding: 0; 78 | list-style: none; 79 | } 80 | 81 | #hpage_latest li { 82 | display: block; 83 | float: left; 84 | width: 300px; 85 | margin: 0 30px 0 0; 86 | padding: 0; 87 | } 88 | 89 | #hpage_latest li.last { 90 | margin-right: 0; 91 | } 92 | 93 | #hpage_latest p { 94 | margin: 0; 95 | padding: 0 20px; 96 | } 97 | 98 | #hpage_latest p strong { 99 | display: block; 100 | margin-bottom: 10px; 101 | font-size: 22px; 102 | font-weight: normal; 103 | color: #4A4A4A; 104 | background-color: #E0E0E0; 105 | } -------------------------------------------------------------------------------- /styles/index.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ikoniaris/kippo-graph/da45bddc93f2d7e8e31dde6248035816804f4ff6/styles/index.php -------------------------------------------------------------------------------- /styles/playlog.css: -------------------------------------------------------------------------------- 1 | body { 2 | color: #787878; 3 | font-family: Georgia, serif; 4 | } 5 | 6 | a { 7 | color: #c77; 8 | text-decoration: none; 9 | } 10 | 11 | a:hover { 12 | text-decoration: none; 13 | } 14 | 15 | a:active { 16 | color: white 17 | } 18 | 19 | /* http://stackoverflow.com/questions/1255281/how-to-set-width-of-div-to-fit-constant-number-of-letters-in-monospace-font */ 20 | #playlog { 21 | border: 3px solid #541; 22 | font: 15px/1.2 Courier, monospace; 23 | width: 100%; /* 80 x 0.6 (the width/height ratio of Courier) */ 24 | height: 30em; /* 25 x 1.2 (line-height is 1.2) */ 25 | overflow: hidden; 26 | /*background-color: #021; */ 27 | background-color: black; 28 | color: #bbb; 29 | display: none; 30 | } 31 | 32 | .cursorChar { 33 | text-decoration: underline; 34 | } 35 | 36 | pre { 37 | background:#ccc; 38 | padding:3px; 39 | margin-top:6px; 40 | margin-bottom:6px; 41 | max-height:400px; 42 | font:15px/1.2 Courier, monospace; 43 | color:#000; 44 | line-height:16px; 45 | overflow:auto; 46 | } 47 | -------------------------------------------------------------------------------- /styles/portfolio.css: -------------------------------------------------------------------------------- 1 | /* 2 | Template Name: Realistic 3 | File: Portfolio CSS 4 | Author: OS Templates 5 | Author URI: http://www.os-templates.com/ 6 | Licence: Website Template Licence 7 | */ 8 | 9 | .portfolio { 10 | position: relative; 11 | display: block; 12 | margin: 0 auto 1px; 13 | padding: 10px 0; 14 | width: 100%; 15 | border-top: 1px solid #999999; 16 | border-bottom: 1px solid #999999; 17 | } 18 | 19 | .portfolio .readmore { 20 | display: block; 21 | text-align: right; 22 | } 23 | 24 | .portfolio .fl_left { 25 | display: block; 26 | float: left; 27 | width: 250px; /*350px;*/ 28 | margin: 40px 25px 0 0; 29 | line-height: 1.6em; 30 | } 31 | 32 | .portfolio .fl_right { 33 | display: block; 34 | float: left; /*right*/ 35 | width: 500px; 36 | } 37 | 38 | .portfolio .fl_right img { 39 | display: block; 40 | width: 600px; /*470px;*/ 41 | height: auto; 42 | margin: 20px 0 0 0; 43 | padding: 5px; 44 | border: 10px solid #E0E0E0; 45 | } -------------------------------------------------------------------------------- /styles/tables.css: -------------------------------------------------------------------------------- 1 | /* 2 | Template Name: Realistic 3 | File: Tables CSS 4 | Author: OS Templates 5 | Author URI: http://www.os-templates.com/ 6 | Licence: Website Template Licence 7 | */ 8 | 9 | table { 10 | width: 100%; 11 | border-collapse: collapse; 12 | table-layout: auto; 13 | vertical-align: top; 14 | margin-bottom: 15px; 15 | border: 1px solid #CCCCCC; 16 | } 17 | 18 | table thead th { 19 | color: #FFFFFF; 20 | background-color: #666666; 21 | border: 1px solid #CCCCCC; 22 | border-collapse: collapse; 23 | text-align: center; 24 | table-layout: auto; 25 | vertical-align: middle; 26 | } 27 | 28 | table tbody td { 29 | vertical-align: top; 30 | border-collapse: collapse; 31 | border-left: 1px solid #CCCCCC; 32 | border-right: 1px solid #CCCCCC; 33 | } 34 | 35 | table tbody td.icon { 36 | border-style: none; 37 | padding: 1px; 38 | } 39 | 40 | table td img.icon { 41 | float: left; 42 | height: 16px; 43 | width: 16px; 44 | } 45 | 46 | table thead th, table tbody td { 47 | padding: 4.5px; 48 | border-collapse: collapse; 49 | } 50 | 51 | table tbody tr.light { 52 | color: #666666; 53 | background-color: #F7F7F7; 54 | } 55 | 56 | table tbody tr.word-break { 57 | word-break: break-all; 58 | } 59 | 60 | table tbody tr.dark { 61 | color: #666666; 62 | background-color: #E8E8E8; 63 | } 64 | 65 | /* 66 | table{ width:100%; margin-bottom:15px; line-height:24px; } 67 | th{ border-top:3px solid #970205; padding:7px 10px; color:#fff; background-color:#CA0308; text-align:left; } 68 | td{ border-bottom:1px solid #f4f4f4; padding:10px; } 69 | */ 70 | -------------------------------------------------------------------------------- /styles/tablesorter.css: -------------------------------------------------------------------------------- 1 | /* pager wrapper, div */ 2 | .tablesorter-pager { 3 | padding: 5px; 4 | } 5 | 6 | /* pager wrapper, in thead/tfoot */ 7 | td.tablesorter-pager { 8 | background-color: #e6eeee; 9 | margin: 0; /* needed for bootstrap .pager gets a 18px bottom margin */ 10 | } 11 | 12 | /* pager navigation arrows */ 13 | .tablesorter-pager img { 14 | vertical-align: middle; 15 | margin-right: 2px; 16 | cursor: pointer; 17 | } 18 | 19 | /* pager output text */ 20 | .tablesorter-pager .pagedisplay { 21 | padding: 0 5px 0 5px; 22 | width: 50px; 23 | text-align: center; 24 | display: inline-flex; 25 | } 26 | 27 | /* pager element reset (needed for bootstrap) */ 28 | .tablesorter-pager select { 29 | margin: 0; 30 | padding: 0; 31 | } 32 | 33 | .pager form { 34 | display: inline-flex; 35 | margin-right: 20px; 36 | } 37 | 38 | #allActivityLink { 39 | position: relative; 40 | top: -5px; 41 | } 42 | 43 | /*** css used when "updateArrows" option is true ***/ 44 | /* the pager itself gets a disabled class when the number of rows is less than the size */ 45 | .tablesorter-pager.disabled { 46 | display: none; 47 | } 48 | 49 | /* hide or fade out pager arrows when the first or last row is visible */ 50 | .tablesorter-pager .disabled { 51 | /* visibility: hidden */ 52 | opacity: 0.5; 53 | filter: alpha(opacity=50); 54 | cursor: default; 55 | } 56 | 57 | table.tablesorter thead tr .header { 58 | background-image: url('../images/bg.gif'); 59 | background-repeat: no-repeat; 60 | background-position: right center; 61 | cursor: pointer; 62 | } 63 | 64 | table tbody tr:hover { 65 | background: #e8e8e8; 66 | cursor: pointer; 67 | } --------------------------------------------------------------------------------