Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthieu Aubry <mattab@users.noreply.github.com>2017-04-04 15:09:02 +0300
committerGitHub <noreply@github.com>2017-04-04 15:09:02 +0300
commitbc8222d451337185db343486319af6782b009148 (patch)
tree068d6b02899c989e269769a8d8109b55bfdd1298
parentce16414530ab7f3d6d7899376c3d1465c2cd403a (diff)
parente33674ec3acb5dc71411d84a0b388892eb182b09 (diff)
Merge pull request #11585 from piwik/3.x-dev3.0.3
Release Piwik 3.0.3
-rw-r--r--CHANGELOG.md4
-rw-r--r--LEGALNOTICE26
-rw-r--r--composer.json3
-rw-r--r--composer.lock75
-rw-r--r--core/API/DataTablePostProcessor.php6
-rw-r--r--core/DataAccess/Model.php3
-rw-r--r--core/DataTable/Filter/RemoveSubtables.php47
-rw-r--r--core/ExceptionHandler.php12
-rw-r--r--core/FrontController.php12
-rw-r--r--core/Intl/Locale.php2
-rw-r--r--core/Plugin/Report.php17
-rw-r--r--core/Version.php2
-rw-r--r--core/ViewDataTable/Config.php10
-rw-r--r--core/testMinimumPhpVersion.php2
-rw-r--r--lang/pl.json6
-rw-r--r--lang/pt-br.json16
-rw-r--r--lang/tr.json4
-rw-r--r--libs/README.md10
-rwxr-xr-xlibs/pChart/GPLv3.txt675
-rw-r--r--libs/pChart/change.log292
-rwxr-xr-xlibs/pChart/class/pData.class.php789
-rwxr-xr-xlibs/pChart/class/pDraw.class.php6226
-rwxr-xr-xlibs/pChart/class/pImage.class.php482
-rwxr-xr-xlibs/pChart/class/pPie.class.php1500
-rw-r--r--libs/pChart/readme.txt143
-rw-r--r--plugins/Contents/lang/tr.json2
-rw-r--r--plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml4
-rw-r--r--plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml4
-rw-r--r--plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml4
-rw-r--r--plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml4
-rw-r--r--plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml4
-rw-r--r--plugins/CoreAdminHome/CustomLogo.php2
-rw-r--r--plugins/CoreAdminHome/lang/de.json1
-rw-r--r--plugins/CoreAdminHome/lang/el.json1
-rw-r--r--plugins/CoreAdminHome/lang/en.json1
-rw-r--r--plugins/CoreAdminHome/lang/pt-br.json1
-rw-r--r--plugins/CoreAdminHome/lang/sq.json1
-rw-r--r--plugins/CoreAdminHome/lang/zh-tw.json1
-rw-r--r--plugins/CoreHome/DataTableRowAction/RowEvolution.php2
-rw-r--r--plugins/CoreHome/lang/pt-br.json2
-rw-r--r--plugins/CoreHome/lang/zh-tw.json2
-rw-r--r--plugins/CoreHome/stylesheets/dataTable/_dataTable.less1
-rw-r--r--plugins/CoreHome/templates/ReportRenderer/_htmlReportBody.twig4
-rw-r--r--plugins/CorePluginsAdmin/lang/de.json1
-rw-r--r--plugins/CorePluginsAdmin/lang/el.json1
-rw-r--r--plugins/CorePluginsAdmin/lang/fr.json1
-rw-r--r--plugins/CorePluginsAdmin/lang/sq.json1
-rw-r--r--plugins/CorePluginsAdmin/lang/zh-tw.json1
-rw-r--r--plugins/CoreUpdater/Test/Integration/UpdateCommunicationTest.php4
-rw-r--r--plugins/CoreUpdater/UpdateCommunication.php2
-rw-r--r--plugins/CoreUpdater/lang/el.json3
-rw-r--r--plugins/CoreUpdater/lang/en.json3
-rw-r--r--plugins/CoreUpdater/lang/fr.json3
-rw-r--r--plugins/CoreUpdater/lang/sq.json3
-rw-r--r--plugins/CoreUpdater/lang/zh-tw.json3
-rw-r--r--plugins/CoreUpdater/templates/layout.twig11
-rw-r--r--plugins/CoreVisualizations/javascripts/jqplot.js11
m---------plugins/CustomDimensions0
-rw-r--r--plugins/CustomPiwikJs/lang/el.json1
-rw-r--r--plugins/CustomPiwikJs/lang/fr.json1
-rw-r--r--plugins/CustomPiwikJs/lang/sq.json1
-rw-r--r--plugins/CustomPiwikJs/lang/zh-tw.json1
-rw-r--r--plugins/CustomVariables/tests/System/expected/test_CustomVariablesSystemTest__Live.getLastVisitsDetails_day.xml2
-rw-r--r--plugins/DevicesDetection/Archiver.php3
-rw-r--r--plugins/Goals/stylesheets/goals.css5
-rw-r--r--plugins/ImageGraph/API.php2
-rw-r--r--plugins/ImageGraph/StaticGraph.php20
-rw-r--r--plugins/ImageGraph/StaticGraph/Exception.php4
-rw-r--r--plugins/ImageGraph/StaticGraph/PieGraph.php10
-rw-r--r--plugins/Installation/Controller.php1
-rw-r--r--plugins/Installation/lang/el.json1
-rw-r--r--plugins/Installation/lang/fr.json1
-rw-r--r--plugins/Installation/lang/sq.json1
-rw-r--r--plugins/Installation/lang/zh-tw.json1
-rw-r--r--plugins/Live/javascripts/visitorLog.js2
-rw-r--r--plugins/Live/stylesheets/live.less5
-rw-r--r--plugins/Live/stylesheets/visitor_profile.less4
-rw-r--r--plugins/Live/templates/_dataTableViz_visitorLog.twig4
-rw-r--r--plugins/Live/templates/getLastVisitsStart.twig2
-rw-r--r--plugins/Live/templates/getVisitorProfilePopup.twig4
-rw-r--r--plugins/Live/tests/System/expected/test___Live.getVisitorProfile.xml24
-rw-r--r--plugins/Live/tests/System/expected/test_higherLimit__Live.getVisitorProfile.xml44
-rw-r--r--plugins/Marketplace/lang/el.json1
-rw-r--r--plugins/Marketplace/lang/fr.json1
-rw-r--r--plugins/Marketplace/lang/sq.json1
-rw-r--r--plugins/Marketplace/lang/zh-tw.json1
m---------plugins/Morpheus/icons0
-rw-r--r--plugins/Morpheus/stylesheets/simple_structure.css4
-rw-r--r--plugins/Morpheus/stylesheets/ui/_popups.less1
-rw-r--r--plugins/Morpheus/templates/simpleLayoutHeader.tpl2
-rw-r--r--plugins/Referrers/Reports/GetReferrerType.php1
-rw-r--r--plugins/SitesManager/lang/cs.json2
-rw-r--r--plugins/SitesManager/lang/de.json5
-rw-r--r--plugins/SitesManager/lang/el.json8
-rw-r--r--plugins/SitesManager/lang/en.json8
-rw-r--r--plugins/SitesManager/lang/es.json2
-rw-r--r--plugins/SitesManager/lang/fr.json3
-rw-r--r--plugins/SitesManager/lang/it.json2
-rw-r--r--plugins/SitesManager/lang/ja.json2
-rw-r--r--plugins/SitesManager/lang/ko.json2
-rw-r--r--plugins/SitesManager/lang/nb.json2
-rw-r--r--plugins/SitesManager/lang/nl.json2
-rw-r--r--plugins/SitesManager/lang/pt-br.json2
-rw-r--r--plugins/SitesManager/lang/sq.json8
-rw-r--r--plugins/SitesManager/lang/sr.json2
-rw-r--r--plugins/SitesManager/lang/sv.json2
-rw-r--r--plugins/SitesManager/lang/uk.json2
-rw-r--r--plugins/SitesManager/lang/zh-tw.json8
-rw-r--r--plugins/SitesManager/stylesheets/SitesManager.less4
-rw-r--r--plugins/SitesManager/templates/_displayJavascriptCode.twig16
-rw-r--r--plugins/SitesManager/templates/siteWithoutData.twig5
-rw-r--r--plugins/UserCountry/API.php3
-rw-r--r--plugins/UserCountry/functions.php2
-rw-r--r--plugins/UserCountry/images/flags/a1.pngbin290 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/a2.pngbin290 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ac.pngbin545 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ad.pngbin454 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ae.pngbin277 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/af.pngbin420 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ag.pngbin456 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ai.pngbin516 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/al.pngbin434 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/am.pngbin332 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/an.pngbin365 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ao.pngbin395 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ap.pngbin290 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/aq.pngbin376 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ar.pngbin367 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/as.pngbin540 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/at.pngbin290 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/au.pngbin580 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/aw.pngbin393 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ax.pngbin480 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/az.pngbin423 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ba.pngbin471 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bb.pngbin403 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bd.pngbin372 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/be.pngbin294 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bf.pngbin341 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bg.pngbin320 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bh.pngbin345 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bi.pngbin566 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bj.pngbin311 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bl.pngbin369 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bm.pngbin499 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bn.pngbin502 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bo.pngbin341 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bq.pngbin310 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/br.pngbin486 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bs.pngbin391 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bt.pngbin471 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bu.pngbin464 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bv.pngbin397 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bw.pngbin327 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/by.pngbin382 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/bz.pngbin476 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ca.pngbin471 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cat.pngbin353 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cc.pngbin496 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cd.pngbin477 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cf.pngbin456 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cg.pngbin380 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ch.pngbin354 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ci.pngbin306 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ck.pngbin495 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cl.pngbin324 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cm.pngbin347 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cn.pngbin349 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/co.pngbin330 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cp.pngbin369 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cr.pngbin349 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cs.pngbin321 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cu.pngbin445 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cv.pngbin441 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cw.pngbin308 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cx.pngbin498 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cy.pngbin337 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/cz.pngbin367 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/de.pngbin364 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/dg.pngbin658 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/dj.pngbin430 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/dk.pngbin352 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/dm.pngbin508 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/do.pngbin368 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/dz.pngbin454 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ea.pngbin344 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ec.pngbin355 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ee.pngbin297 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/eg.pngbin348 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/eh.pngbin388 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/er.pngbin497 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/es.pngbin344 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/et.pngbin445 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/eu.pngbin418 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/fi.pngbin368 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/fj.pngbin517 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/fk.pngbin526 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/fm.pngbin409 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/fo.pngbin377 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/fr.pngbin369 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/fx.pngbin369 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ga.pngbin342 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gb.pngbin545 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gd.pngbin461 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ge.pngbin493 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gf.pngbin390 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gg.pngbin524 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gh.pngbin336 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gi.pngbin369 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gl.pngbin351 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gm.pngbin363 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gn.pngbin319 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gp.pngbin353 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gq.pngbin405 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gr.pngbin391 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gs.pngbin522 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gt.pngbin333 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gu.pngbin384 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gw.pngbin346 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/gy.pngbin521 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/hk.pngbin393 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/hm.pngbin580 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/hn.pngbin411 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/hr.pngbin386 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ht.pngbin327 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/hu.pngbin293 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ic.pngbin378 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/id.pngbin301 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ie.pngbin333 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/il.pngbin326 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/im.pngbin320 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/in.pngbin377 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/io.pngbin575 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/iq.pngbin403 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ir.pngbin398 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/is.pngbin410 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/it.pngbin283 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/je.pngbin475 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/jm.pngbin508 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/jo.pngbin353 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/jp.pngbin307 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ke.pngbin435 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/kg.pngbin354 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/kh.pngbin422 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ki.pngbin551 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/km.pngbin456 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/kn.pngbin480 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/kp.pngbin424 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/kr.pngbin507 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/kw.pngbin351 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ky.pngbin532 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/kz.pngbin459 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/la.pngbin415 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/lb.pngbin393 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/lc.pngbin462 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/li.pngbin399 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/lk.pngbin464 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/lr.pngbin365 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ls.pngbin361 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/lt.pngbin345 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/lu.pngbin338 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/lv.pngbin339 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ly.pngbin353 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ma.pngbin293 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mc.pngbin254 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/md.pngbin404 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/me.pngbin394 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mf.pngbin369 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mg.pngbin313 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mh.pngbin518 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mk.pngbin449 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ml.pngbin322 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mm.pngbin464 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mn.pngbin343 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mo.pngbin456 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mp.pngbin481 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mq.pngbin541 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mr.pngbin408 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ms.pngbin497 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mt.pngbin296 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mu.pngbin360 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mv.pngbin391 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mw.pngbin365 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mx.pngbin424 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/my.pngbin464 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/mz.pngbin439 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/na.pngbin559 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/nc.pngbin470 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ne.pngbin393 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/nf.pngbin474 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ng.pngbin341 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ni.pngbin372 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/nl.pngbin310 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/no.pngbin397 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/np.pngbin423 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/nr.pngbin391 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/nt.pngbin198 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/nu.pngbin468 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/nz.pngbin529 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/o1.pngbin290 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/om.pngbin339 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/pa.pngbin390 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/pe.pngbin264 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/pf.pngbin379 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/pg.pngbin438 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ph.pngbin416 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/pk.pngbin448 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/pl.pngbin243 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/pm.pngbin572 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/pn.pngbin547 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/pr.pngbin445 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ps.pngbin348 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/pt.pngbin407 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/pw.pngbin424 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/py.pngbin344 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/qa.pngbin343 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/re.pngbin369 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ro.pngbin333 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/rs.pngbin376 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ru.pngbin299 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/rw.pngbin382 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sa.pngbin428 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sb.pngbin520 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sc.pngbin481 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sd.pngbin364 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/se.pngbin389 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sf.pngbin368 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sg.pngbin350 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sh.pngbin524 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/si.pngbin383 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sj.pngbin397 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sk.pngbin439 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sl.pngbin321 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sm.pngbin396 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sn.pngbin356 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/so.pngbin376 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sr.pngbin370 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ss.pngbin422 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/st.pngbin429 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/su.pngbin273 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sv.pngbin373 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sx.pngbin416 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sy.pngbin322 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/sz.pngbin508 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ta.pngbin512 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/tc.pngbin509 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/td.pngbin378 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/tf.pngbin399 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/tg.pngbin410 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/th.pngbin327 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ti.pngbin811 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/tj.pngbin367 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/tk.pngbin379 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/tl.pngbin395 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/tm.pngbin456 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/tn.pngbin367 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/to.pngbin302 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/tp.pngbin395 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/tr.pngbin366 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/tt.pngbin486 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/tv.pngbin443 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/tw.pngbin330 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/tz.pngbin514 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ua.pngbin304 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ug.pngbin388 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/uk.pngbin545 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/um.pngbin455 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/us.pngbin492 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/uy.pngbin411 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/uz.pngbin411 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/va.pngbin419 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/vc.pngbin412 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ve.pngbin412 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/vg.pngbin510 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/vi.pngbin523 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/vn.pngbin324 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/vu.pngbin450 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/wf.pngbin438 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ws.pngbin352 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/xx.pngbin290 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/ye.pngbin302 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/yt.pngbin456 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/yu.pngbin321 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/za.pngbin523 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/zm.pngbin359 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/zr.pngbin380 -> 0 bytes
-rw-r--r--plugins/UserCountry/images/flags/zw.pngbin462 -> 0 bytes
-rwxr-xr-xplugins/UserCountry/stylesheets/userCountry.less7
-rw-r--r--plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCity_month.xml10
-rw-r--r--plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCountry_month.xml35
-rw-r--r--plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getRegion_month.xml10
-rw-r--r--plugins/UserCountry/tests/Unit/UserCountryTest.php2
-rw-r--r--plugins/UserCountryMap/javascripts/realtime-map.js4
-rw-r--r--plugins/UserId/Reports/GetUsers.php12
-rw-r--r--tests/PHPUnit/Integration/ArchiveTest.php64
-rw-r--r--tests/PHPUnit/System/BackwardsCompatibility1XTest.php3
-rw-r--r--tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_day.xml54
-rw-r--r--tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml60
-rw-r--r--tests/PHPUnit/System/expected/test_AutoSuggestAPITest__Live.getLastVisitsDetails_range.xml70
-rw-r--r--tests/PHPUnit/System/expected/test_BackwardsCompatibility1XTest__UserCountry.getCountry_day.xml30
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml60
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml60
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml312
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__UserCountry.getCity_month.xml10
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__UserCountry.getCountry_month.xml35
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__UserCountry.getRegion_month.xml10
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml90
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml18
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml18
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortAsc__Live.getLastVisitsDetails_month.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisitAsc__Live.getLastVisitsDetails_month.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml42
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByVisitCount__Live.getLastVisitsDetails_month.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml42
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml60
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCity_month.xml24
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCountry_month.xml50
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getRegion_month.xml20
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_getCountry_with_filter_excludelowpop__UserCountry.getCountry_month.xml10
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getCity_month.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getCountry_month.xml5
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getRegion_month.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_continent__UserCountry.getCountry_month.xml25
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getCity_month.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getCountry_month.xml5
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getRegion_month.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getCity_month.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getCountry_month.xml5
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getRegion_month.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getCity_day.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getCountry_day.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getRegion_day.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml12
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__UserCountry.getCity_day.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__UserCountry.getCountry_day.xml5
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__UserCountry.getRegion_day.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml12
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml18
-rw-r--r--tests/PHPUnit/System/expected/test_TimezonesTest__Live.getLastVisitsDetails_day.xml6
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html60
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html54
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdfbin552121 -> 552243 bytes
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getProcessedReport_day.xml5
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata_showRawMetrics__API.getProcessedReport_day.xml5
-rw-r--r--tests/PHPUnit/System/expected/test_csvExport__Live.getLastVisitsDetails_day.csvbin8472 -> 8478 bytes
-rwxr-xr-xtests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml4
-rwxr-xr-xtests/PHPUnit/System/expected/test_ecommerceOrderWithItems__API.getProcessedReport_day.xml10
-rwxr-xr-xtests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml6
-rwxr-xr-xtests/PHPUnit/System/expected/test_ecommerceOrderWithItems__UserCountry.getCity_day.xml2
-rwxr-xr-xtests/PHPUnit/System/expected/test_ecommerceOrderWithItems__UserCountry.getCountry_day.xml10
-rwxr-xr-xtests/PHPUnit/System/expected/test_ecommerceOrderWithItems__UserCountry.getRegion_day.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html46
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html40
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdfbin569258 -> 569333 bytes
-rw-r--r--tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__UserCountry.getCountry_range.xml5
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__API.getProcessedReport_range.xml5
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml18
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml18
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__API.getProcessedReport_range.xml5
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml18
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml18
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getCity_day.xml6
-rw-r--r--tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getRegion_day.xml6
-rw-r--r--tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getReferrerType_day.xml62
-rw-r--r--tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getCity_day.xml6
-rw-r--r--tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getRegion_day.xml6
-rw-r--r--tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserCountry.getCity_day.xml6
-rw-r--r--tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserCountry.getRegion_day.xml6
-rw-r--r--tests/UI/expected-screenshots/ActionsDataTable_segmented_visitor_log.png4
-rw-r--r--tests/UI/expected-screenshots/CoreUpdaterCode_httpUpdateSuccess.png4
-rw-r--r--tests/UI/expected-screenshots/CoreUpdaterCode_httpsUpdateFail.png4
-rw-r--r--tests/UI/expected-screenshots/CoreUpdaterCode_newVersion.png4
-rw-r--r--tests/UI/expected-screenshots/CoreUpdaterDb_main.png4
-rw-r--r--tests/UI/expected-screenshots/CoreUpdaterDb_updated.png4
-rw-r--r--tests/UI/expected-screenshots/EmptySite_emptySiteDashboard.png4
-rw-r--r--tests/UI/expected-screenshots/Installation_js_tracking.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_db_connect_error.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal_updated.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_metric_tooltip.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_visitors_locations_provider.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_visitors_with_site_search_visitorlog.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_widgetize_apidisallowed.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png4
493 files changed, 1395 insertions, 11236 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7a0c7a7ba4..11bcfef2c6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,10 +8,14 @@ The Product Changelog at **[piwik.org/changelog](http://piwik.org/changelog)** l
### Breaking Changes
* New config setting `enable_plugin_upload` lets you enable uploading and installing a Piwik plugin ZIP file by a Super User. This used to be enabled by default, but it is now disabled by default now for security reasons.
+* New Report class property `Report::$supportsFlatten` lets you define if a report supports flattening (defaults to `true`). If set to `false` it will also set `ViewDataTable\Config::$show_flatten_table` to `false`
### New APIs
* A new event `Controller.triggerAdminNotifications` has been added to let plugins know when they are supposed to trigger notifications in the admin.
+### Library updates
+* pChart library has been removed in favor of [CpChart](https://github.com/szymach/c-pchart), a pChart fork with composer support and PSR standards.
+
## Piwik 3.0.2
### New Features
diff --git a/LEGALNOTICE b/LEGALNOTICE
index d4b1e6d51b..85bb53e12c 100644
--- a/LEGALNOTICE
+++ b/LEGALNOTICE
@@ -245,6 +245,12 @@ THIRD-PARTY CONTENT
Notes:
- used in Piwik's ExampleUI plugin
+ Name: flag-icon-css - Lipis
+ Link: https://github.com/lipis/flag-icon-css
+ License: MIT (Expat)
+ Notes:
+ - used for flag PNGs
+
Name: Wine project - tahoma.ttf font
Link: http://source.winehq.org/git/wine.git/blob_plain/HEAD:/fonts/tahoma.ttf
License: LGPL v2.1
@@ -259,18 +265,18 @@ THIRD-PARTY CONTENT
Link: https://www.iconfinder.com/icons/216429/thumbs_up_icon
License: Creative Commons (Attribution-Share Alike 3.0 Unported)
- Name: plugins/Insights/images/idea.png
- Link: https://www.iconfinder.com/icons/6074/brainstorm_bulb_idea_jabber_light_icon
- License: GPL
- By: Alessandro Rei - http://www.kde-look.org/usermanager/search.php?username=mentalrey
+ Name: plugins/Insights/images/idea.png
+ Link: https://www.iconfinder.com/icons/6074/brainstorm_bulb_idea_jabber_light_icon
+ License: GPL
+ By: Alessandro Rei - http://www.kde-look.org/usermanager/search.php?username=mentalrey
- Name: Material icons ("icon-info2" "icon-outline" "icon-settings", "icon-form") in plugins/Morpheus/fonts
- Link: https://design.google.com/icons/
- License: Apache License Version 2.0
+ Name: Material icons ("icon-info2" "icon-outline" "icon-settings", "icon-form") in plugins/Morpheus/fonts
+ Link: https://design.google.com/icons/
+ License: Apache License Version 2.0
- Name: IcoMoon - Free icons ("icon-funnel", "icon-lab", "icon-archive") in plugins/Morpheus/fonts
- Link: https://icomoon.io/#icons-icomoon
- License: GPL
+ Name: IcoMoon - Free icons ("icon-funnel", "icon-lab", "icon-archive") in plugins/Morpheus/fonts
+ Link: https://icomoon.io/#icons-icomoon
+ License: GPL
Notes:
- the "New BSD" license refers to either the "Modified BSD" and "Simplified BSD"
diff --git a/composer.json b/composer.json
index ef6b953aaf..976fc09874 100644
--- a/composer.json
+++ b/composer.json
@@ -45,7 +45,8 @@
"piwik/searchengine-and-social-list": "~1.0",
"tecnickcom/tcpdf": "~6.0",
"piwik/piwik-php-tracker": "^1.0",
- "composer/semver": "~1.3.0"
+ "composer/semver": "~1.3.0",
+ "szymach/c-pchart": "^2.0"
},
"require-dev": {
"aws/aws-sdk-php": "2.7.1",
diff --git a/composer.lock b/composer.lock
index 81891faa81..d17e00a4f0 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,8 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "hash": "db7672f3c64f1dbbd65edc6fd119e414",
- "content-hash": "126d7da5eef61ae7f0764a2cfdf2c068",
+ "hash": "28cc5fd9b5400da4b1e2d40969c2511d",
+ "content-hash": "39dbe45e9a9ada455d5b38be7e6f5fad",
"packages": [
{
"name": "composer/semver",
@@ -15,7 +15,7 @@
"url": "https://github.com/composer/semver.git",
"reference": "df4463baa9f44fe6cf0a6da4fde2934d4c0a2747"
},
- "dist": {
+ "dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/semver/zipball/df4463baa9f44fe6cf0a6da4fde2934d4c0a2747",
"reference": "df4463baa9f44fe6cf0a6da4fde2934d4c0a2747",
@@ -1191,6 +1191,73 @@
"time": "2015-06-25 11:21:15"
},
{
+ "name": "szymach/c-pchart",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/szymach/c-pchart.git",
+ "reference": "ed1a876c907c0610eae72592e563e1792e2d455a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/szymach/c-pchart/zipball/ed1a876c907c0610eae72592e563e1792e2d455a",
+ "reference": "ed1a876c907c0610eae72592e563e1792e2d455a",
+ "shasum": ""
+ },
+ "require": {
+ "ext-gd": "*",
+ "php": ">=5.4"
+ },
+ "require-dev": {
+ "behat/behat": "^3.3",
+ "behat/mink": "^1.7",
+ "behat/mink-goutte-driver": "^1.2",
+ "bossa/phpspec2-expect": "^1.0",
+ "sensiolabs/behat-page-object-extension": "^2.0",
+ "squizlabs/php_codesniffer": "^2.8"
+ },
+ "type": "project",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "CpChart\\": "src/"
+ },
+ "files": [
+ "src/Resources/data/constants.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-3.0"
+ ],
+ "authors": [
+ {
+ "name": "Jean-Damien Pogolotti",
+ "homepage": "http://www.pchart.net",
+ "role": "Creator of the original pChart library"
+ },
+ {
+ "name": "Piotr Szymaszek",
+ "homepage": "https://github.com/szymach",
+ "role": "Developer of the CpChart wrapper package"
+ }
+ ],
+ "description": "Port of \"pChart\" library into PHP 5",
+ "homepage": "https://github.com/szymach/c-pchart",
+ "keywords": [
+ "CpChart",
+ "c-pChart",
+ "charts",
+ "pchart",
+ "statistics"
+ ],
+ "time": "2017-03-08 22:32:31"
+ },
+ {
"name": "tecnickcom/tcpdf",
"version": "6.2.12",
"source": {
@@ -1502,7 +1569,7 @@
"description": "XHProf: A Hierarchical Profiler for PHP",
"homepage": "http://pecl.php.net/package/xhprof",
"keywords": [
- "performance",
+ "performance",
"profiling"
],
"time": "2015-02-26 14:37:51"
diff --git a/core/API/DataTablePostProcessor.php b/core/API/DataTablePostProcessor.php
index c2fdd1569c..c4eb7441d0 100644
--- a/core/API/DataTablePostProcessor.php
+++ b/core/API/DataTablePostProcessor.php
@@ -170,6 +170,12 @@ class DataTablePostProcessor
public function applyFlattener($dataTable)
{
if (Common::getRequestVar('flat', '0', 'string', $this->request) == '1') {
+ // skip flattening if not supported by report and remove subtables only
+ if ($this->report && !$this->report->supportsFlatten()) {
+ $dataTable->filter('RemoveSubtables');
+ return $dataTable;
+ }
+
$flattener = new Flattener($this->apiModule, $this->apiMethod, $this->request);
if (Common::getRequestVar('include_aggregate_rows', '0', 'string', $this->request) == '1') {
$flattener->includeAggregateRows();
diff --git a/core/DataAccess/Model.php b/core/DataAccess/Model.php
index ba04962ff4..d5da1e33ed 100644
--- a/core/DataAccess/Model.php
+++ b/core/DataAccess/Model.php
@@ -304,11 +304,12 @@ class Model
{
// duplicate idarchives are Ignored, see https://github.com/piwik/piwik/issues/987
$query = "INSERT IGNORE INTO " . $tableName . " (" . implode(", ", $fields) . ")
- VALUES (?,?,?,?,?,?,?,?)";
+ VALUES (?,?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE " . end($fields) . " = ?";
$bindSql = $record;
$bindSql[] = $name;
$bindSql[] = $value;
+ $bindSql[] = $value;
Db::query($query, $bindSql);
diff --git a/core/DataTable/Filter/RemoveSubtables.php b/core/DataTable/Filter/RemoveSubtables.php
new file mode 100644
index 0000000000..e84244119c
--- /dev/null
+++ b/core/DataTable/Filter/RemoveSubtables.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\BaseFilter;
+
+/**
+ * Delete all existing subtables from rows.
+ *
+ * **Basic example usage**
+ *
+ * $dataTable->filter('RemoveSubtables');
+ *
+ * @api
+ */
+class RemoveSubtables extends BaseFilter
+{
+ /**
+ * Constructor.
+ *
+ * @param DataTable $table The DataTable that will be filtered eventually.
+ */
+ public function __construct($table)
+ {
+ parent::__construct($table);
+ }
+
+ /**
+ * See {@link Limit}.
+ *
+ * @param DataTable $table
+ */
+ public function filter($table)
+ {
+ $rows = $table->getRows();
+ foreach ($rows as $row) {
+ $row->removeSubtable();
+ }
+ }
+}
diff --git a/core/ExceptionHandler.php b/core/ExceptionHandler.php
index f636b3b05d..a6e2c075e4 100644
--- a/core/ExceptionHandler.php
+++ b/core/ExceptionHandler.php
@@ -93,12 +93,16 @@ class ExceptionHandler
$message = Common::sanitizeInputValue($message);
}
- $logo = new CustomLogo();
- $logoHeaderUrl = false;
- $logoFaviconUrl = false;
+ $logoHeaderUrl = 'plugins/Morpheus/images/logo.svg';
+ $logoFaviconUrl = 'plugins/CoreHome/images/favicon.png';
try {
- $logoHeaderUrl = $logo->getHeaderLogoUrl();
+ $logo = new CustomLogo();
+ if ($logo->hasSVGLogo()) {
+ $logoHeaderUrl = $logo->getSVGLogoUrl();
+ } else {
+ $logoHeaderUrl = $logo->getHeaderLogoUrl();
+ }
$logoFaviconUrl = $logo->getPathUserFavicon();
} catch (Exception $ex) {
try {
diff --git a/core/FrontController.php b/core/FrontController.php
index c08ad5a6c2..3612215c11 100644
--- a/core/FrontController.php
+++ b/core/FrontController.php
@@ -433,16 +433,18 @@ class FrontController extends Singleton
}
Common::sendResponseCode(503);
- $logoUrl = null;
- $faviconUrl = null;
+ $logoUrl = 'plugins/Morpheus/images/logo.svg';
+ $faviconUrl = 'plugins/CoreHome/images/favicon.png';
try {
$logo = new CustomLogo();
- $logoUrl = $logo->getHeaderLogoUrl();
+ if ($logo->hasSVGLogo()) {
+ $logoUrl = $logo->getSVGLogoUrl();
+ } else {
+ $logoUrl = $logo->getHeaderLogoUrl();
+ }
$faviconUrl = $logo->getPathUserFavicon();
} catch (Exception $ex) {
}
- $logoUrl = $logoUrl ?: 'plugins/Morpheus/images/logo-header.png';
- $faviconUrl = $faviconUrl ?: 'plugins/CoreHome/images/favicon.png';
$page = file_get_contents(PIWIK_INCLUDE_PATH . '/plugins/Morpheus/templates/maintenance.tpl');
$page = str_replace('%logoUrl%', $logoUrl, $page);
diff --git a/core/Intl/Locale.php b/core/Intl/Locale.php
index 05cf51a8e3..684861237e 100644
--- a/core/Intl/Locale.php
+++ b/core/Intl/Locale.php
@@ -32,7 +32,7 @@ class Locale
setlocale(LC_ALL, $newLocale);
setlocale(LC_CTYPE, '');
// Always use english for numbers. otherwise the decimal separator might get localized when casting a float to string
- setlocale(LC_NUMERIC, array('en_US.UTF-8', 'en-US'));
+ setlocale(LC_NUMERIC, array('en_US.UTF-8', 'en-US', 'C.UTF-8', 'C'));
}
public static function setDefaultLocale()
diff --git a/core/Plugin/Report.php b/core/Plugin/Report.php
index 7bdbf0710e..df28f450c9 100644
--- a/core/Plugin/Report.php
+++ b/core/Plugin/Report.php
@@ -120,6 +120,14 @@ class Report
protected $hasGoalMetrics = false;
/**
+ * Set this property to false in case your report can't/shouldn't be flattened.
+ * In this case, flattener won't be applied even if parameter is provided in a request
+ * @var bool
+ * @api
+ */
+ protected $supportsFlatten = true;
+
+ /**
* Set it to boolean `true` if your report always returns a constant count of rows, for instance always 24 rows
* for 1-24 hours.
* @var bool
@@ -494,6 +502,15 @@ class Report
}
/**
+ * @return bool
+ * @ignore
+ */
+ public function supportsFlatten()
+ {
+ return $this->supportsFlatten;
+ }
+
+ /**
* If the report is enabled the report metadata for this report will be built and added to the list of available
* reports. Overwrite this method and leave it empty in case you do not want your report to be added to the report
* metadata. In this case your report won't be visible for instance in the mobile app and scheduled reports
diff --git a/core/Version.php b/core/Version.php
index 119be80874..93f5b9c95c 100644
--- a/core/Version.php
+++ b/core/Version.php
@@ -20,7 +20,7 @@ final class Version
* The current Piwik version.
* @var string
*/
- const VERSION = '3.0.3-b2';
+ const VERSION = '3.0.3';
public function isStableVersion($version)
{
diff --git a/core/ViewDataTable/Config.php b/core/ViewDataTable/Config.php
index 2ccd975c7b..0eb99aa9f5 100644
--- a/core/ViewDataTable/Config.php
+++ b/core/ViewDataTable/Config.php
@@ -502,6 +502,7 @@ class Config
$this->loadDocumentation();
$this->setShouldShowPivotBySubtable();
+ $this->setShouldShowFlattener();
}
/** Load documentation from the API */
@@ -755,6 +756,15 @@ class Config
}
}
+ private function setShouldShowFlattener()
+ {
+ $report = ReportsProvider::factory($this->controllerName, $this->controllerAction);
+
+ if ($report && !$report->supportsFlatten()) {
+ $this->show_flatten_table = false;
+ }
+ }
+
public function disablePivotBySubtableIfTableHasNoSubtables(DataTable $table)
{
foreach ($table->getRows() as $row) {
diff --git a/core/testMinimumPhpVersion.php b/core/testMinimumPhpVersion.php
index 4562c2f154..ca276b1de3 100644
--- a/core/testMinimumPhpVersion.php
+++ b/core/testMinimumPhpVersion.php
@@ -125,7 +125,7 @@ if (!function_exists('Piwik_GetErrorMessagePage')) {
}
if (empty($logoUrl)) {
- $logoUrl = "plugins/Morpheus/images/logo-header.png";
+ $logoUrl = "plugins/Morpheus/images/logo.svg";
}
if (empty($faviconUrl)) {
diff --git a/lang/pl.json b/lang/pl.json
index f65ac788bc..b6f2bdb711 100644
--- a/lang/pl.json
+++ b/lang/pl.json
@@ -80,6 +80,7 @@
"ConfigFileIsNotWritable": "Plik konfiguracyjny Piwik %1$s nie ma ustawionych praw do zapisu, zmiany poczynione nie mogły więc zostać zapisane. %2$s Zmień przez chmod uprawnienia do zapisu pliku konfiguracyjnego.",
"Continue": "Kontunuuj",
"ContinueToPiwik": "Idź do Piwik",
+ "CurrentlyUsingUnsecureHttp": "Aktualnie używasz Piwik przez niezabezpieczony protokół HTTP. Zalecamy wykorzystanie SSL (HTTPS) aby poprawić bezpieczeństwo.",
"CreatedByUser": "utworzony przez %s",
"CurrentMonth": "bieżący miesiąc",
"CurrentWeek": "bieżący tydzień",
@@ -216,6 +217,7 @@
"Name": "Nazwa",
"NbActions": "Numer działań",
"NbInteractions": "Liczba interakcji",
+ "NbSearches": "Liczba wewnętrznych wyszukiwań",
"NeedMoreHelp": "Potrzebujesz więcej pomocy?",
"Never": "Nigdy",
"NewReportsWillBeProcessedByCron": "Kiedy archiwizacja baz Piwik nie jest wywoływana przez przeglądarkę, nowe raporty będą jedynie przetwarzane przez crontab.",
@@ -334,12 +336,14 @@
"TimeAgo": "%s temu",
"TimeFormat": "Format czasu",
"TimeOnPage": "Czas na stronie",
+ "ToDeleteAllDirectoriesRunThisCommand": "W celu usunięcia tych katalogów możesz użyć komendy:",
"Total": "Ogólnie",
"TotalRatioTooltip": "To jest %1$s wszystkich %2$s %3$s.",
"TotalRevenue": "Przychody ogółem",
"TrackingScopeAction": "Akcja",
"TrackingScopePage": "Strona",
"TrackingScopeVisit": "Wizyta",
+ "TransitionsRowActionTooltip": "Zobacz co odwiedzający zrobili przed i po obejrzeniu tej strony",
"TransitionsRowActionTooltipTitle": "Otwarte przejścia",
"TranslatorName": "Remigiusz Waszkiewicz, Marcin Kowol, Maciej Zawadziński, Artur Warchoł,AETERNUS, Tomasz Kornicki",
"UniquePurchases": "Unikalnych zakupów",
@@ -415,6 +419,7 @@
"HowtoDeleteAnAccount": "Naciśnij i przytrzymaj by usunac konto.",
"HowtoDeleteAnAccountOniOS": "W celu usunięcia konta przeciągnij z prawej do lewej",
"HowtoLoginAnonymous": "Pozostaw nazwę i hasło uzytkownika pustymi dla logowania anonimowego",
+ "HttpTimeout": "HTTP Timeout - Przekroczono maksymalny dozwolony czas",
"LastUpdated": "Ostatnia aktualizacja: %s",
"LoadingReport": "Ładowanie %s",
"LoginCredentials": "Uprawnienia",
@@ -449,6 +454,7 @@
"TryIt": "Wypróbuj!",
"VerifyAccount": "Weryfikowanie Konta",
"ValidateSslCertificate": "Zweryfikuj certyfikat SSL",
+ "VerifyLoginData": "Upewnij się, że Twój login i hasło są poprawne.",
"YouAreOffline": "Przepraszamy, obecnie jesteś odłączony"
},
"RowEvolution": {
diff --git a/lang/pt-br.json b/lang/pt-br.json
index 300529cbad..1d319a7f3d 100644
--- a/lang/pt-br.json
+++ b/lang/pt-br.json
@@ -62,12 +62,15 @@
"ColumnNbActions": "Ações",
"ColumnNbActionsDocumentation": "O número de ações realizadas pelos seus visitantes. As ações podem ser exibições de páginas, pesquisas internas no site, downloads ou outlinks.",
"ColumnNbUniqVisitors": "Visitantes Únicos",
+ "ColumnNbUniqVisitorsDocumentation": "O número de visitantes não duplicados que chegam ao seu site. Cada usuário só é contado uma vez, mesmo se eles visitam o site várias vezes ao dia.",
"ColumnNbUsers": "Usuários",
"ColumnNbUsersDocumentation": "O número de usuários autenticados em seu site. É o número de usuários ativos únicos que têm um ID de usuário definido (através da função de código de rastreamento 'getUserId').",
"ColumnNbVisits": "Visitas",
+ "ColumnNbVisitsDocumentation": "Se um visitante chega ao seu site pela primeira vez, ou se eles visitam uma página mais de 30 minutos depois de sua última página vista, isso será registrado como uma nova visita.",
"ColumnPageBounceRateDocumentation": "A porcentagem de visitas que começou nesta página e deixou o site de imediato.",
"ColumnPageviews": "Exibições de página",
"ColumnPageviewsDocumentation": "O número de vezes que a página foi visitada.",
+ "ColumnPercentageVisits": "%% Visitas",
"ColumnRevenue": "Lucro",
"ColumnSumVisitLength": "Tempo total gasto pelos visitantes (em segundos)",
"ColumnTotalPageviews": "Total de Exibições de Páginas",
@@ -158,6 +161,12 @@
"ExceptionLanguageFileNotFound": "Ficheiro de idioma %s não encontrado.",
"ExceptionMethodNotFound": "O método '%1$s' não existe ou não está disponível no módulo '%2$s'.",
"ExceptionMissingFile": "Arquivo faltando: %s.",
+ "ExceptionUnexpectedFile": "Arquivos foram encontrados no seu Piwik mas nós não esperávamos por eles.",
+ "ExceptionUnexpectedFilePleaseDelete": "Por favor, apague estes arquivos para prevenir erros.",
+ "ExceptionUnexpectedDirectory": "Diretórios foram encontrados no seu Piwik mas nós não esperávamos por eles.",
+ "ExceptionUnexpectedDirectoryPleaseDelete": "Por favor, apague estes diretórios para prevenir erros.",
+ "ExceptionFileToDelete": "Arquivo para apagar: %s",
+ "ExceptionDirectoryToDelete": "Diretório para apagar: %s",
"ExceptionNonceMismatch": "Não conseguiria verificar a segurança tomada nesse modelo.",
"ExceptionPrivilege": "Não pode aceder a este recurso uma vez que ele requer um acesso %s.",
"ExceptionPrivilegeAccessWebsite": "Não pode aceder a este recurso uma vez que ele requer um acesso %s para o site id=%d.",
@@ -174,6 +183,9 @@
"ExportAsImage": "Exportar como imagem",
"ExportThisReport": "Exportar este conjunto de dados noutros formatos",
"Faq": "FAQ",
+ "FileIntegrityWarning": "Verificação de integridade dos arquivos falhou e reportou alguns erros. Você deve corrigir esse problema e, então, atualizar essa página até que ela não mostre nenhum erro.",
+ "FileIntegrityWarningReupload": "Os erros abaixo podem ser devido a um envio parcial ou falho de arquivos do Piwik.",
+ "FileIntegrityWarningReuploadBis": "Tente reenviar todos os arquivos do Piwik em modo BINÁRIO.",
"First": "Primeiro",
"Flatten": "Achatar",
"ForExampleShort": "ex.",
@@ -229,6 +241,7 @@
"MultiSitesSummary": "Todos os sites",
"Name": "Nome",
"NbActions": "Número de Ações",
+ "NbInteractions": "Número de Interações",
"NbSearches": "Número de Pesquisas internas",
"NeedMoreHelp": "Precisa de mais ajuda?",
"Never": "Nunca",
@@ -284,6 +297,7 @@
"Password": "Senha",
"Period": "Período",
"Piechart": "Gráfico circular",
+ "PiwikIsACollaborativeProjectYouCanContributeAndDonateNextRelease": "%1$sPiwik%2$s é um projeto colaborativo trazido a você pelos membros da %7$s equipe Piwik%8$s, bem como por muitos outros colaboradores ao redor do mundo. <br\/> Se você é um fã do Piwik, você pode ajudar: descubra %3$sComo participar do Piwik%4$s, ou %5$sdoe agora%6$s para ajudar a financiar o próximo grande lançamento do Piwik!",
"PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s está disponível. Por favor notifique o %2$sadministrator Piwik%3$s.",
"PiwikXIsAvailablePleaseUpdateNow": "Piwiki %1$s está disponível. %2$s Por favor atualize agora!%3$s (veja %4$sas mudanças%5$s).",
"PleaseContactYourPiwikAdministrator": "Por favor, contate o administrador do Piwik.",
@@ -356,6 +370,8 @@
"TimeAgo": "%s atrás",
"TimeFormat": "Formato do horário",
"TimeOnPage": "Tempo na página",
+ "ToDeleteAllDirectoriesRunThisCommand": "Para apagar todos estes diretórios de uma vez, você pode executar esse comando:",
+ "ToDeleteAllFilesRunThisCommand": "Para apagar todos estes arquivos de uma vez, você pode executar esse comando:",
"Total": "Total",
"TotalRatioTooltip": "Este é %1$s de todos os %2$s %3$s.",
"TotalRevenue": "Total de Revendas",
diff --git a/lang/tr.json b/lang/tr.json
index 187d2853ee..74c8174528 100644
--- a/lang/tr.json
+++ b/lang/tr.json
@@ -26,6 +26,7 @@
"Cancel": "İptal",
"CannotUnzipFile": "Zip'den çıkarılamıyor %1$s: %2$s",
"ChangePassword": "Şifre değiştir",
+ "ChooseDate": "Tarih seçin, şuan seçilen tarih: %s",
"ChooseLanguage": "Dil seçin",
"ChoosePeriod": "Zaman aralığı seçin",
"ClickHere": "Daha fazla bilgi için buraya tıklayın.",
@@ -109,6 +110,7 @@
"EcommerceOrders": "ETicaret Siparişleri",
"Edit": "Düzenle",
"Error": "Hata",
+ "Errors": "Hatalar",
"ExceptionConfigurationFileNotFound": "Yapılandırma dosyası {%s} bulunamadı.",
"ExceptionDatabaseVersion": "Sizin %1$s versiyonunuz %2$s ama Piwik en az %3$s kabul eder.",
"ExceptionFileIntegrity": "Bütünlük kontrolü başarısız: %s",
@@ -375,6 +377,7 @@
"ReleaseToRefresh": "Yenilemek için bırakın...",
"Reloading": "Yeniden yükleniyor...",
"RequestTimedOutShort": "Ağ Zamanaşımı Hatası",
+ "RestrictedCompatibility": "Kısıtlı uyumluluk",
"SaveSuccessError": "Piwik adresi veya kullanıcı adı ve şifre kombinasyonu yanlış.",
"SearchWebsite": "Websitelerinde ara",
"ShowAll": "Tümünü göster",
@@ -384,6 +387,7 @@
"TryIt": "Dene!",
"VerifyAccount": "Hesap Doğrulama",
"ValidateSslCertificate": "SSL Sertifikasını Doğrula",
+ "VerifyLoginData": "Kullanıcı adı ve parolanın doğru olduğundan emin olun.",
"YouAreOffline": "Üzgünüm, şu anda çevrimdışısınız"
},
"RowEvolution": {
diff --git a/libs/README.md b/libs/README.md
index edc4a97dc1..824d7f2473 100644
--- a/libs/README.md
+++ b/libs/README.md
@@ -7,16 +7,6 @@ third-party libraries:
* HTML/Quickform2/
- in r2626, php 5.1.6 incompatibility
- in r3040, exception classes don't follow PEAR naming convention
- * pChart2.1.3/
- - the following unused files were removed:
- class/pBarcode39.class.php, class/pBarcode128.class.php,
- class/pBubble.class.php, class/pCache.class.php, class/pIndicator.class.php,
- class/pRadar.class.php, class/pScatter.class.php, class/pSplit.class.php,
- class/pSpring.class.php, class/pStock.class.php, class/pSurface.class.php,
- data/, examples/, fonts/, palettes/
- - The bug #4206 (GD with JIS-mapped Japanese Font Support) was fixed in this
- commit: https://github.com/piwik/piwik/commit/516c13d9b13ca3b908575eb809f7ad9d9397f0e1
- Changed files: class/pImage.class.php class/pDraw.class.php
* sparkline/
- in r1296, remove require_once
- empty sparklines with floats, off-by-one errors, and locale conflict
diff --git a/libs/pChart/GPLv3.txt b/libs/pChart/GPLv3.txt
deleted file mode 100755
index 10926e87f1..0000000000
--- a/libs/pChart/GPLv3.txt
+++ /dev/null
@@ -1,675 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- <program> Copyright (C) <year> <name of author>
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/libs/pChart/change.log b/libs/pChart/change.log
deleted file mode 100644
index 717502dde7..0000000000
--- a/libs/pChart/change.log
+++ /dev/null
@@ -1,292 +0,0 @@
-
- ╔═════════════════════════════════════════╗
- ║ ║
- ║ pChart - a PHP Charting library ║
- ║ ║
- ║ Version : 2.1.4 ║
- ║ Made by : Jean-Damien POGOLOTTI ║
- ║ Last Update : 19/01/14 ║
- ║ ║
- ╚═════════════════════════════════════════╝
-
- 2.1.4 ────────────────────────────────────────────────────────────────────────
-
- o Added the AXIS_FORMAT_TRAFFIC format.
- o Added the RemoveSkippedAxis parameter to the drawScale() function.
- o Enhanced the title field of the floating labels.
- o Replaced the date() calles by gmdate() ones.
- o Added the $BoxAlpha parameter to the drawLabel(s) functions.
- o Fixed a labelling bug on the pie charts. (Thanks to François LE QUEMENER)
- o Fixed a security issue with the /examples folder. (Thanks to Nicolas CHATELAIN)
-
- 2.1.3 ────────────────────────────────────────────────────────────────────────
-
- o Updated drawPlotChart() to size the plot based on the serie weight.
- o Added the drawXThreshold() function.
- o Added the drawXThresholdArea() function.
- o Added the AreaName param. to drawXThresholdArea() and drawThresholdArea().
- o Various visual enhancements.
- o Fixed a bug in the drawPlotChart() function.
- o Added shadow support for the Area charts.
- o Added the BorderWidth parameter to the drawBubbleChart() function.
- o Added the Shape parameter to the drawBubbleChart() function.
- o Added the AXIS_FORMAT_CUSTOM for user callback handling.
- o Rewritten the drawStackedAreaChart() function.
- o Added support for labels on stacked charts.
- o Added the createFunctionSerie() function to the pData class.
- o Added the drawScatterThreshold() function to the pScatter class.
- o Added the drawScatterThresholdArea() function to the pScatter class.
- o Added the setAbsicssaPosition() function to the pData class.
- o Added the NegateValues() function to the pData class.
- o Added the NoMargin parameter to the drawThresholdArea & drawThreshold fcts.
- o Added the drawAreaMirror() function.
- o Added the EURO_SYMBOL constant.
- o Added the replaceImageMapValues() function.
- o Added the replaceImageMapTitle() function.
- o Thresholds functions can now accept an array of points.
- o Added the FixedMax parameter to both the Radar and Polar charts.
- o Added the Precision parameter to the pie and ring charts.
- o Added the DisplayOrientation parameter to the bar & stacked bar charts.
- o Fixed a bug while using the drawBestFit function with VOID datasets.
- o Added the RemoveXAxis option to the drawScale() function.
-
-
- 2.1.2 ────────────────────────────────────────────────────────────────────────
-
- o Added zone threshold support for filled area charts.
- o Added zone threshold support for filled spline charts.
- o Added the setScatterSerieShape() function.
- o Added the getSerieMedian() function.
- o Added the drawZoneChart() function.
- o Added the getStandardDeviation() function.
- o Added the getCoefficientOfVariation() function.
- o Added the getGeometricMean() function.
- o Added the getHarmonicMean() function.
- o Introduced support for imageMap.
- o Added the initialiseImageMap() function.
- o Added the addToImageMap() function.
- o Added the dumpImageMap() function.
- o Added value writting supports to the radars & polars charts.
- o Added the option to add an inner border to the reg. and stacked bar charts.
- o Added the SERIE_SHAPE_DIAMOND and SERIE_SHAPE_FILLEDDIAMOND series shapes.
- o Fixed a visual bug in the drawAreaChart function. (thks to dmiller)
- o Added the BrowserExpire param to the stroke() function (thks to marquonis)
- o Fixed a visual bug in the drawBarChart function when the Interleave is 0.
- o Corrected a bug in the drawScatterBestFit() function (thks to ares)
- o Fixed some bugs with the pie chart functions.
-
-
- 2.1.1 ────────────────────────────────────────────────────────────────────────
-
- o Created the pIndicator class.
- o Created the pSurface class.
- o Added the drawLabel() function.
- o Added the writeScatterLabel() function.
- o Added the writeBubbleLabel() function.
- o Added the ForceAlpha parameter to the buble chart.
- o Added the LabelStacked parameter to the 2D and 3D pie charts.
- o Added 2D ring chart support to the pPie class extension.
- o Added 3D ring chart support to the pPie class extension.
- o Added the autoOutput() method to the pCache class.
- o Added some NULL value tests.
- o Added the setSerieShape() function to the pData class.
- o Added the setAbscissaName() function to the pData class.
- o Fixed a bug in the getAverage() function.
- o Changed the VOID constant from 0.12345 to 0.123456789.
- o Fixed a bug with the number of decimals in the METRIC scale.
- o Fixed a visual bug with reversed bar chart labelling.
- o Added the ValuePosition & ValuePadding parameters to the pie charts.
- o Added the WriteValue parameters to the 2D pie charts.
- o Added the getSeriePalette() function to the pData class.
- o pData methods can now accept array of serie parameters.
- o Fixed a bug in the scatter spline chart VOID values handling.
-
- 2.1.0 ────────────────────────────────────────────────────────────────────────
-
- /!\ Renamed the .class files to .class.php.
-
- o Create the pScatter class.
- o Added the ScatterPlotChart() charting method.
- o Added the ScatterLineChart() charting method.
- o Added the ScatterSplineChart() charting method.
- o Added the DrawScatterLegend() function.
- o Added the getScatterLegendSize() function.
- o Added the following function to the pData class :
-
- - setScatterSerie()
- - setScatterSerieDescription()
- - setScatterSeriePicture()
- - setScatterSerieDrawable()
- - setScatterSerieTicks()
- - setScatterSerieWeight()
- - setScatterSerieColor()
-
- o Added a Forces config. array to drawSpline() function to allow parametric
- forces. (used by the scatter spline algorithm)
- o Added Floating0Serie & Floating0Value options to the drawBarChart function.
- o Added the Draw0Line option to the drawBarChart function.
- o Added support for line and filled step charts.
- o Fixed a visual artifact in the drawGradient() function.
- o Fixed a visual artifact in the drawRoundedFilledRectangle() function.
- o Fixed a visual artifact in the drawRadar() function.
- o Rewritten the example index page.
- o Added the Floating parameter to the scaling functions.
- o Added the drawBestFit() and drawScatterBestFit() math functions.
-
-
- 2.0.13 ───────────────────────────────────────────────────────────────────────
-
- o Modified the drawScale() function to get the best visual factors.
- o Added the BorderAlpha parameter to the drawFilledCircle() function.
- o Shipped more examples.
- o Fixed a bug in the normalize() function and 0 Values.
- o Finally implemented the setSeriePicture() output.
- o Added the bubble class extension.
- o Added the possibility to have a transparent background to the generated
- pictures keeping the alpha channels (thanks to georgi.m)
- o Updated the sandbox to support transparent background.
- o Added the drawDerivative() function to draw curve slope factor.
- o Additional Minor fixes.
-
-
- 2.0.12 ───────────────────────────────────────────────────────────────────────
-
- o Added missing points (VOID) handling for line & spline charts.
- o Added customisation options to the drawLegend() function.
- o Various additions and enhancements in the sandbox.
- o Added the weight series support to the drawSplineChart() function.
- o Added the SCALE_MODE_MANUAL scaling method.
-
-
- 2.0.11 ───────────────────────────────────────────────────────────────────────
-
- o Added the AxisBoxRounded, AxisFontName, AxisFontSize parameters to the
- radar and polar class.
- o Fixed a bug with the axis labels of the radar charts using the STAR layout.
- o Fixed a bug in the axis format computing.
- o Added the axis format option in the sandbox system.
- o Tuned the way the METRIC scales are displayed.
- o Fixed a bug with the getWidth(), getHeight().(thanks to SandmanXC)
-
-
- 2.0.10 ───────────────────────────────────────────────────────────────────────
-
- /!\ First public release.
-
- o Fixed a bug in the normalize() function for VOID values.
- o Updated the example rendering frontend.
- o Updated the sandbox.
-
-
- 2.0.9 ────────────────────────────────────────────────────────────────────────
-
- o Added the sandbox.
- o Added the getLegendSize() function.
- o Added the SCALE_MODE_ADDALL_START0 scaling method.
- o Fixed a bug in the normalize() function.
- o Fixed a bug in the computeScale() function.
-
- 2.0.8 ────────────────────────────────────────────────────────────────────────
-
- o Corrected a bug in the drawThreshold() function. (thanks to mice32alpha)
- o Added rendering options to the writeBounds() function.
- o Enhanced the rendering of the drawRoundedFilledRectangle() function.
- o Added the setSerieWeight() function to the pData class.
- o Fixed a bug in the loadPalette() function.
- o Added the 9 palette files. (/palettes)
- o Fixed visual artifact in the drawGradientArea() function.
-
-
- 2.0.7 ────────────────────────────────────────────────────────────────────────
-
- o Fixed a cosmetic issue in the stacked area chart function.
- o Bar chart with 0 values now appears as a 0 line.
- o Zero values are not rendered anymore in stacked bar charts.
- o Added the possibility to rotate X axis labels. (LabelRotation)
- o Added rendering parameters for skipped X axis values :
-
- $SkippedAxisTicks
- $SkippedAxisR
- $SkippedAxisG
- $SkippedAxisB
- $SkippedAxisAlpha
- $SkippedTickR
- $SkippedTickG
- $SkippedTickB
- $SkippedTickAlpha
- $SkippedInnerTickWidth
- $SkippedOuterTickWidth
-
- o Added the ability to draw a background box around text (flat, rounded)
- o Added the importFromCSV() method to the pData class.
- o Fixed a bug in the min/max computing of the data series with VOID values.
-
-
- 2.0.6 ────────────────────────────────────────────────────────────────────────
-
- o Added setSliceColor() function to the pPie class.
- o Added support for stacked area charts.
- o Fixed an issue with 3D pie chart labelling.
- o Fixed artifacts issues with the 3D pie hidden faces.
- o Fixed a bug in the drawPolygon() function.
- o Fixed a bug with automatic abscissa labelling.
- o Rewritten the delayedLoaded script. (advice of mathbr for compatibility)
-
-
- 2.0.5 ────────────────────────────────────────────────────────────────────────
-
- o Added support for 3D pie charts.
- o Enhanced the example rendering. (web)
- o Added functionalities on radar charts (proposed by dani Huber)
-
- - SkipLabels to skip any number of labels.
- - LabelMiddle to center the labels between the slices.
-
- o Fixed a bug with the palette management.
- o Fixed an issue while displaying multiple-line legends.
- o Added the delayed loader script in the examples.
-
-
- 2.0.4 ────────────────────────────────────────────────────────────────────────
-
- o Fixed issue with really small data series. (one value)
- o Enhanced the example rendering. (batch + web)
- o Added the autoOutput() rendering method.
- o Made various minor fixes.
-
-
- 2.0.3 ────────────────────────────────────────────────────────────────────────
-
- o Added the autoOutput() function that determine if the picture should be
- rendered with the Render() or Stroke() function based on the way the script
- is called. (CLI or HTTPD)
- o Added the getSum() function to the pData class.
- o Added support for 2D pie charts :
-
- - draw2DPie()
- - drawPieLegend()
-
- o Fixed angle issue in the drawArrowLabel function.
- o While turning AA off, dashed line were not rendered (thanks to mice32alpha)
-
-
- 2.0.2 ────────────────────────────────────────────────────────────────────────
-
- o Fixing some notifications messages with the PHP5.3.x deprecated functions :
-
- - split has been replaced by preg_split.
- - ereg has been replaced by preg_match.
-
- o Removed deprecated test with the in_array() function.
-
-
- 2.0.1 ────────────────────────────────────────────────────────────────────────
-
- o First public early adopter release.
-
-
- 2.0.0 ────────────────────────────────────────────────────────────────────────
-
- o Initial release of the v2.0.0 trunk. All primitive functions and some of
- the charting functions have been created.
-
diff --git a/libs/pChart/class/pData.class.php b/libs/pChart/class/pData.class.php
deleted file mode 100755
index d29e0d499c..0000000000
--- a/libs/pChart/class/pData.class.php
+++ /dev/null
@@ -1,789 +0,0 @@
-<?php
- /*
- pDraw - class to manipulate data arrays
-
- Version : 2.1.4
- Made by : Jean-Damien POGOLOTTI
- Last Update : 19/01/2014
-
- This file can be distributed under the license you can find at :
-
- http://www.pchart.net/license
-
- You can find the whole class documentation on the pChart web site.
- */
-
- /* Axis configuration */
- define("AXIS_FORMAT_DEFAULT" , 680001);
- define("AXIS_FORMAT_TIME" , 680002);
- define("AXIS_FORMAT_DATE" , 680003);
- define("AXIS_FORMAT_METRIC" , 680004);
- define("AXIS_FORMAT_CURRENCY" , 680005);
- define("AXIS_FORMAT_TRAFFIC" , 680006);
- define("AXIS_FORMAT_CUSTOM" , 680007);
-
- /* Axis position */
- define("AXIS_POSITION_LEFT" , 681001);
- define("AXIS_POSITION_RIGHT" , 681002);
- define("AXIS_POSITION_TOP" , 681001);
- define("AXIS_POSITION_BOTTOM" , 681002);
-
- /* Families of data points */
- define("SERIE_SHAPE_FILLEDCIRCLE" , 681011);
- define("SERIE_SHAPE_FILLEDTRIANGLE" , 681012);
- define("SERIE_SHAPE_FILLEDSQUARE" , 681013);
- define("SERIE_SHAPE_FILLEDDIAMOND" , 681017);
- define("SERIE_SHAPE_CIRCLE" , 681014);
- define("SERIE_SHAPE_TRIANGLE" , 681015);
- define("SERIE_SHAPE_SQUARE" , 681016);
- define("SERIE_SHAPE_DIAMOND" , 681018);
-
- /* Axis position */
- define("AXIS_X" , 682001);
- define("AXIS_Y" , 682002);
-
- /* Define value limits */
- define("ABSOLUTE_MIN" , -10000000000000);
- define("ABSOLUTE_MAX" , 10000000000000);
-
- /* Replacement to the PHP NULL keyword */
- define("VOID" , 0.123456789);
-
- /* Euro symbol for GD fonts */
- define("EURO_SYMBOL" , utf8_encode("&#8364;"));
-
- /* pData class definition */
- class pData
- {
- var $Data;
-
- var $Palette = array("0"=>array("R"=>188,"G"=>224,"B"=>46,"Alpha"=>100),
- "1"=>array("R"=>224,"G"=>100,"B"=>46,"Alpha"=>100),
- "2"=>array("R"=>224,"G"=>214,"B"=>46,"Alpha"=>100),
- "3"=>array("R"=>46,"G"=>151,"B"=>224,"Alpha"=>100),
- "4"=>array("R"=>176,"G"=>46,"B"=>224,"Alpha"=>100),
- "5"=>array("R"=>224,"G"=>46,"B"=>117,"Alpha"=>100),
- "6"=>array("R"=>92,"G"=>224,"B"=>46,"Alpha"=>100),
- "7"=>array("R"=>224,"G"=>176,"B"=>46,"Alpha"=>100));
-
- /* Class creator */
- function __construct()
- {
- $this->Data = "";
- $this->Data["XAxisDisplay"] = AXIS_FORMAT_DEFAULT;
- $this->Data["XAxisFormat"] = NULL;
- $this->Data["XAxisName"] = NULL;
- $this->Data["XAxisUnit"] = NULL;
- $this->Data["Abscissa"] = NULL;
- $this->Data["AbsicssaPosition"] = AXIS_POSITION_BOTTOM;
-
- $this->Data["Axis"][0]["Display"] = AXIS_FORMAT_DEFAULT;
- $this->Data["Axis"][0]["Position"] = AXIS_POSITION_LEFT;
- $this->Data["Axis"][0]["Identity"] = AXIS_Y;
- }
-
- /* Add a single point or an array to the given serie */
- function addPoints($Values,$SerieName="Serie1")
- {
- if (!isset($this->Data["Series"][$SerieName]))
- $this->initialise($SerieName);
-
- if ( is_array($Values) )
- {
- foreach($Values as $Key => $Value)
- { $this->Data["Series"][$SerieName]["Data"][] = $Value; }
- }
- else
- $this->Data["Series"][$SerieName]["Data"][] = $Values;
-
- if ( $Values != VOID )
- {
- $StrippedData = $this->stripVOID($this->Data["Series"][$SerieName]["Data"]);
- if ( empty($StrippedData) ) { $this->Data["Series"][$SerieName]["Max"] = 0; $this->Data["Series"][$SerieName]["Min"] =0; return(0); }
- $this->Data["Series"][$SerieName]["Max"] = max($StrippedData);
- $this->Data["Series"][$SerieName]["Min"] = min($StrippedData);
- }
- }
-
- /* Strip VOID values */
- function stripVOID($Values)
- { if (!is_array($Values)) { return(array()); } $Result = array(); foreach($Values as $Key => $Value) { if ( $Value != VOID ) { $Result[] = $Value; } } return($Result); }
-
- /* Return the number of values contained in a given serie */
- function getSerieCount($Serie)
- { if (isset($this->Data["Series"][$Serie]["Data"])) { return(sizeof($this->Data["Series"][$Serie]["Data"])); } else { return(0); } }
-
- /* Remove a serie from the pData object */
- function removeSerie($Series)
- {
- if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
- foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie])) { unset($this->Data["Series"][$Serie]); } }
- }
-
- /* Return a value from given serie & index */
- function getValueAt($Serie,$Index=0)
- { if (isset($this->Data["Series"][$Serie]["Data"][$Index])) { return($this->Data["Series"][$Serie]["Data"][$Index]); } else { return(NULL); } }
-
- /* Return the values array */
- function getValues($Serie)
- { if (isset($this->Data["Series"][$Serie]["Data"])) { return($this->Data["Series"][$Serie]["Data"]); } else { return(NULL); } }
-
- /* Reverse the values in the given serie */
- function reverseSerie($Series)
- {
- if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
- foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]["Data"])) { $this->Data["Series"][$Serie]["Data"] = array_reverse($this->Data["Series"][$Serie]["Data"]); } }
- }
-
- /* Return the sum of the serie values */
- function getSum($Serie)
- { if (isset($this->Data["Series"][$Serie])) { return(array_sum($this->Data["Series"][$Serie]["Data"])); } else { return(NULL); } }
-
- /* Return the max value of a given serie */
- function getMax($Serie)
- { if (isset($this->Data["Series"][$Serie]["Max"])) { return($this->Data["Series"][$Serie]["Max"]); } else { return(NULL); } }
-
- /* Return the min value of a given serie */
- function getMin($Serie)
- { if (isset($this->Data["Series"][$Serie]["Min"])) { return($this->Data["Series"][$Serie]["Min"]); } else { return(NULL); } }
-
- /* Set the description of a given serie */
- function setSerieShape($Series,$Shape=SERIE_SHAPE_FILLEDCIRCLE)
- {
- if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
- foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Shape"] = $Shape; } }
- }
-
- /* Set the description of a given serie */
- function setSerieDescription($Series,$Description="My serie")
- {
- if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
- foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Description"] = $Description; } }
- }
-
- /* Set a serie as "drawable" while calling a rendering function */
- function setSerieDrawable($Series,$Drawable=TRUE)
- {
- if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
- foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["isDrawable"] = $Drawable; } }
- }
-
- /* Set the icon associated to a given serie */
- function setSeriePicture($Series,$Picture=NULL)
- {
- if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
- foreach($Series as $Key => $Serie) { if (isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Picture"] = $Picture; } }
- }
-
- /* Set the name of the X Axis */
- function setXAxisName($Name)
- { $this->Data["XAxisName"] = $Name; }
-
- /* Set the display mode of the X Axis */
- function setXAxisDisplay($Mode,$Format=NULL)
- { $this->Data["XAxisDisplay"] = $Mode; $this->Data["XAxisFormat"] = $Format; }
-
- /* Set the unit that will be displayed on the X axis */
- function setXAxisUnit($Unit)
- { $this->Data["XAxisUnit"] = $Unit; }
-
- /* Set the serie that will be used as abscissa */
- function setAbscissa($Serie)
- { if (isset($this->Data["Series"][$Serie])) { $this->Data["Abscissa"] = $Serie; } }
-
- function setAbsicssaPosition($Position = AXIS_POSITION_BOTTOM)
- { $this->Data["AbsicssaPosition"] = $Position; }
-
- /* Set the name of the abscissa axis */
- function setAbscissaName($Name)
- { $this->Data["AbscissaName"] = $Name; }
-
- /* Create a scatter group specifyin X and Y data series */
- function setScatterSerie($SerieX,$SerieY,$ID=0)
- { if (isset($this->Data["Series"][$SerieX]) && isset($this->Data["Series"][$SerieY]) ) { $this->initScatterSerie($ID); $this->Data["ScatterSeries"][$ID]["X"] = $SerieX; $this->Data["ScatterSeries"][$ID]["Y"] = $SerieY; } }
-
- /* Set the shape of a given sctatter serie */
- function setScatterSerieShape($ID,$Shape=SERIE_SHAPE_FILLEDCIRCLE)
- { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Shape"] = $Shape; } }
-
- /* Set the description of a given scatter serie */
- function setScatterSerieDescription($ID,$Description="My serie")
- { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Description"] = $Description; } }
-
- /* Set the icon associated to a given scatter serie */
- function setScatterSeriePicture($ID,$Picture=NULL)
- { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Picture"] = $Picture; } }
-
- /* Set a scatter serie as "drawable" while calling a rendering function */
- function setScatterSerieDrawable($ID ,$Drawable=TRUE)
- { if (isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["isDrawable"] = $Drawable; } }
-
- /* Define if a scatter serie should be draw with ticks */
- function setScatterSerieTicks($ID,$Width=0)
- { if ( isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Ticks"] = $Width; } }
-
- /* Define if a scatter serie should be draw with a special weight */
- function setScatterSerieWeight($ID,$Weight=0)
- { if ( isset($this->Data["ScatterSeries"][$ID]) ) { $this->Data["ScatterSeries"][$ID]["Weight"] = $Weight; } }
-
- /* Associate a color to a scatter serie */
- function setScatterSerieColor($ID,$Format)
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
-
- if ( isset($this->Data["ScatterSeries"][$ID]) )
- {
- $this->Data["ScatterSeries"][$ID]["Color"]["R"] = $R;
- $this->Data["ScatterSeries"][$ID]["Color"]["G"] = $G;
- $this->Data["ScatterSeries"][$ID]["Color"]["B"] = $B;
- $this->Data["ScatterSeries"][$ID]["Color"]["Alpha"] = $Alpha;
- }
- }
-
- /* Compute the series limits for an individual and global point of view */
- function limits()
- {
- $GlobalMin = ABSOLUTE_MAX;
- $GlobalMax = ABSOLUTE_MIN;
-
- foreach($this->Data["Series"] as $Key => $Value)
- {
- if ( $this->Data["Abscissa"] != $Key && $this->Data["Series"][$Key]["isDrawable"] == TRUE)
- {
- if ( $GlobalMin > $this->Data["Series"][$Key]["Min"] ) { $GlobalMin = $this->Data["Series"][$Key]["Min"]; }
- if ( $GlobalMax < $this->Data["Series"][$Key]["Max"] ) { $GlobalMax = $this->Data["Series"][$Key]["Max"]; }
- }
- }
- $this->Data["Min"] = $GlobalMin;
- $this->Data["Max"] = $GlobalMax;
-
- return(array($GlobalMin,$GlobalMax));
- }
-
- /* Mark all series as drawable */
- function drawAll()
- { foreach($this->Data["Series"] as $Key => $Value) { if ( $this->Data["Abscissa"] != $Key ) { $this->Data["Series"][$Key]["isDrawable"]=TRUE; } } }
-
- /* Return the average value of the given serie */
- function getSerieAverage($Serie)
- {
- if ( isset($this->Data["Series"][$Serie]) )
- {
- $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
- return(array_sum($SerieData)/sizeof($SerieData));
- }
- else
- return(NULL);
- }
-
- /* Return the geometric mean of the given serie */
- function getGeometricMean($Serie)
- {
- if ( isset($this->Data["Series"][$Serie]) )
- {
- $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
- $Seriesum = 1; foreach($SerieData as $Key => $Value) { $Seriesum = $Seriesum * $Value; }
- return(pow($Seriesum,1/sizeof($SerieData)));
- }
- else
- return(NULL);
- }
-
- /* Return the harmonic mean of the given serie */
- function getHarmonicMean($Serie)
- {
- if ( isset($this->Data["Series"][$Serie]) )
- {
- $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
- $Seriesum = 0; foreach($SerieData as $Key => $Value) { $Seriesum = $Seriesum + 1/$Value; }
- return(sizeof($SerieData)/$Seriesum);
- }
- else
- return(NULL);
- }
-
- /* Return the standard deviation of the given serie */
- function getStandardDeviation($Serie)
- {
- if ( isset($this->Data["Series"][$Serie]) )
- {
- $Average = $this->getSerieAverage($Serie);
- $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
-
- $DeviationSum = 0;
- foreach($SerieData as $Key => $Value)
- $DeviationSum = $DeviationSum + ($Value-$Average)*($Value-$Average);
-
- $Deviation = sqrt($DeviationSum/count($SerieData));
-
- return($Deviation);
- }
- else
- return(NULL);
- }
-
- /* Return the Coefficient of variation of the given serie */
- function getCoefficientOfVariation($Serie)
- {
- if ( isset($this->Data["Series"][$Serie]) )
- {
- $Average = $this->getSerieAverage($Serie);
- $StandardDeviation = $this->getStandardDeviation($Serie);
-
- if ( $StandardDeviation != 0 )
- return($StandardDeviation/$Average);
- else
- return(NULL);
- }
- else
- return(NULL);
- }
-
- /* Return the median value of the given serie */
- function getSerieMedian($Serie)
- {
- if ( isset($this->Data["Series"][$Serie]) )
- {
- $SerieData = $this->stripVOID($this->Data["Series"][$Serie]["Data"]);
- sort($SerieData);
- $SerieCenter = floor(sizeof($SerieData)/2);
-
- if ( isset($SerieData[$SerieCenter]) )
- return($SerieData[$SerieCenter]);
- else
- return(NULL);
- }
- else
- return(NULL);
- }
-
- /* Return the x th percentil of the given serie */
- function getSeriePercentile($Serie="Serie1",$Percentil=95)
- {
- if (!isset($this->Data["Series"][$Serie]["Data"])) { return(NULL); }
-
- $Values = count($this->Data["Series"][$Serie]["Data"])-1;
- if ( $Values < 0 ) { $Values = 0; }
-
- $PercentilID = floor(($Values/100)*$Percentil+.5);
- $SortedValues = $this->Data["Series"][$Serie]["Data"];
- sort($SortedValues);
-
- if ( is_numeric($SortedValues[$PercentilID]) )
- return($SortedValues[$PercentilID]);
- else
- return(NULL);
- }
-
- /* Add random values to a given serie */
- function addRandomValues($SerieName="Serie1",$Options="")
- {
- $Values = isset($Options["Values"]) ? $Options["Values"] : 20;
- $Min = isset($Options["Min"]) ? $Options["Min"] : 0;
- $Max = isset($Options["Max"]) ? $Options["Max"] : 100;
- $withFloat = isset($Options["withFloat"]) ? $Options["withFloat"] : FALSE;
-
- for ($i=0;$i<=$Values;$i++)
- {
- if ( $withFloat ) { $Value = rand($Min*100,$Max*100)/100; } else { $Value = rand($Min,$Max); }
- $this->addPoints($Value,$SerieName);
- }
- }
-
- /* Test if we have valid data */
- function containsData()
- {
- if (!isset($this->Data["Series"])) { return(FALSE); }
-
- $Result = FALSE;
- foreach($this->Data["Series"] as $Key => $Value)
- { if ( $this->Data["Abscissa"] != $Key && $this->Data["Series"][$Key]["isDrawable"]==TRUE) { $Result=TRUE; } }
- return($Result);
- }
-
- /* Set the display mode of an Axis */
- function setAxisDisplay($AxisID,$Mode=AXIS_FORMAT_DEFAULT,$Format=NULL)
- {
- if ( isset($this->Data["Axis"][$AxisID] ) )
- {
- $this->Data["Axis"][$AxisID]["Display"] = $Mode;
- if ( $Format != NULL ) { $this->Data["Axis"][$AxisID]["Format"] = $Format; }
- }
- }
-
- /* Set the position of an Axis */
- function setAxisPosition($AxisID,$Position=AXIS_POSITION_LEFT)
- { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Position"] = $Position; } }
-
- /* Associate an unit to an axis */
- function setAxisUnit($AxisID,$Unit)
- { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Unit"] = $Unit; } }
-
- /* Associate a name to an axis */
- function setAxisName($AxisID,$Name)
- { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Name"] = $Name; } }
-
- /* Associate a color to an axis */
- function setAxisColor($AxisID,$Format)
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
-
- if ( isset($this->Data["Axis"][$AxisID] ) )
- {
- $this->Data["Axis"][$AxisID]["Color"]["R"] = $R;
- $this->Data["Axis"][$AxisID]["Color"]["G"] = $G;
- $this->Data["Axis"][$AxisID]["Color"]["B"] = $B;
- $this->Data["Axis"][$AxisID]["Color"]["Alpha"] = $Alpha;
- }
- }
-
-
- /* Design an axis as X or Y member */
- function setAxisXY($AxisID,$Identity=AXIS_Y)
- { if ( isset($this->Data["Axis"][$AxisID] ) ) { $this->Data["Axis"][$AxisID]["Identity"] = $Identity; } }
-
- /* Associate one data serie with one axis */
- function setSerieOnAxis($Series,$AxisID)
- {
- if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
- foreach($Series as $Key => $Serie)
- {
- $PreviousAxis = $this->Data["Series"][$Serie]["Axis"];
-
- /* Create missing axis */
- if ( !isset($this->Data["Axis"][$AxisID] ) )
- { $this->Data["Axis"][$AxisID]["Position"] = AXIS_POSITION_LEFT; $this->Data["Axis"][$AxisID]["Identity"] = AXIS_Y;}
-
- $this->Data["Series"][$Serie]["Axis"] = $AxisID;
-
- /* Cleanup unused axis */
- $Found = FALSE;
- foreach($this->Data["Series"] as $SerieName => $Values) { if ( $Values["Axis"] == $PreviousAxis ) { $Found = TRUE; } }
- if (!$Found) { unset($this->Data["Axis"][$PreviousAxis]); }
- }
- }
-
- /* Define if a serie should be draw with ticks */
- function setSerieTicks($Series,$Width=0)
- {
- if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
- foreach($Series as $Key => $Serie) { if ( isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Ticks"] = $Width; } }
- }
-
- /* Define if a serie should be draw with a special weight */
- function setSerieWeight($Series,$Weight=0)
- {
- if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
- foreach($Series as $Key => $Serie) { if ( isset($this->Data["Series"][$Serie]) ) { $this->Data["Series"][$Serie]["Weight"] = $Weight; } }
- }
-
- /* Returns the palette of the given serie */
- function getSeriePalette($Serie)
- {
- if ( !isset($this->Data["Series"][$Serie]) ) { return(NULL); }
-
- $Result = "";
- $Result["R"] = $this->Data["Series"][$Serie]["Color"]["R"];
- $Result["G"] = $this->Data["Series"][$Serie]["Color"]["G"];
- $Result["B"] = $this->Data["Series"][$Serie]["Color"]["B"];
- $Result["Alpha"] = $this->Data["Series"][$Serie]["Color"]["Alpha"];
-
- return($Result);
- }
-
- /* Set the color of one serie */
- function setPalette($Series,$Format=NULL)
- {
- if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
-
- foreach($Series as $Key => $Serie)
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
-
- if ( isset($this->Data["Series"][$Serie]) )
- {
- $OldR = $this->Data["Series"][$Serie]["Color"]["R"]; $OldG = $this->Data["Series"][$Serie]["Color"]["G"]; $OldB = $this->Data["Series"][$Serie]["Color"]["B"];
- $this->Data["Series"][$Serie]["Color"]["R"] = $R;
- $this->Data["Series"][$Serie]["Color"]["G"] = $G;
- $this->Data["Series"][$Serie]["Color"]["B"] = $B;
- $this->Data["Series"][$Serie]["Color"]["Alpha"] = $Alpha;
-
- /* Do reverse processing on the internal palette array */
- foreach ($this->Palette as $Key => $Value)
- { if ($Value["R"] == $OldR && $Value["G"] == $OldG && $Value["B"] == $OldB) { $this->Palette[$Key]["R"] = $R; $this->Palette[$Key]["G"] = $G; $this->Palette[$Key]["B"] = $B; $this->Palette[$Key]["Alpha"] = $Alpha;} }
- }
- }
- }
-
- /* Load a palette file */
- function loadPalette($FileName,$Overwrite=FALSE)
- {
- if ( !file_exists($FileName) ) { return(-1); }
- if ( $Overwrite ) { $this->Palette = ""; }
-
- $fileHandle = @fopen($FileName, "r");
- if (!$fileHandle) { return(-1); }
- while (!feof($fileHandle))
- {
- $buffer = fgets($fileHandle, 4096);
- if ( preg_match("/,/",$buffer) )
- {
- list($R,$G,$B,$Alpha) = preg_split("/,/",$buffer);
- if ( $this->Palette == "" ) { $ID = 0; } else { $ID = count($this->Palette); }
- $this->Palette[$ID] = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
- }
- }
- fclose($fileHandle);
-
- /* Apply changes to current series */
- $ID = 0;
- if ( isset($this->Data["Series"]))
- {
- foreach($this->Data["Series"] as $Key => $Value)
- {
- if ( !isset($this->Palette[$ID]) )
- $this->Data["Series"][$Key]["Color"] = array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>0);
- else
- $this->Data["Series"][$Key]["Color"] = $this->Palette[$ID];
- $ID++;
- }
- }
- }
-
- /* Initialise a given scatter serie */
- function initScatterSerie($ID)
- {
- if ( isset($this->Data["ScatterSeries"][$ID]) ) { return(0); }
-
- $this->Data["ScatterSeries"][$ID]["Description"] = "Scatter ".$ID;
- $this->Data["ScatterSeries"][$ID]["isDrawable"] = TRUE;
- $this->Data["ScatterSeries"][$ID]["Picture"] = NULL;
- $this->Data["ScatterSeries"][$ID]["Ticks"] = 0;
- $this->Data["ScatterSeries"][$ID]["Weight"] = 0;
-
- if ( isset($this->Palette[$ID]) )
- $this->Data["ScatterSeries"][$ID]["Color"] = $this->Palette[$ID];
- else
- {
- $this->Data["ScatterSeries"][$ID]["Color"]["R"] = rand(0,255);
- $this->Data["ScatterSeries"][$ID]["Color"]["G"] = rand(0,255);
- $this->Data["ScatterSeries"][$ID]["Color"]["B"] = rand(0,255);
- $this->Data["ScatterSeries"][$ID]["Color"]["Alpha"] = 100;
- }
- }
-
- /* Initialise a given serie */
- function initialise($Serie)
- {
- if ( isset($this->Data["Series"]) ) { $ID = count($this->Data["Series"]); } else { $ID = 0; }
-
- $this->Data["Series"][$Serie]["Description"] = $Serie;
- $this->Data["Series"][$Serie]["isDrawable"] = TRUE;
- $this->Data["Series"][$Serie]["Picture"] = NULL;
- $this->Data["Series"][$Serie]["Max"] = NULL;
- $this->Data["Series"][$Serie]["Min"] = NULL;
- $this->Data["Series"][$Serie]["Axis"] = 0;
- $this->Data["Series"][$Serie]["Ticks"] = 0;
- $this->Data["Series"][$Serie]["Weight"] = 0;
- $this->Data["Series"][$Serie]["Shape"] = SERIE_SHAPE_FILLEDCIRCLE;
-
- if ( isset($this->Palette[$ID]) )
- $this->Data["Series"][$Serie]["Color"] = $this->Palette[$ID];
- else
- {
- $this->Data["Series"][$Serie]["Color"]["R"] = rand(0,255);
- $this->Data["Series"][$Serie]["Color"]["G"] = rand(0,255);
- $this->Data["Series"][$Serie]["Color"]["B"] = rand(0,255);
- $this->Data["Series"][$Serie]["Color"]["Alpha"] = 100;
- }
- }
-
- function normalize($NormalizationFactor=100,$UnitChange=NULL,$Round=1)
- {
- $Abscissa = $this->Data["Abscissa"];
-
- $SelectedSeries = "";
- $MaxVal = 0;
- foreach($this->Data["Axis"] as $AxisID => $Axis)
- {
- if ( $UnitChange != NULL ) { $this->Data["Axis"][$AxisID]["Unit"] = $UnitChange; }
-
- foreach($this->Data["Series"] as $SerieName => $Serie)
- {
- if ($Serie["Axis"] == $AxisID && $Serie["isDrawable"] == TRUE && $SerieName != $Abscissa)
- {
- $SelectedSeries[$SerieName] = $SerieName;
-
- if ( count($Serie["Data"] ) > $MaxVal ) { $MaxVal = count($Serie["Data"]); }
- }
- }
- }
-
- for($i=0;$i<=$MaxVal-1;$i++)
- {
- $Factor = 0;
- foreach ($SelectedSeries as $Key => $SerieName )
- {
- $Value = $this->Data["Series"][$SerieName]["Data"][$i];
- if ( $Value != VOID )
- $Factor = $Factor + abs($Value);
- }
-
- if ( $Factor != 0 )
- {
- $Factor = $NormalizationFactor / $Factor;
-
- foreach ($SelectedSeries as $Key => $SerieName )
- {
- $Value = $this->Data["Series"][$SerieName]["Data"][$i];
-
- if ( $Value != VOID && $Factor != $NormalizationFactor )
- $this->Data["Series"][$SerieName]["Data"][$i] = round(abs($Value)*$Factor,$Round);
- elseif ( $Value == VOID || $Value == 0 )
- $this->Data["Series"][$SerieName]["Data"][$i] = VOID;
- elseif ( $Factor == $NormalizationFactor )
- $this->Data["Series"][$SerieName]["Data"][$i] = $NormalizationFactor;
- }
- }
- }
-
- foreach ($SelectedSeries as $Key => $SerieName )
- {
- $this->Data["Series"][$SerieName]["Max"] = max($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
- $this->Data["Series"][$SerieName]["Min"] = min($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
- }
- }
-
- /* Load data from a CSV (or similar) data source */
- function importFromCSV($FileName,$Options="")
- {
- $Delimiter = isset($Options["Delimiter"]) ? $Options["Delimiter"] : ",";
- $GotHeader = isset($Options["GotHeader"]) ? $Options["GotHeader"] : FALSE;
- $SkipColumns = isset($Options["SkipColumns"]) ? $Options["SkipColumns"] : array(-1);
- $DefaultSerieName = isset($Options["DefaultSerieName"]) ? $Options["DefaultSerieName"] : "Serie";
-
- $Handle = @fopen($FileName,"r");
- if ($Handle)
- {
- $HeaderParsed = FALSE; $SerieNames = "";
- while (!feof($Handle))
- {
- $Buffer = fgets($Handle, 4096);
- $Buffer = str_replace(chr(10),"",$Buffer);
- $Buffer = str_replace(chr(13),"",$Buffer);
- $Values = preg_split("/".$Delimiter."/",$Buffer);
-
- if ( $Buffer != "" )
- {
- if ( $GotHeader && !$HeaderParsed )
- {
- foreach($Values as $Key => $Name) { if ( !in_array($Key,$SkipColumns) ) { $SerieNames[$Key] = $Name; } }
- $HeaderParsed = TRUE;
- }
- else
- {
- if ($SerieNames == "" ) { foreach($Values as $Key => $Name) { if ( !in_array($Key,$SkipColumns) ) { $SerieNames[$Key] = $DefaultSerieName.$Key; } } }
- foreach($Values as $Key => $Value) { if ( !in_array($Key,$SkipColumns) ) { $this->addPoints($Value,$SerieNames[$Key]); } }
- }
- }
- }
- fclose($Handle);
- }
- }
-
- /* Create a dataset based on a formula */
- /* COMMENTED BY PIWIK to avoid eval()
- function createFunctionSerie($SerieName,$Formula="",$Options="")
- {
- $MinX = isset($Options["MinX"]) ? $Options["MinX"] : -10;
- $MaxX = isset($Options["MaxX"]) ? $Options["MaxX"] : 10;
- $XStep = isset($Options["XStep"]) ? $Options["XStep"] : 1;
- $AutoDescription = isset($Options["AutoDescription"]) ? $Options["AutoDescription"] : FALSE;
- $RecordAbscissa = isset($Options["RecordAbscissa"]) ? $Options["RecordAbscissa"] : FALSE;
- $AbscissaSerie = isset($Options["AbscissaSerie"]) ? $Options["AbscissaSerie"] : "Abscissa";
-
- if ( $Formula == "" ) { return(0); }
-
- $Result = ""; $Abscissa = "";
- for($i=$MinX; $i<=$MaxX; $i=$i+$XStep)
- {
- $Expression = "\$return = '!'.(".str_replace("z",$i,$Formula).");";
- if ( @eval($Expression) === FALSE ) { $return = VOID; }
- if ( $return == "!" ) { $return = VOID; } else { $return = $this->right($return,strlen($return)-1); }
- if ( $return == "NAN" ) { $return = VOID; }
- if ( $return == "INF" ) { $return = VOID; }
- if ( $return == "-INF" ) { $return = VOID; }
-
- $Abscissa[] = $i;
- $Result[] = $return;
- }
-
- $this->addPoints($Result,$SerieName);
- if ( $AutoDescription ) { $this->setSerieDescription($SerieName,$Formula); }
- if ( $RecordAbscissa ) { $this->addPoints($Abscissa,$AbscissaSerie); }
- }*/
-
- function negateValues($Series)
- {
- if ( !is_array($Series) ) { $Series = $this->convertToArray($Series); }
- foreach($Series as $Key => $SerieName)
- {
- if (isset($this->Data["Series"][$SerieName]))
- {
- $Data = "";
- foreach($this->Data["Series"][$SerieName]["Data"] as $Key => $Value)
- { if ( $Value == VOID ) { $Data[] = VOID; } else { $Data[] = -$Value; } }
- $this->Data["Series"][$SerieName]["Data"] = $Data;
-
- $this->Data["Series"][$SerieName]["Max"] = max($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
- $this->Data["Series"][$SerieName]["Min"] = min($this->stripVOID($this->Data["Series"][$SerieName]["Data"]));
- }
- }
- }
-
- /* Return the data & configuration of the series */
- function getData()
- { return($this->Data); }
-
- /* Save a palette element */
- function savePalette($ID,$Color)
- { $this->Palette[$ID] = $Color; }
-
- /* Return the palette of the series */
- function getPalette()
- { return($this->Palette); }
-
- /* Called by the scaling algorithm to save the config */
- function saveAxisConfig($Axis) { $this->Data["Axis"]=$Axis; }
-
- /* Save the Y Margin if set */
- function saveYMargin($Value) { $this->Data["YMargin"]=$Value; }
-
- /* Save extended configuration to the pData object */
- function saveExtendedData($Tag,$Values) { $this->Data["Extended"][$Tag]=$Values; }
-
- /* Called by the scaling algorithm to save the orientation of the scale */
- function saveOrientation($Orientation) { $this->Data["Orientation"]=$Orientation; }
-
- /* Convert a string to a single elements array */
- function convertToArray($Value)
- { $Values = ""; $Values[] = $Value; return($Values); }
-
- /* Class string wrapper */
- function __toString()
- { return("pData object."); }
-
- function left($value,$NbChar) { return substr($value,0,$NbChar); }
- function right($value,$NbChar) { return substr($value,strlen($value)-$NbChar,$NbChar); }
- function mid($value,$Depart,$NbChar) { return substr($value,$Depart-1,$NbChar); }
- }
-?> \ No newline at end of file
diff --git a/libs/pChart/class/pDraw.class.php b/libs/pChart/class/pDraw.class.php
deleted file mode 100755
index 0b30d99279..0000000000
--- a/libs/pChart/class/pDraw.class.php
+++ /dev/null
@@ -1,6226 +0,0 @@
-<?php
- /*
- pDraw - class extension with drawing methods
-
- Version : 2.1.4
- Made by : Jean-Damien POGOLOTTI
- Last Update : 19/01/2014
-
- This file can be distributed under the license you can find at :
-
- http://www.pchart.net/license
-
- You can find the whole class documentation on the pChart web site.
- */
-
- define("DIRECTION_VERTICAL" , 690001);
- define("DIRECTION_HORIZONTAL" , 690002);
-
- define("SCALE_POS_LEFTRIGHT" , 690101);
- define("SCALE_POS_TOPBOTTOM" , 690102);
-
- define("SCALE_MODE_FLOATING" , 690201);
- define("SCALE_MODE_START0" , 690202);
- define("SCALE_MODE_ADDALL" , 690203);
- define("SCALE_MODE_ADDALL_START0" , 690204);
- define("SCALE_MODE_MANUAL" , 690205);
-
- define("SCALE_SKIP_NONE" , 690301);
- define("SCALE_SKIP_SAME" , 690302);
- define("SCALE_SKIP_NUMBERS" , 690303);
-
- define("TEXT_ALIGN_TOPLEFT" , 690401);
- define("TEXT_ALIGN_TOPMIDDLE" , 690402);
- define("TEXT_ALIGN_TOPRIGHT" , 690403);
- define("TEXT_ALIGN_MIDDLELEFT" , 690404);
- define("TEXT_ALIGN_MIDDLEMIDDLE" , 690405);
- define("TEXT_ALIGN_MIDDLERIGHT" , 690406);
- define("TEXT_ALIGN_BOTTOMLEFT" , 690407);
- define("TEXT_ALIGN_BOTTOMMIDDLE" , 690408);
- define("TEXT_ALIGN_BOTTOMRIGHT" , 690409);
-
- define("POSITION_TOP" , 690501);
- define("POSITION_BOTTOM" , 690502);
-
- define("LABEL_POS_LEFT" , 690601);
- define("LABEL_POS_CENTER" , 690602);
- define("LABEL_POS_RIGHT" , 690603);
- define("LABEL_POS_TOP" , 690604);
- define("LABEL_POS_BOTTOM" , 690605);
- define("LABEL_POS_INSIDE" , 690606);
- define("LABEL_POS_OUTSIDE" , 690607);
-
- define("ORIENTATION_HORIZONTAL" , 690701);
- define("ORIENTATION_VERTICAL" , 690702);
- define("ORIENTATION_AUTO" , 690703);
-
- define("LEGEND_NOBORDER" , 690800);
- define("LEGEND_BOX" , 690801);
- define("LEGEND_ROUND" , 690802);
-
- define("LEGEND_VERTICAL" , 690901);
- define("LEGEND_HORIZONTAL" , 690902);
-
- define("LEGEND_FAMILY_BOX" , 691051);
- define("LEGEND_FAMILY_CIRCLE" , 691052);
- define("LEGEND_FAMILY_LINE" , 691053);
-
- define("DISPLAY_AUTO" , 691001);
- define("DISPLAY_MANUAL" , 691002);
-
- define("LABELING_ALL" , 691011);
- define("LABELING_DIFFERENT" , 691012);
-
- define("BOUND_MIN" , 691021);
- define("BOUND_MAX" , 691022);
- define("BOUND_BOTH" , 691023);
-
- define("BOUND_LABEL_POS_TOP" , 691031);
- define("BOUND_LABEL_POS_BOTTOM" , 691032);
- define("BOUND_LABEL_POS_AUTO" , 691033);
-
- define("CAPTION_LEFT_TOP" , 691041);
- define("CAPTION_RIGHT_BOTTOM" , 691042);
-
- define("GRADIENT_SIMPLE" , 691051);
- define("GRADIENT_EFFECT_CAN" , 691052);
-
- define("LABEL_TITLE_NOBACKGROUND" , 691061);
- define("LABEL_TITLE_BACKGROUND" , 691062);
-
- define("LABEL_POINT_NONE" , 691071);
- define("LABEL_POINT_CIRCLE" , 691072);
- define("LABEL_POINT_BOX" , 691073);
-
- define("ZONE_NAME_ANGLE_AUTO" , 691081);
-
- define("PI" , 3.14159265);
- define("ALL" , 69);
- define("NONE" , 31);
- define("AUTO" , 690000);
- define("OUT_OF_SIGHT" , -10000000000000);
-
- class pDraw
- {
- /* Returns the number of drawable series */
- function countDrawableSeries()
- {
- $Results = 0;
- $Data = $this->DataSet->getData();
-
- foreach($Data["Series"] as $SerieName => $Serie)
- { if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] ) { $Results++; } }
-
- return($Results);
- }
-
- /* Fix box coordinates */
- function fixBoxCoordinates($Xa,$Ya,$Xb,$Yb)
- {
- $X1 = min($Xa,$Xb); $Y1 = min($Ya,$Yb);
- $X2 = max($Xa,$Xb); $Y2 = max($Ya,$Yb);
-
- return(array($X1,$Y1,$X2,$Y2));
- }
-
- /* Draw a polygon */
- function drawPolygon($Points,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $NoFill = isset($Format["NoFill"]) ? $Format["NoFill"] : FALSE;
- $NoBorder = isset($Format["NoBorder"]) ? $Format["NoBorder"] : FALSE;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
- $BorderAlpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $Alpha / 2;
- $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
- $SkipX = isset($Format["SkipX"]) ? $Format["SkipX"] : OUT_OF_SIGHT;
- $SkipY = isset($Format["SkipY"]) ? $Format["SkipY"] : OUT_OF_SIGHT;
-
- /* Calling the ImageFilledPolygon() function over the $Points array will round it */
- $Backup = $Points;
-
- if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
-
- if ( $SkipX != OUT_OF_SIGHT ) { $SkipX = floor($SkipX); }
- if ( $SkipY != OUT_OF_SIGHT ) { $SkipY = floor($SkipY); }
-
- $RestoreShadow = $this->Shadow;
- if ( !$NoFill )
- {
- if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
- {
- $this->Shadow = FALSE;
- for($i=0;$i<=count($Points)-1;$i=$i+2)
- { $Shadow[] = $Points[$i] + $this->ShadowX; $Shadow[] = $Points[$i+1] + $this->ShadowY; }
- $this->drawPolygon($Shadow,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"NoBorder"=>TRUE));
- }
-
- $FillColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
-
- if ( count($Points) >= 6 )
- { ImageFilledPolygon($this->Picture,$Points,count($Points)/2,$FillColor); }
- }
-
- if ( !$NoBorder )
- {
- $Points = $Backup;
-
- if ( $NoFill )
- $BorderSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
- else
- $BorderSettings = array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha);
-
- for($i=0;$i<=count($Points)-1;$i=$i+2)
- {
- if ( isset($Points[$i+2]) )
- {
- if ( !($Points[$i] == $Points[$i+2] && $Points[$i] == $SkipX ) && !($Points[$i+1] == $Points[$i+3] && $Points[$i+1] == $SkipY ) )
- $this->drawLine($Points[$i],$Points[$i+1],$Points[$i+2],$Points[$i+3],$BorderSettings);
- }
- else
- {
- if ( !($Points[$i] == $Points[0] && $Points[$i] == $SkipX ) && !($Points[$i+1] == $Points[1] && $Points[$i+1] == $SkipY ) )
- $this->drawLine($Points[$i],$Points[$i+1],$Points[0],$Points[1],$BorderSettings);
- }
- }
- }
-
- $this->Shadow = $RestoreShadow;
- }
-
- /* Apply AALias correction to the rounded box boundaries */
- function offsetCorrection($Value,$Mode)
- {
- $Value = round($Value,1);
-
- if ( $Value == 0 && $Mode == 1 ) { return(.9); }
- if ( $Value == 0 ) { return(0); }
-
- if ( $Mode == 1)
- { if ( $Value == 1 ) { return(.9); }; if ( $Value == .1 ) { return(.9); }; if ( $Value == .2 ) { return(.8); }; if ( $Value == .3 ) { return(.8); }; if ( $Value == .4 ) { return(.7); }; if ( $Value == .5 ) { return(.5); }; if ( $Value == .6 ) { return(.8); }; if ( $Value == .7 ) { return(.7); }; if ( $Value == .8 ) { return(.6); }; if ( $Value == .9 ) { return(.9); }; }
-
- if ( $Mode == 2)
- { if ( $Value == 1 ) { return(.9); }; if ( $Value == .1 ) { return(.1); }; if ( $Value == .2 ) { return(.2); }; if ( $Value == .3 ) { return(.3); }; if ( $Value == .4 ) { return(.4); }; if ( $Value == .5 ) { return(.5); }; if ( $Value == .6 ) { return(.8); }; if ( $Value == .7 ) { return(.7); }; if ( $Value == .8 ) { return(.8); }; if ( $Value == .9 ) { return(.9); }; }
-
- if ( $Mode == 3)
- { if ( $Value == 1 ) { return(.1); }; if ( $Value == .1 ) { return(.1); }; if ( $Value == .2 ) { return(.2); }; if ( $Value == .3 ) { return(.3); }; if ( $Value == .4 ) { return(.4); }; if ( $Value == .5 ) { return(.9); }; if ( $Value == .6 ) { return(.6); }; if ( $Value == .7 ) { return(.7); }; if ( $Value == .8 ) { return(.4); }; if ( $Value == .9 ) { return(.5); }; }
-
- if ( $Mode == 4)
- { if ( $Value == 1 ) { return(-1); }; if ( $Value == .1 ) { return(.1); }; if ( $Value == .2 ) { return(.2); }; if ( $Value == .3 ) { return(.3); }; if ( $Value == .4 ) { return(.1); }; if ( $Value == .5 ) { return(-.1); }; if ( $Value == .6 ) { return(.8); }; if ( $Value == .7 ) { return(.1); }; if ( $Value == .8 ) { return(.1); }; if ( $Value == .9 ) { return(.1); }; }
- }
-
- /* Draw a rectangle with rounded corners */
- function drawRoundedRectangle($X1,$Y1,$X2,$Y2,$Radius,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
-
- list($X1,$Y1,$X2,$Y2) = $this->fixBoxCoordinates($X1,$Y1,$X2,$Y2);
-
- if ( $X2 - $X1 < $Radius ) { $Radius = floor((($X2-$X1))/2); }
- if ( $Y2 - $Y1 < $Radius ) { $Radius = floor((($Y2-$Y1))/2); }
-
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"NoBorder"=>TRUE);
-
- if ( $Radius <= 0 ) { $this->drawRectangle($X1,$Y1,$X2,$Y2,$Color); return(0); }
-
- if ( $this->Antialias )
- {
- $this->drawLine($X1+$Radius,$Y1,$X2-$Radius,$Y1,$Color);
- $this->drawLine($X2,$Y1+$Radius,$X2,$Y2-$Radius,$Color);
- $this->drawLine($X2-$Radius,$Y2,$X1+$Radius,$Y2,$Color);
- $this->drawLine($X1,$Y1+$Radius,$X1,$Y2-$Radius,$Color);
- }
- else
- {
- $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
- imageline($this->Picture,$X1+$Radius,$Y1,$X2-$Radius,$Y1,$Color);
- imageline($this->Picture,$X2,$Y1+$Radius,$X2,$Y2-$Radius,$Color);
- imageline($this->Picture,$X2-$Radius,$Y2,$X1+$Radius,$Y2,$Color);
- imageline($this->Picture,$X1,$Y1+$Radius,$X1,$Y2-$Radius,$Color);
- }
-
- $Step = 360 / (2 * PI * $Radius);
- for($i=0;$i<=90;$i=$i+$Step)
- {
- $X = cos(($i+180)*PI/180) * $Radius + $X1 + $Radius;
- $Y = sin(($i+180)*PI/180) * $Radius + $Y1 + $Radius;
- $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
-
- $X = cos(($i+90)*PI/180) * $Radius + $X1 + $Radius;
- $Y = sin(($i+90)*PI/180) * $Radius + $Y2 - $Radius;
- $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
-
- $X = cos($i*PI/180) * $Radius + $X2 - $Radius;
- $Y = sin($i*PI/180) * $Radius + $Y2 - $Radius;
- $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
-
- $X = cos(($i+270)*PI/180) * $Radius + $X2 - $Radius;
- $Y = sin(($i+270)*PI/180) * $Radius + $Y1 + $Radius;
- $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
- }
- }
-
- /* Draw a rectangle with rounded corners */
- function drawRoundedFilledRectangle($X1,$Y1,$X2,$Y2,$Radius,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
-
- /* Temporary fix for AA issue */
- $Y1 = floor($Y1); $Y2 = floor($Y2); $X1 = floor($X1); $X2 = floor($X2);
-
- if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
- if ( $BorderR == -1 ) { $BorderR = $R; $BorderG = $G; $BorderB = $B; }
-
- list($X1,$Y1,$X2,$Y2) = $this->fixBoxCoordinates($X1,$Y1,$X2,$Y2);
-
- if ( $X2 - $X1 < $Radius*2 ) { $Radius = floor((($X2-$X1))/4); }
- if ( $Y2 - $Y1 < $Radius*2 ) { $Radius = floor((($Y2-$Y1))/4); }
-
- $RestoreShadow = $this->Shadow;
- if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
- {
- $this->Shadow = FALSE;
- $this->drawRoundedFilledRectangle($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,$Radius,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
- }
-
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"NoBorder"=>TRUE);
-
- if ( $Radius <= 0 ) { $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Color); return(0); }
-
- $YTop = $Y1+$Radius;
- $YBottom = $Y2-$Radius;
-
- $Step = 360 / (2 * PI * $Radius);
- $Positions = ""; $Radius--; $MinY = ""; $MaxY = "";
- for($i=0;$i<=90;$i=$i+$Step)
- {
- $Xp1 = cos(($i+180)*PI/180) * $Radius + $X1 + $Radius;
- $Xp2 = cos(((90-$i)+270)*PI/180) * $Radius + $X2 - $Radius;
- $Yp = floor(sin(($i+180)*PI/180) * $Radius + $YTop);
- if ( $MinY == "" || $Yp > $MinY ) { $MinY = $Yp; }
-
- if ( $Xp1 <= floor($X1) ) { $Xp1++; }
- if ( $Xp2 >= floor($X2) ) { $Xp2--; }
- $Xp1++;
-
- if ( !isset($Positions[$Yp]) )
- { $Positions[$Yp]["X1"] = $Xp1; $Positions[$Yp]["X2"] = $Xp2; }
- else
- { $Positions[$Yp]["X1"] = ($Positions[$Yp]["X1"]+$Xp1)/2; $Positions[$Yp]["X2"] = ($Positions[$Yp]["X2"]+$Xp2)/2; }
-
- $Xp1 = cos(($i+90)*PI/180) * $Radius + $X1 + $Radius;
- $Xp2 = cos((90-$i)*PI/180) * $Radius + $X2 - $Radius;
- $Yp = floor(sin(($i+90)*PI/180) * $Radius + $YBottom);
- if ( $MaxY == "" || $Yp < $MaxY ) { $MaxY = $Yp; }
-
- if ( $Xp1 <= floor($X1) ) { $Xp1++; }
- if ( $Xp2 >= floor($X2) ) { $Xp2--; }
- $Xp1++;
-
- if ( !isset($Positions[$Yp]) )
- { $Positions[$Yp]["X1"] = $Xp1; $Positions[$Yp]["X2"] = $Xp2; }
- else
- { $Positions[$Yp]["X1"] = ($Positions[$Yp]["X1"]+$Xp1)/2; $Positions[$Yp]["X2"] = ($Positions[$Yp]["X2"]+$Xp2)/2; }
- }
-
- $ManualColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
- foreach($Positions as $Yp => $Bounds)
- {
- $X1 = $Bounds["X1"]; $X1Dec = $this->getFirstDecimal($X1); if ( $X1Dec != 0 ) { $X1 = floor($X1)+1; }
- $X2 = $Bounds["X2"]; $X2Dec = $this->getFirstDecimal($X2); if ( $X2Dec != 0 ) { $X2 = floor($X2)-1; }
- imageline($this->Picture,$X1,$Yp,$X2,$Yp,$ManualColor);
- }
- $this->drawFilledRectangle($X1,$MinY+1,floor($X2),$MaxY-1,$Color);
-
- $Radius++;
- $this->drawRoundedRectangle($X1,$Y1,$X2+1,$Y2-1,$Radius,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
-
- $this->Shadow = $RestoreShadow;
- }
-
- /* Draw a rectangle with rounded corners */
- function drawRoundedFilledRectangle_deprecated($X1,$Y1,$X2,$Y2,$Radius,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
-
- if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
- if ( $BorderR == -1 ) { $BorderR = $R; $BorderG = $G; $BorderB = $B; }
-
- list($X1,$Y1,$X2,$Y2) = $this->fixBoxCoordinates($X1,$Y1,$X2,$Y2);
-
- if ( $X2 - $X1 < $Radius ) { $Radius = floor((($X2-$X1)+2)/2); }
- if ( $Y2 - $Y1 < $Radius ) { $Radius = floor((($Y2-$Y1)+2)/2); }
-
- $RestoreShadow = $this->Shadow;
- if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
- {
- $this->Shadow = FALSE;
- $this->drawRoundedFilledRectangle($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,$Radius,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
- }
-
- if ( $this->getFirstDecimal($X2) >= 5 ) { $XOffset2 = 1; } else { $XOffset2 = 0; }
- if ( $this->getFirstDecimal($X1) <= 5 ) { $XOffset1 = 1; } else { $XOffset1 = 0; }
-
- if ( !$this->Antialias ) { $XOffset1 = 1; $XOffset2 = 1; }
-
- $YTop = floor($Y1+$Radius);
- $YBottom = floor($Y2-$Radius);
-
- $this->drawFilledRectangle($X1-$XOffset1,$YTop,$X2+$XOffset2,$YBottom,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"NoBorder"=>TRUE));
-
- $Step = 360 / (2 * PI * $Radius);
- $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
- $Color2 = $this->allocateColor($this->Picture,255,0,0,$Alpha);
- $Drawn = "";
-
- if ( $Alpha < 100 ) { $Drawn[$YTop] = FALSE; }
- if ( $Alpha < 100 ) { $Drawn[$YBottom] = TRUE; }
-
- for($i=0;$i<=90;$i=$i+$Step)
- {
- $Xp1 = cos(($i+180)*PI/180) * $Radius + $X1 + $Radius;
- $Xp2 = cos(((90-$i)+270)*PI/180) * $Radius + $X2 - $Radius;
- $Yp = sin(($i+180)*PI/180) * $Radius + $YTop;
-
- if ( $this->getFirstDecimal($Xp1) > 5 ) { $XOffset1 = 1; } else { $XOffset1 = 0; }
- if ( $this->getFirstDecimal($Xp2) > 5 ) { $XOffset2 = 1; } else { $XOffset2 = 0; }
- if ( $this->getFirstDecimal($Yp) > 5 ) { $YOffset = 1; } else { $YOffset = 0; }
-
- if ( !isset($Drawn[$Yp+$YOffset]) || $Alpha == 100 )
- imageline($this->Picture,$Xp1+$XOffset1,$Yp+$YOffset,$Xp2+$XOffset2,$Yp+$YOffset,$Color);
-
- $Drawn[$Yp+$YOffset] = $Xp2;
-
- $Xp1 = cos(($i+90)*PI/180) * $Radius + $X1 + $Radius;
- $Xp2 = cos((90-$i)*PI/180) * $Radius + $X2 - $Radius;
- $Yp = sin(($i+90)*PI/180) * $Radius + $YBottom;
-
- if ( $this->getFirstDecimal($Xp1) > 7 ) { $XOffset1 = 1; } else { $XOffset1 = 0; }
- if ( $this->getFirstDecimal($Xp2) > 7 ) { $XOffset2 = 1; } else { $XOffset2 = 0; }
- if ( $this->getFirstDecimal($Yp) > 5 ) { $YOffset = 1; } else { $YOffset = 0; }
-
- if ( !isset($Drawn[$Yp+$YOffset]) || $Alpha == 100 )
- imageline($this->Picture,$Xp1+$XOffset1,$Yp+$YOffset,$Xp2+$XOffset2,$Yp+$YOffset,$Color);
-
- $Drawn[$Yp+$YOffset] = $Xp2;
- }
-
- $this->drawRoundedRectangle($X1,$Y1,$X2,$Y2,$Radius,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
-
- $this->Shadow = $RestoreShadow;
- }
-
- /* Draw a rectangle */
- function drawRectangle($X1,$Y1,$X2,$Y2,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
- $NoAngle = isset($Format["NoAngle"]) ? $Format["NoAngle"] : FALSE;
-
- if ($X1 > $X2) { list($X1, $X2) = array($X2, $X1); }
- if ($Y1 > $Y2) { list($Y1, $Y2) = array($Y2, $Y1); }
-
- if ( $this->Antialias )
- {
- if ( $NoAngle )
- {
- $this->drawLine($X1+1,$Y1,$X2-1,$Y1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
- $this->drawLine($X2,$Y1+1,$X2,$Y2-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
- $this->drawLine($X2-1,$Y2,$X1+1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
- $this->drawLine($X1,$Y1+1,$X1,$Y2-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
- }
- else
- {
- $this->drawLine($X1+1,$Y1,$X2-1,$Y1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
- $this->drawLine($X2,$Y1,$X2,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
- $this->drawLine($X2-1,$Y2,$X1+1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
- $this->drawLine($X1,$Y1,$X1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
- }
- }
- else
- {
- $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
- imagerectangle($this->Picture,$X1,$Y1,$X2,$Y2,$Color);
- }
- }
-
- /* Draw a filled rectangle */
- function drawFilledRectangle($X1,$Y1,$X2,$Y2,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
- $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha;
- $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
- $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
- $NoAngle = isset($Format["NoAngle"]) ? $Format["NoAngle"] : NULL;
- $Dash = isset($Format["Dash"]) ? $Format["Dash"] : FALSE;
- $DashStep = isset($Format["DashStep"]) ? $Format["DashStep"] : 4;
- $DashR = isset($Format["DashR"]) ? $Format["DashR"] : 0;
- $DashG = isset($Format["DashG"]) ? $Format["DashG"] : 0;
- $DashB = isset($Format["DashB"]) ? $Format["DashB"] : 0;
- $NoBorder = isset($Format["NoBorder"]) ? $Format["NoBorder"] : FALSE;
-
- if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
-
- if ($X1 > $X2) { list($X1, $X2) = array($X2, $X1); }
- if ($Y1 > $Y2) { list($Y1, $Y2) = array($Y2, $Y1); }
-
- $RestoreShadow = $this->Shadow;
- if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
- {
- $this->Shadow = FALSE;
- $this->drawFilledRectangle($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Ticks"=>$Ticks,"NoAngle"=>$NoAngle));
- }
-
- $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
- if ( $NoAngle )
- {
- imagefilledrectangle($this->Picture,ceil($X1)+1,ceil($Y1),floor($X2)-1,floor($Y2),$Color);
- imageline($this->Picture,ceil($X1),ceil($Y1)+1,ceil($X1),floor($Y2)-1,$Color);
- imageline($this->Picture,floor($X2),ceil($Y1)+1,floor($X2),floor($Y2)-1,$Color);
- }
- else
- imagefilledrectangle($this->Picture,ceil($X1),ceil($Y1),floor($X2),floor($Y2),$Color);
-
- if ( $Dash )
- {
- if ( $BorderR != -1 ) { $iX1=$X1+1; $iY1=$Y1+1; $iX2=$X2-1; $iY2=$Y2-1; } else { $iX1=$X1; $iY1=$Y1; $iX2=$X2; $iY2=$Y2; }
-
- $Color = $this->allocateColor($this->Picture,$DashR,$DashG,$DashB,$Alpha);
- $Y=$iY1-$DashStep;
- for($X=$iX1; $X<=$iX2+($iY2-$iY1); $X=$X+$DashStep)
- {
- $Y=$Y+$DashStep;
- if ( $X > $iX2 ) { $Xa = $X-($X-$iX2); $Ya = $iY1+($X-$iX2); } else { $Xa = $X; $Ya = $iY1; }
- if ( $Y > $iY2 ) { $Xb = $iX1+($Y-$iY2); $Yb = $Y-($Y-$iY2); } else { $Xb = $iX1; $Yb = $Y; }
- imageline($this->Picture,$Xa,$Ya,$Xb,$Yb,$Color);
- }
- }
-
- if ( $this->Antialias && !$NoBorder )
- {
- if ( $X1 < ceil($X1) )
- {
- $AlphaA = $Alpha * (ceil($X1) - $X1);
- $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA);
- imageline($this->Picture,ceil($X1)-1,ceil($Y1),ceil($X1)-1,floor($Y2),$Color);
- }
-
- if ( $Y1 < ceil($Y1) )
- {
- $AlphaA = $Alpha * (ceil($Y1) - $Y1);
- $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA);
- imageline($this->Picture,ceil($X1),ceil($Y1)-1,floor($X2),ceil($Y1)-1,$Color);
- }
-
- if ( $X2 > floor($X2) )
- {
- $AlphaA = $Alpha * (.5-($X2 - floor($X2)));
- $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA);
- imageline($this->Picture,floor($X2)+1,ceil($Y1),floor($X2)+1,floor($Y2),$Color);
- }
-
- if ( $Y2 > floor($Y2) )
- {
- $AlphaA = $Alpha * (.5-($Y2 - floor($Y2)));
- $Color = $this->allocateColor($this->Picture,$R,$G,$B,$AlphaA);
- imageline($this->Picture,ceil($X1),floor($Y2)+1,floor($X2),floor($Y2)+1,$Color);
- }
- }
-
- if ( $BorderR != -1 )
- $this->drawRectangle($X1,$Y1,$X2,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$Ticks,"NoAngle"=>$NoAngle));
-
- $this->Shadow = $RestoreShadow;
- }
-
- /* Draw a rectangular marker of the specified size */
- function drawRectangleMarker($X,$Y,$Format="")
- {
- $Size = isset($Format["Size"]) ? $Format["Size"] : 4;
-
- $HalfSize = floor($Size/2);
- $this->drawFilledRectangle($X-$HalfSize,$Y-$HalfSize,$X+$HalfSize,$Y+$HalfSize,$Format);
- }
-
- /* Drawn a spline based on the bezier function */
- function drawSpline($Coordinates,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $Force = isset($Format["Force"]) ? $Format["Force"] : 30;
- $Forces = isset($Format["Forces"]) ? $Format["Forces"] : NULL;
- $ShowC = isset($Format["ShowControl"]) ? $Format["ShowControl"] : FALSE;
- $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
- $PathOnly = isset($Format["PathOnly"]) ? $Format["PathOnly"] : FALSE;
- $Weight = isset($Format["Weight"]) ? $Format["Weight"] : NULL;
-
- $Cpt = NULL; $Mode = NULL; $Result = "";
- for($i=1;$i<=count($Coordinates)-1;$i++)
- {
- $X1 = $Coordinates[$i-1][0]; $Y1 = $Coordinates[$i-1][1];
- $X2 = $Coordinates[$i][0]; $Y2 = $Coordinates[$i][1];
-
- if ( $Forces != NULL ) { $Force = $Forces[$i]; }
-
- /* First segment */
- if ( $i == 1 )
- { $Xv1 = $X1; $Yv1 = $Y1; }
- else
- {
- $Angle1 = $this->getAngle($XLast,$YLast,$X1,$Y1);
- $Angle2 = $this->getAngle($X1,$Y1,$X2,$Y2);
- $XOff = cos($Angle2 * PI / 180) * $Force + $X1;
- $YOff = sin($Angle2 * PI / 180) * $Force + $Y1;
-
- $Xv1 = cos($Angle1 * PI / 180) * $Force + $XOff;
- $Yv1 = sin($Angle1 * PI / 180) * $Force + $YOff;
- }
-
- /* Last segment */
- if ( $i == count($Coordinates)-1 )
- { $Xv2 = $X2; $Yv2 = $Y2; }
- else
- {
- $Angle1 = $this->getAngle($X2,$Y2,$Coordinates[$i+1][0],$Coordinates[$i+1][1]);
- $Angle2 = $this->getAngle($X1,$Y1,$X2,$Y2);
- $XOff = cos(($Angle2+180) * PI / 180) * $Force + $X2;
- $YOff = sin(($Angle2+180) * PI / 180) * $Force + $Y2;
-
- $Xv2 = cos(($Angle1+180) * PI / 180) * $Force + $XOff;
- $Yv2 = sin(($Angle1+180) * PI / 180) * $Force + $YOff;
- }
-
- $Path = $this->drawBezier($X1,$Y1,$X2,$Y2,$Xv1,$Yv1,$Xv2,$Yv2,$Format);
- if ($PathOnly) { $Result[] = $Path; }
-
- $XLast = $X1; $YLast = $Y1;
- }
-
- return($Result);
- }
-
- /* Draw a bezier curve with two controls points */
- function drawBezier($X1,$Y1,$X2,$Y2,$Xv1,$Yv1,$Xv2,$Yv2,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $ShowC = isset($Format["ShowControl"]) ? $Format["ShowControl"] : FALSE;
- $Segments = isset($Format["Segments"]) ? $Format["Segments"] : NULL;
- $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
- $NoDraw = isset($Format["NoDraw"]) ? $Format["NoDraw"] : FALSE;
- $PathOnly = isset($Format["PathOnly"]) ? $Format["PathOnly"] : FALSE;
- $Weight = isset($Format["Weight"]) ? $Format["Weight"] : NULL;
- $DrawArrow = isset($Format["DrawArrow"]) ? $Format["DrawArrow"] : FALSE;
- $ArrowSize = isset($Format["ArrowSize"]) ? $Format["ArrowSize"] : 10;
- $ArrowRatio = isset($Format["ArrowRatio"]) ? $Format["ArrowRatio"] : .5;
- $ArrowTwoHeads = isset($Format["ArrowTwoHeads"]) ? $Format["ArrowTwoHeads"] : FALSE;
-
- if ( $Segments == NULL )
- {
- $Length = $this->getLength($X1,$Y1,$X2,$Y2);
- $Precision = ($Length*125)/1000;
- }
- else
- $Precision = $Segments;
-
- $P[0]["X"] = $X1; $P[0]["Y"] = $Y1;
- $P[1]["X"] = $Xv1; $P[1]["Y"] = $Yv1;
- $P[2]["X"] = $Xv2; $P[2]["Y"] = $Yv2;
- $P[3]["X"] = $X2; $P[3]["Y"] = $Y2;
-
- /* Compute the bezier points */
- $Q = ""; $ID = 0; $Path = "";
- for($i=0;$i<=$Precision;$i=$i+1)
- {
- $u = $i / $Precision;
-
- $C = "";
- $C[0] = (1 - $u) * (1 - $u) * (1 - $u);
- $C[1] = ($u * 3) * (1 - $u) * (1 - $u);
- $C[2] = 3 * $u * $u * (1 - $u);
- $C[3] = $u * $u * $u;
-
- for($j=0;$j<=3;$j++)
- {
- if ( !isset($Q[$ID]) ) { $Q[$ID] = ""; }
- if ( !isset($Q[$ID]["X"]) ) { $Q[$ID]["X"] = 0; }
- if ( !isset($Q[$ID]["Y"]) ) { $Q[$ID]["Y"] = 0; }
-
- $Q[$ID]["X"] = $Q[$ID]["X"] + $P[$j]["X"] * $C[$j];
- $Q[$ID]["Y"] = $Q[$ID]["Y"] + $P[$j]["Y"] * $C[$j];
- }
- $ID++;
- }
- $Q[$ID]["X"] = $X2; $Q[$ID]["Y"] = $Y2;
-
- if ( !$NoDraw )
- {
- /* Display the control points */
- if ( $ShowC && !$PathOnly )
- {
- $Xv1 = floor($Xv1); $Yv1 = floor($Yv1); $Xv2 = floor($Xv2); $Yv2 = floor($Yv2);
-
- $this->drawLine($X1,$Y1,$X2,$Y2,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>30));
-
- $MyMarkerSettings = array("R"=>255,"G"=>0,"B"=>0,"BorderR"=>255,"BorderB"=>255,"BorderG"=>255,"Size"=>4);
- $this->drawRectangleMarker($Xv1,$Yv1,$MyMarkerSettings);
- $this->drawText($Xv1+4,$Yv1,"v1");
- $MyMarkerSettings = array("R"=>0,"G"=>0,"B"=>255,"BorderR"=>255,"BorderB"=>255,"BorderG"=>255,"Size"=>4);
- $this->drawRectangleMarker($Xv2,$Yv2,$MyMarkerSettings);
- $this->drawText($Xv2+4,$Yv2,"v2");
- }
-
- /* Draw the bezier */
- $LastX = NULL; $LastY = NULL; $Cpt = NULL; $Mode = NULL; $ArrowS = NULL;
- foreach ($Q as $Key => $Point)
- {
- $X = $Point["X"]; $Y = $Point["Y"];
-
- /* Get the first segment */
- if ( $ArrowS == NULL && $LastX != NULL && $LastY != NULL )
- { $ArrowS["X2"] = $LastX; $ArrowS["Y2"] = $LastY; $ArrowS["X1"] = $X; $ArrowS["Y1"] = $Y; }
-
- if ( $LastX != NULL && $LastY != NULL && !$PathOnly)
- list($Cpt,$Mode) = $this->drawLine($LastX,$LastY,$X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Cpt"=>$Cpt,"Mode"=>$Mode,"Weight"=>$Weight));
-
- /* Get the last segment */
- $ArrowE["X1"] = $LastX; $ArrowE["Y1"] = $LastY; $ArrowE["X2"] = $X; $ArrowE["Y2"] = $Y;
-
- $LastX = $X; $LastY = $Y;
- }
-
- if ( $DrawArrow && !$PathOnly )
- {
- $ArrowSettings = array("FillR"=>$R,"FillG"=>$G,"FillB"=>$B,"Alpha"=>$Alpha,"Size"=>$ArrowSize,"Ratio"=>$ArrowRatio);
- if ( $ArrowTwoHeads )
- $this->drawArrow($ArrowS["X1"],$ArrowS["Y1"],$ArrowS["X2"],$ArrowS["Y2"],$ArrowSettings);
-
- $this->drawArrow($ArrowE["X1"],$ArrowE["Y1"],$ArrowE["X2"],$ArrowE["Y2"],$ArrowSettings);
- }
- }
- return($Q);
- }
-
- /* Draw a line between two points */
- function drawLine($X1,$Y1,$X2,$Y2,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
- $Cpt = isset($Format["Cpt"]) ? $Format["Cpt"] : 1;
- $Mode = isset($Format["Mode"]) ? $Format["Mode"] : 1;
- $Weight = isset($Format["Weight"]) ? $Format["Weight"] : NULL;
- $Threshold = isset($Format["Threshold"]) ? $Format["Threshold"] : NULL;
-
- if ( $this->Antialias == FALSE && $Ticks == NULL )
- {
- if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
- {
- $ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$this->Shadowa);
- imageline($this->Picture,$X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,$ShadowColor);
- }
-
- $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
- imageline($this->Picture,$X1,$Y1,$X2,$Y2,$Color);
- return(0);
- }
-
- $Distance = sqrt(($X2-$X1)*($X2-$X1)+($Y2-$Y1)*($Y2-$Y1));
- if ( $Distance == 0 ) { return(-1); }
-
- /* Derivative algorithm for overweighted lines, re-route to polygons primitives */
- if ( $Weight != NULL )
- {
- $Angle = $this->getAngle($X1,$Y1,$X2,$Y2);
- $PolySettings = array ("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderAlpha"=>$Alpha);
-
- if ( $Ticks == NULL )
- {
- $Points = "";
- $Points[] = cos(deg2rad($Angle-90)) * $Weight + $X1; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Y1;
- $Points[] = cos(deg2rad($Angle+90)) * $Weight + $X1; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Y1;
- $Points[] = cos(deg2rad($Angle+90)) * $Weight + $X2; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Y2;
- $Points[] = cos(deg2rad($Angle-90)) * $Weight + $X2; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Y2;
-
- $this->drawPolygon($Points,$PolySettings);
- }
- else
- {
- for($i=0;$i<=$Distance;$i=$i+$Ticks*2)
- {
- $Xa = (($X2-$X1)/$Distance) * $i + $X1; $Ya = (($Y2-$Y1)/$Distance) * $i + $Y1;
- $Xb = (($X2-$X1)/$Distance) * ($i+$Ticks) + $X1; $Yb = (($Y2-$Y1)/$Distance) * ($i+$Ticks) + $Y1;
-
- $Points = "";
- $Points[] = cos(deg2rad($Angle-90)) * $Weight + $Xa; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Ya;
- $Points[] = cos(deg2rad($Angle+90)) * $Weight + $Xa; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Ya;
- $Points[] = cos(deg2rad($Angle+90)) * $Weight + $Xb; $Points[] = sin(deg2rad($Angle+90)) * $Weight + $Yb;
- $Points[] = cos(deg2rad($Angle-90)) * $Weight + $Xb; $Points[] = sin(deg2rad($Angle-90)) * $Weight + $Yb;
-
- $this->drawPolygon($Points,$PolySettings);
- }
- }
-
- return(1);
- }
-
- $XStep = ($X2-$X1) / $Distance;
- $YStep = ($Y2-$Y1) / $Distance;
-
- for($i=0;$i<=$Distance;$i++)
- {
- $X = $i * $XStep + $X1;
- $Y = $i * $YStep + $Y1;
-
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
-
- if ( $Threshold != NULL )
- {
- foreach($Threshold as $Key => $Parameters)
- {
- if ( $Y <= $Parameters["MinX"] && $Y >= $Parameters["MaxX"])
- {
- if ( isset($Parameters["R"]) ) { $RT = $Parameters["R"]; } else { $RT = 0; }
- if ( isset($Parameters["G"]) ) { $GT = $Parameters["G"]; } else { $GT = 0; }
- if ( isset($Parameters["B"]) ) { $BT = $Parameters["B"]; } else { $BT = 0; }
- if ( isset($Parameters["Alpha"]) ) { $AlphaT = $Parameters["Alpha"]; } else { $AlphaT = 0; }
- $Color = array("R"=>$RT,"G"=>$GT,"B"=>$BT,"Alpha"=>$AlphaT);
- }
- }
- }
-
- if ( $Ticks != NULL )
- {
- if ( $Cpt % $Ticks == 0 )
- { $Cpt = 0; if ( $Mode == 1 ) { $Mode = 0; } else { $Mode = 1; } }
-
- if ( $Mode == 1 )
- $this->drawAntialiasPixel($X,$Y,$Color);
-
- $Cpt++;
- }
- else
- $this->drawAntialiasPixel($X,$Y,$Color);
- }
-
- return(array($Cpt,$Mode));
- }
-
- /* Draw a circle */
- function drawCircle($Xc,$Yc,$Height,$Width,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
-
- $Height = abs($Height);
- $Width = abs($Width);
-
- if ( $Height == 0 ) { $Height = 1; }
- if ( $Width == 0 ) { $Width = 1; }
- $Xc = floor($Xc); $Yc = floor($Yc);
-
- $RestoreShadow = $this->Shadow;
- if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
- {
- $this->Shadow = FALSE;
- $this->drawCircle($Xc+$this->ShadowX,$Yc+$this->ShadowY,$Height,$Width,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Ticks"=>$Ticks));
- }
-
- if ( $Width == 0 ) { $Width = $Height; }
- if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; }
- if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; }
- if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; }
-
- $Step = 360 / (2 * PI * max($Width,$Height));
- $Mode = 1; $Cpt = 1;
- for($i=0;$i<=360;$i=$i+$Step)
- {
- $X = cos($i*PI/180) * $Height + $Xc;
- $Y = sin($i*PI/180) * $Width + $Yc;
-
- if ( $Ticks != NULL )
- {
- if ( $Cpt % $Ticks == 0 )
- { $Cpt = 0; if ( $Mode == 1 ) { $Mode = 0; } else { $Mode = 1; } }
-
- if ( $Mode == 1 )
- $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
-
- $Cpt++;
- }
- else
- $this->drawAntialiasPixel($X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
-
- }
- $this->Shadow = $RestoreShadow;
- }
-
- /* Draw a filled circle */
- function drawFilledCircle($X,$Y,$Radius,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
- $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha;
- $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
- $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
-
- if ( $Radius == 0 ) { $Radius = 1; }
- if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
- $X = floor($X); $Y = floor($Y);
-
- $Radius = abs($Radius);
-
- $RestoreShadow = $this->Shadow;
- if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
- {
- $this->Shadow = FALSE;
- $this->drawFilledCircle($X+$this->ShadowX,$Y+$this->ShadowY,$Radius,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Ticks"=>$Ticks));
- }
-
- $this->Mask = "";
- $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
- for ($i=0; $i<=$Radius*2; $i++)
- {
- $Slice = sqrt($Radius * $Radius - ($Radius - $i) * ($Radius - $i));
- $XPos = floor($Slice);
- $YPos = $Y + $i - $Radius;
- $AAlias = $Slice - floor($Slice);
-
- $this->Mask[$X-$XPos][$YPos] = TRUE;
- $this->Mask[$X+$XPos][$YPos] = TRUE;
- imageline($this->Picture,$X-$XPos,$YPos,$X+$XPos,$YPos,$Color);
- }
- if ( $this->Antialias )
- $this->drawCircle($X,$Y,$Radius,$Radius,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
-
- $this->Mask = "";
-
- if ( $BorderR != -1 )
- $this->drawCircle($X,$Y,$Radius,$Radius,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$Ticks));
-
- $this->Shadow = $RestoreShadow;
- }
-
- /* Write text */
- function drawText($X,$Y,$Text,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : $this->FontColorR;
- $G = isset($Format["G"]) ? $Format["G"] : $this->FontColorG;
- $B = isset($Format["B"]) ? $Format["B"] : $this->FontColorB;
- $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
- $Align = isset($Format["Align"]) ? $Format["Align"] : TEXT_ALIGN_BOTTOMLEFT;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $this->FontColorA;
- $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
- $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
- $ShowOrigine = isset($Format["ShowOrigine"]) ? $Format["ShowOrigine"] : FALSE;
- $TOffset = isset($Format["TOffset"]) ? $Format["TOffset"] : 2;
- $DrawBox = isset($Format["DrawBox"]) ? $Format["DrawBox"] : FALSE;
- $DrawBoxBorder = isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : TRUE;
- $BorderOffset = isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 6;
- $BoxRounded = isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : FALSE;
- $RoundedRadius = isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 6;
- $BoxR = isset($Format["BoxR"]) ? $Format["BoxR"] : 255;
- $BoxG = isset($Format["BoxG"]) ? $Format["BoxG"] : 255;
- $BoxB = isset($Format["BoxB"]) ? $Format["BoxB"] : 255;
- $BoxAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 50;
- $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : "";
- $BoxBorderR = isset($Format["BoxR"]) ? $Format["BoxR"] : 0;
- $BoxBorderG = isset($Format["BoxG"]) ? $Format["BoxG"] : 0;
- $BoxBorderB = isset($Format["BoxB"]) ? $Format["BoxB"] : 0;
- $BoxBorderAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 50;
- $NoShadow = isset($Format["NoShadow"]) ? $Format["NoShadow"] : FALSE;
-
- $Shadow = $this->Shadow;
- if ( $NoShadow ) { $this->Shadow = FALSE; }
-
- if ( $BoxSurrounding != "" ) { $BoxBorderR = $BoxR - $BoxSurrounding; $BoxBorderG = $BoxG - $BoxSurrounding; $BoxBorderB = $BoxB - $BoxSurrounding; $BoxBorderAlpha = $BoxAlpha; }
-
- if ( $ShowOrigine )
- {
- $MyMarkerSettings = array("R"=>255,"G"=>0,"B"=>0,"BorderR"=>255,"BorderB"=>255,"BorderG"=>255,"Size"=>4);
- $this->drawRectangleMarker($X,$Y,$MyMarkerSettings);
- }
-
- $TxtPos = $this->getTextBox($X,$Y,$FontName,$FontSize,$Angle,$Text);
-
- if ( $DrawBox && ($Angle == 0 || $Angle == 90 || $Angle == 180 || $Angle == 270))
- {
- $T[0]["X"]=0;$T[0]["Y"]=0;$T[1]["X"]=0;$T[1]["Y"]=0;$T[2]["X"]=0;$T[2]["Y"]=0;$T[3]["X"]=0;$T[3]["Y"]=0;
- if ( $Angle == 0 ) { $T[0]["X"]=-$TOffset;$T[0]["Y"]=$TOffset;$T[1]["X"]=$TOffset;$T[1]["Y"]=$TOffset;$T[2]["X"]=$TOffset;$T[2]["Y"]=-$TOffset;$T[3]["X"]=-$TOffset;$T[3]["Y"]=-$TOffset; }
-
- $X1 = min($TxtPos[0]["X"],$TxtPos[1]["X"],$TxtPos[2]["X"],$TxtPos[3]["X"]) - $BorderOffset + 3;
- $Y1 = min($TxtPos[0]["Y"],$TxtPos[1]["Y"],$TxtPos[2]["Y"],$TxtPos[3]["Y"]) - $BorderOffset;
- $X2 = max($TxtPos[0]["X"],$TxtPos[1]["X"],$TxtPos[2]["X"],$TxtPos[3]["X"]) + $BorderOffset + 3;
- $Y2 = max($TxtPos[0]["Y"],$TxtPos[1]["Y"],$TxtPos[2]["Y"],$TxtPos[3]["Y"]) + $BorderOffset - 3;
-
- $X1 = $X1 - $TxtPos[$Align]["X"] + $X + $T[0]["X"];
- $Y1 = $Y1 - $TxtPos[$Align]["Y"] + $Y + $T[0]["Y"];
- $X2 = $X2 - $TxtPos[$Align]["X"] + $X + $T[0]["X"];
- $Y2 = $Y2 - $TxtPos[$Align]["Y"] + $Y + $T[0]["Y"];
-
- $Settings = array("R"=>$BoxR,"G"=>$BoxG,"B"=>$BoxB,"Alpha"=>$BoxAlpha,"BorderR"=>$BoxBorderR,"BorderG"=>$BoxBorderG,"BorderB"=>$BoxBorderB,"BorderAlpha"=>$BoxBorderAlpha);
-
- if ( $BoxRounded )
- { $this->drawRoundedFilledRectangle($X1,$Y1,$X2,$Y2,$RoundedRadius,$Settings); }
- else
- { $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Settings); }
- }
-
- $X = $X - $TxtPos[$Align]["X"] + $X;
- $Y = $Y - $TxtPos[$Align]["Y"] + $Y;
-
- if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
- {
- $C_ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$this->Shadowa);
- imagettftext($this->Picture,$FontSize,$Angle,$X+$this->ShadowX,$Y+$this->ShadowY,$C_ShadowColor,$FontName,$this->getEncodedText($Text));
- }
-
- $C_TextColor = $this->AllocateColor($this->Picture,$R,$G,$B,$Alpha);
- imagettftext($this->Picture,$FontSize,$Angle,$X,$Y,$C_TextColor,$FontName,$this->getEncodedText($Text));
-
- $this->Shadow = $Shadow;
-
- return($TxtPos);
- }
-
- function getEncodedText($text)
- {
- $gdinfo = gd_info();
- if (!empty($gdinfo['JIS-mapped Japanese Font Support'])) {
- return mb_convert_encoding($text, "SJIS", "UTF-8");
- }
-
- return $text;
- }
-
- /* Draw a gradient within a defined area */
- function drawGradientArea($X1,$Y1,$X2,$Y2,$Direction,$Format="")
- {
- $StartR = isset($Format["StartR"]) ? $Format["StartR"] : 90;
- $StartG = isset($Format["StartG"]) ? $Format["StartG"] : 90;
- $StartB = isset($Format["StartB"]) ? $Format["StartB"] : 90;
- $EndR = isset($Format["EndR"]) ? $Format["EndR"] : 0;
- $EndG = isset($Format["EndG"]) ? $Format["EndG"] : 0;
- $EndB = isset($Format["EndB"]) ? $Format["EndB"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $Levels = isset($Format["Levels"]) ? $Format["Levels"] : NULL;
-
- $Shadow = $this->Shadow;
- $this->Shadow = FALSE;
-
- if ( $StartR == $EndR && $StartG == $EndG && $StartB == $EndB )
- {
- $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,array("R"=>$StartR,"G"=>$StartG,"B"=>$StartB,"Alpha"=>$Alpha));
- return(0);
- }
-
- if ( $Levels != NULL )
- { $EndR=$StartR+$Levels; $EndG=$StartG+$Levels; $EndB=$StartB+$Levels; }
-
- if ($X1 > $X2) { list($X1, $X2) = array($X2, $X1); }
- if ($Y1 > $Y2) { list($Y1, $Y2) = array($Y2, $Y1); }
-
- if ( $Direction == DIRECTION_VERTICAL ) { $Width = abs($Y2-$Y1); }
- if ( $Direction == DIRECTION_HORIZONTAL ) { $Width = abs($X2-$X1); }
-
- $Step = max(abs($EndR-$StartR),abs($EndG-$StartG),abs($EndB-$StartB));
- $StepSize = $Width/$Step;
- $RStep = ($EndR-$StartR)/$Step;
- $GStep = ($EndG-$StartG)/$Step;
- $BStep = ($EndB-$StartB)/$Step;
-
- $R=$StartR;$G=$StartG;$B=$StartB;
- switch($Direction)
- {
- case DIRECTION_VERTICAL:
- $StartY = $Y1; $EndY = floor($Y2)+1; $LastY2 = $StartY;
- for($i=0;$i<=$Step;$i++)
- {
- $Y2 = floor($StartY + ($i * $StepSize));
-
- if ($Y2 > $EndY) { $Y2 = $EndY; }
- if (($Y1 != $Y2 && $Y1 < $Y2) || $Y2 == $EndY)
- {
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
- $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Color);
- $LastY2 = max($LastY2,$Y2);
- $Y1 = $Y2+1;
- }
- $R = $R + $RStep; $G = $G + $GStep; $B = $B + $BStep;
- }
- if ( $LastY2 < $EndY && isset($Color)) { for ($i=$LastY2+1;$i<=$EndY;$i++) { $this->drawLine($X1,$i,$X2,$i,$Color); } }
- break;
-
- case DIRECTION_HORIZONTAL:
- $StartX = $X1; $EndX = $X2;
- for($i=0;$i<=$Step;$i++)
- {
- $X2 = floor($StartX + ($i * $StepSize));
-
- if ($X2 > $EndX) { $X2 = $EndX; }
- if (($X1 != $X2 && $X1 < $X2) || $X2 == $EndX)
- {
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
- $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$Color);
- $X1 = $X2+1;
- }
- $R = $R + $RStep; $G = $G + $GStep; $B = $B + $BStep;
- }
- if ( $X2 < $EndX && isset($Color)) { $this->drawFilledRectangle($X2,$Y1,$EndX,$Y2,$Color); }
- break;
- }
-
- $this->Shadow = $Shadow;
-
- }
-
- /* Draw an aliased pixel */
- function drawAntialiasPixel($X,$Y,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
-
- if ( $X < 0 || $Y < 0 || $X >= $this->XSize || $Y >= $this->YSize )
- return(-1);
-
- if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; }
- if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; }
- if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; }
-
- if ( !$this->Antialias )
- {
- if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
- {
- $ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$this->Shadowa);
- imagesetpixel($this->Picture,$X+$this->ShadowX,$Y+$this->ShadowY,$ShadowColor);
- }
-
- $PlotColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
- imagesetpixel($this->Picture,$X,$Y,$PlotColor);
-
- return(0);
- }
-
- $Plot = "";
- $Xi = floor($X);
- $Yi = floor($Y);
-
- if ( $Xi == $X && $Yi == $Y)
- {
- if ( $Alpha == 100 )
- $this->drawAlphaPixel($X,$Y,100,$R,$G,$B);
- else
- $this->drawAlphaPixel($X,$Y,$Alpha,$R,$G,$B);
- }
- else
- {
- $Alpha1 = (((1 - ($X - floor($X))) * (1 - ($Y - floor($Y))) * 100) / 100) * $Alpha;
- if ( $Alpha1 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi,$Yi,$Alpha1,$R,$G,$B); }
-
- $Alpha2 = ((($X - floor($X)) * (1 - ($Y - floor($Y))) * 100) / 100) * $Alpha;
- if ( $Alpha2 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi+1,$Yi,$Alpha2,$R,$G,$B); }
-
- $Alpha3 = (((1 - ($X - floor($X))) * ($Y - floor($Y)) * 100) / 100) * $Alpha;
- if ( $Alpha3 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi,$Yi+1,$Alpha3,$R,$G,$B); }
-
- $Alpha4 = ((($X - floor($X)) * ($Y - floor($Y)) * 100) / 100) * $Alpha;
- if ( $Alpha4 > $this->AntialiasQuality ) { $this->drawAlphaPixel($Xi+1,$Yi+1,$Alpha4,$R,$G,$B); }
- }
- }
-
- /* Draw a semi-transparent pixel */
- function drawAlphaPixel($X,$Y,$Alpha,$R,$G,$B)
- {
- if ( isset($this->Mask[$X])) { if ( isset($this->Mask[$X][$Y]) ) { return(0); } }
-
- if ( $X < 0 || $Y < 0 || $X >= $this->XSize || $Y >= $this->YSize )
- return(-1);
-
- if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; }
- if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; }
- if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; }
-
- if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
- {
- $AlphaFactor = floor(($Alpha / 100) * $this->Shadowa);
- $ShadowColor = $this->allocateColor($this->Picture,$this->ShadowR,$this->ShadowG,$this->ShadowB,$AlphaFactor);
- imagesetpixel($this->Picture,$X+$this->ShadowX,$Y+$this->ShadowY,$ShadowColor);
- }
-
- $C_Aliased = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
- imagesetpixel($this->Picture,$X,$Y,$C_Aliased);
- }
-
- /* Convert apha to base 10 */
- function convertAlpha($AlphaValue)
- { return((127/100)*(100-$AlphaValue)); }
-
- /* Allocate a color with transparency */
- function allocateColor($Picture,$R,$G,$B,$Alpha=100)
- {
- if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; }
- if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; }
- if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; }
- if ( $Alpha < 0 ) { $Alpha = 0; }
- if ( $Alpha > 100) { $Alpha = 100; }
-
- $Alpha = $this->convertAlpha($Alpha);
- return(imagecolorallocatealpha($Picture,$R,$G,$B,$Alpha));
- }
-
- /* Load a PNG file and draw it over the chart */
- function drawFromPNG($X,$Y,$FileName)
- { $this->drawFromPicture(1,$FileName,$X,$Y); }
-
- /* Load a GIF file and draw it over the chart */
- function drawFromGIF($X,$Y,$FileName)
- { $this->drawFromPicture(2,$FileName,$X,$Y); }
-
- /* Load a JPEG file and draw it over the chart */
- function drawFromJPG($X,$Y,$FileName)
- { $this->drawFromPicture(3,$FileName,$X,$Y); }
-
- function getPicInfo($FileName)
- {
- $Infos = getimagesize($FileName);
- $Width = $Infos[0];
- $Height = $Infos[1];
- $Type = $Infos["mime"];
-
- if ( $Type == "image/png") { $Type = 1; }
- if ( $Type == "image/gif") { $Type = 2; }
- if ( $Type == "image/jpeg ") { $Type = 3; }
-
- return(array($Width,$Height,$Type));
- }
-
- /* Generic loader function for external pictures */
- function drawFromPicture($PicType,$FileName,$X,$Y)
- {
- if ( file_exists($FileName))
- {
- list($Width,$Height) = $this->getPicInfo($FileName);
-
- if ( $PicType == 1 )
- { $Raster = imagecreatefrompng($FileName); }
- elseif ( $PicType == 2 )
- { $Raster = imagecreatefromgif($FileName); }
- elseif ( $PicType == 3 )
- { $Raster = imagecreatefromjpeg($FileName); }
- else
- { return(0); }
-
-
- $RestoreShadow = $this->Shadow;
- if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
- {
- $this->Shadow = FALSE;
- if ( $PicType == 3 )
- $this->drawFilledRectangle($X+$this->ShadowX,$Y+$this->ShadowY,$X+$Width+$this->ShadowX,$Y+$Height+$this->ShadowY,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
- else
- {
- $TranparentID = imagecolortransparent($Raster);
- for ($Xc=0;$Xc<=$Width-1;$Xc++)
- {
- for ($Yc=0;$Yc<=$Height-1;$Yc++)
- {
- $RGBa = imagecolorat($Raster,$Xc,$Yc);
- $Values = imagecolorsforindex($Raster,$RGBa);
- if ( $Values["alpha"] < 120 )
- {
- $AlphaFactor = floor(($this->Shadowa / 100) * ((100 / 127) * (127-$Values["alpha"])));
- $this->drawAlphaPixel($X+$Xc+$this->ShadowX,$Y+$Yc+$this->ShadowY,$AlphaFactor,$this->ShadowR,$this->ShadowG,$this->ShadowB);
- }
- }
- }
- }
- }
- $this->Shadow = $RestoreShadow;
-
- imagecopy($this->Picture,$Raster,$X,$Y,0,0,$Width,$Height);
- imagedestroy($Raster);
- }
- }
-
- /* Draw an arrow */
- function drawArrow($X1,$Y1,$X2,$Y2,$Format="")
- {
- $FillR = isset($Format["FillR"]) ? $Format["FillR"] : 0;
- $FillG = isset($Format["FillG"]) ? $Format["FillG"] : 0;
- $FillB = isset($Format["FillB"]) ? $Format["FillB"] : 0;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $FillR;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $FillG;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $FillB;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $Size = isset($Format["Size"]) ? $Format["Size"] : 10;
- $Ratio = isset($Format["Ratio"]) ? $Format["Ratio"] : .5;
- $TwoHeads = isset($Format["TwoHeads"]) ? $Format["TwoHeads"] : FALSE;
- $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : FALSE;
-
- /* Calculate the line angle */
- $Angle = $this->getAngle($X1,$Y1,$X2,$Y2);
-
- /* Override Shadow support, this will be managed internally */
- $RestoreShadow = $this->Shadow;
- if ( $this->Shadow && $this->ShadowX != 0 && $this->ShadowY != 0 )
- {
- $this->Shadow = FALSE;
- $this->drawArrow($X1+$this->ShadowX,$Y1+$this->ShadowY,$X2+$this->ShadowX,$Y2+$this->ShadowY,array("FillR"=>$this->ShadowR,"FillG"=>$this->ShadowG,"FillB"=>$this->ShadowB,"Alpha"=>$this->Shadowa,"Size"=>$Size,"Ratio"=>$Ratio,"TwoHeads"=>$TwoHeads,"Ticks"=>$Ticks));
- }
-
- /* Draw the 1st Head */
- $TailX = cos(($Angle-180)*PI/180)*$Size+$X2;
- $TailY = sin(($Angle-180)*PI/180)*$Size+$Y2;
-
- $Points = "";
- $Points[] = $X2; $Points[] = $Y2;
- $Points[] = cos(($Angle-90)*PI/180)*$Size*$Ratio+$TailX; $Points[] = sin(($Angle-90)*PI/180)*$Size*$Ratio+$TailY;
- $Points[] = cos(($Angle-270)*PI/180)*$Size*$Ratio+$TailX; $Points[] = sin(($Angle-270)*PI/180)*$Size*$Ratio+$TailY;
- $Points[] = $X2; $Points[] = $Y2;
-
- /* Visual correction */
- if ($Angle == 180 || $Angle == 360 ) { $Points[4] = $Points[2]; }
- if ($Angle == 90 || $Angle == 270 ) { $Points[5] = $Points[3]; }
-
- $ArrowColor = $this->allocateColor($this->Picture,$FillR,$FillG,$FillB,$Alpha);
- ImageFilledPolygon($this->Picture,$Points,4,$ArrowColor);
-
- $this->drawLine($Points[0],$Points[1],$Points[2],$Points[3],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
- $this->drawLine($Points[2],$Points[3],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
- $this->drawLine($Points[0],$Points[1],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
-
- /* Draw the second head */
- if ( $TwoHeads )
- {
- $Angle = $this->getAngle($X2,$Y2,$X1,$Y1);
-
- $TailX2 = cos(($Angle-180)*PI/180)*$Size+$X1;
- $TailY2 = sin(($Angle-180)*PI/180)*$Size+$Y1;
-
- $Points = "";
- $Points[] = $X1; $Points[] = $Y1;
- $Points[] = cos(($Angle-90)*PI/180)*$Size*$Ratio+$TailX2; $Points[] = sin(($Angle-90)*PI/180)*$Size*$Ratio+$TailY2;
- $Points[] = cos(($Angle-270)*PI/180)*$Size*$Ratio+$TailX2; $Points[] = sin(($Angle-270)*PI/180)*$Size*$Ratio+$TailY2;
- $Points[] = $X1; $Points[] = $Y1;
-
- /* Visual correction */
- if ($Angle == 180 || $Angle == 360 ) { $Points[4] = $Points[2]; }
- if ($Angle == 90 || $Angle == 270 ) { $Points[5] = $Points[3]; }
-
- $ArrowColor = $this->allocateColor($this->Picture,$FillR,$FillG,$FillB,$Alpha);
- ImageFilledPolygon($this->Picture,$Points,4,$ArrowColor);
-
- $this->drawLine($Points[0],$Points[1],$Points[2],$Points[3],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
- $this->drawLine($Points[2],$Points[3],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
- $this->drawLine($Points[0],$Points[1],$Points[4],$Points[5],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
-
- $this->drawLine($TailX,$TailY,$TailX2,$TailY2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
- }
- else
- $this->drawLine($X1,$Y1,$TailX,$TailY,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
-
- /* Re-enable shadows */
- $this->Shadow = $RestoreShadow;
- }
-
- /* Draw a label with associated arrow */
- function drawArrowLabel($X1,$Y1,$Text,$Format="")
- {
- $FillR = isset($Format["FillR"]) ? $Format["FillR"] : 0;
- $FillG = isset($Format["FillG"]) ? $Format["FillG"] : 0;
- $FillB = isset($Format["FillB"]) ? $Format["FillB"] : 0;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $FillR;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $FillG;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $FillB;
- $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
- $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $Length = isset($Format["Length"]) ? $Format["Length"] : 50;
- $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 315;
- $Size = isset($Format["Size"]) ? $Format["Size"] : 10;
- $Position = isset($Format["Position"]) ? $Format["Position"] : POSITION_TOP;
- $RoundPos = isset($Format["RoundPos"]) ? $Format["RoundPos"] : FALSE;
- $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
-
- $Angle = $Angle % 360;
-
- $X2 = sin(($Angle+180)*PI/180)*$Length+$X1;
- $Y2 = cos(($Angle+180)*PI/180)*$Length+$Y1;
-
- if ( $RoundPos && $Angle > 0 && $Angle < 180 ) { $Y2 = ceil($Y2); }
- if ( $RoundPos && $Angle > 180 ) { $Y2 = floor($Y2); }
-
- $this->drawArrow($X2,$Y2,$X1,$Y1,$Format);
-
- $Size = imagettfbbox($FontSize,0,$FontName,$this->getEncodedText($Text));
- $TxtWidth = max(abs($Size[2]-$Size[0]),abs($Size[0]-$Size[6]));
- $TxtHeight = max(abs($Size[1]-$Size[7]),abs($Size[3]-$Size[1]));
-
- if ( $Angle > 0 && $Angle < 180 )
- {
- $this->drawLine($X2,$Y2,$X2-$TxtWidth,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
- if ( $Position == POSITION_TOP )
- $this->drawText($X2,$Y2-2,$Text,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Align"=>TEXT_ALIGN_BOTTOMRIGHT));
- else
- $this->drawText($X2,$Y2+4,$Text,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Align"=>TEXT_ALIGN_TOPRIGHT));
- }
- else
- {
- $this->drawLine($X2,$Y2,$X2+$TxtWidth,$Y2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
- if ( $Position == POSITION_TOP )
- $this->drawText($X2,$Y2-2,$Text,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha));
- else
- $this->drawText($X2,$Y2+4,$Text,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$Alpha,"Align"=>TEXT_ALIGN_TOPLEFT));
- }
- }
-
- /* Draw a progress bar filled with specified % */
- function drawProgress($X,$Y,$Percent,$Format="")
- {
- if ( $Percent > 100 ) { $Percent = 100; }
- if ( $Percent < 0 ) { $Percent = 0; }
-
- $Width = isset($Format["Width"]) ? $Format["Width"] : 200;
- $Height = isset($Format["Height"]) ? $Format["Height"] : 20;
- $Orientation = isset($Format["Orientation"]) ? $Format["Orientation"] : ORIENTATION_HORIZONTAL;
- $ShowLabel = isset($Format["ShowLabel"]) ? $Format["ShowLabel"] : FALSE;
- $LabelPos = isset($Format["LabelPos"]) ? $Format["LabelPos"] : LABEL_POS_INSIDE;
- $Margin = isset($Format["Margin"]) ? $Format["Margin"] : 10;
- $R = isset($Format["R"]) ? $Format["R"] : 130;
- $G = isset($Format["G"]) ? $Format["G"] : 130;
- $B = isset($Format["B"]) ? $Format["B"] : 130;
- $RFade = isset($Format["RFade"]) ? $Format["RFade"] : -1;
- $GFade = isset($Format["GFade"]) ? $Format["GFade"] : -1;
- $BFade = isset($Format["BFade"]) ? $Format["BFade"] : -1;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
- $BoxBorderR = isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 0;
- $BoxBorderG = isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 0;
- $BoxBorderB = isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 0;
- $BoxBackR = isset($Format["BoxBackR"]) ? $Format["BoxBackR"] : 255;
- $BoxBackG = isset($Format["BoxBackG"]) ? $Format["BoxBackG"] : 255;
- $BoxBackB = isset($Format["BoxBackB"]) ? $Format["BoxBackB"] : 255;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
- $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : NULL;
- $NoAngle = isset($Format["NoAngle"]) ? $Format["NoAngle"] : FALSE;
-
- if ( $RFade != -1 && $GFade != -1 && $BFade != -1 )
- {
- $RFade = (($RFade-$R)/100)*$Percent+$R;
- $GFade = (($GFade-$G)/100)*$Percent+$G;
- $BFade = (($BFade-$B)/100)*$Percent+$B;
- }
-
- if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
- if ( $BoxSurrounding != NULL ) { $BoxBorderR = $BoxBackR + $Surrounding; $BoxBorderG = $BoxBackG + $Surrounding; $BoxBorderB = $BoxBackB + $Surrounding; }
-
- if ( $Orientation == ORIENTATION_VERTICAL )
- {
- $InnerHeight = (($Height-2)/100)*$Percent;
- $this->drawFilledRectangle($X,$Y,$X+$Width,$Y-$Height,array("R"=>$BoxBackR,"G"=>$BoxBackG,"B"=>$BoxBackB,"BorderR"=>$BoxBorderR,"BorderG"=>$BoxBorderG,"BorderB"=>$BoxBorderB,"NoAngle"=>$NoAngle));
-
- $RestoreShadow = $this->Shadow; $this->Shadow = FALSE;
- if ( $RFade != -1 && $GFade != -1 && $BFade != -1 )
- {
- $GradientOptions = array("StartR"=>$RFade,"StartG"=>$GFade,"StartB"=>$BFade,"EndR"=>$R,"EndG"=>$G,"EndB"=>$B);
- $this->drawGradientArea($X+1,$Y-1,$X+$Width-1,$Y-$InnerHeight,DIRECTION_VERTICAL,$GradientOptions);
-
- if ( $Surrounding )
- $this->drawRectangle($X+1,$Y-1,$X+$Width-1,$Y-$InnerHeight,array("R"=>255,"G"=>255,"B"=>255,"Alpha"=>$Surrounding));
- }
- else
- $this->drawFilledRectangle($X+1,$Y-1,$X+$Width-1,$Y-$InnerHeight,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
-
- $this->Shadow = $RestoreShadow;
-
- if ( $ShowLabel && $LabelPos == LABEL_POS_BOTTOM ) { $this->drawText($X+($Width/2),$Y+$Margin,$Percent."%",array("Align"=>TEXT_ALIGN_TOPMIDDLE)); }
- if ( $ShowLabel && $LabelPos == LABEL_POS_TOP ) { $this->drawText($X+($Width/2),$Y-$Height-$Margin,$Percent."%",array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); }
- if ( $ShowLabel && $LabelPos == LABEL_POS_INSIDE ) { $this->drawText($X+($Width/2),$Y-$InnerHeight-$Margin,$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLELEFT,"Angle"=>90)); }
- if ( $ShowLabel && $LabelPos == LABEL_POS_CENTER ) { $this->drawText($X+($Width/2),$Y-($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"Angle"=>90)); }
- }
- else
- {
- if ( $Percent == 100 )
- $InnerWidth = $Width-1;
- else
- $InnerWidth = (($Width-2)/100)*$Percent;
-
- $this->drawFilledRectangle($X,$Y,$X+$Width,$Y+$Height,array("R"=>$BoxBackR,"G"=>$BoxBackG,"B"=>$BoxBackB,"BorderR"=>$BoxBorderR,"BorderG"=>$BoxBorderG,"BorderB"=>$BoxBorderB,"NoAngle"=>$NoAngle));
-
- $RestoreShadow = $this->Shadow; $this->Shadow = FALSE;
- if ( $RFade != -1 && $GFade != -1 && $BFade != -1 )
- {
- $GradientOptions = array("StartR"=>$R,"StartG"=>$G,"StartB"=>$B,"EndR"=>$RFade,"EndG"=>$GFade,"EndB"=>$BFade);
- $this->drawGradientArea($X+1,$Y+1,$X+$InnerWidth,$Y+$Height-1,DIRECTION_HORIZONTAL,$GradientOptions);
-
- if ( $Surrounding )
- $this->drawRectangle($X+1,$Y+1,$X+$InnerWidth,$Y+$Height-1,array("R"=>255,"G"=>255,"B"=>255,"Alpha"=>$Surrounding));
- }
- else
- $this->drawFilledRectangle($X+1,$Y+1,$X+$InnerWidth,$Y+$Height-1,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
-
- $this->Shadow = $RestoreShadow;
-
- if ( $ShowLabel && $LabelPos == LABEL_POS_LEFT ) { $this->drawText($X-$Margin,$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLERIGHT)); }
- if ( $ShowLabel && $LabelPos == LABEL_POS_RIGHT ) { $this->drawText($X+$Width+$Margin,$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLELEFT)); }
- if ( $ShowLabel && $LabelPos == LABEL_POS_CENTER ) { $this->drawText($X+($Width/2),$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE)); }
- if ( $ShowLabel && $LabelPos == LABEL_POS_INSIDE ) { $this->drawText($X+$InnerWidth+$Margin,$Y+($Height/2),$Percent."%",array("Align"=>TEXT_ALIGN_MIDDLELEFT)); }
- }
- }
-
- /* Get the legend box size */
- function getLegendSize($Format="")
- {
- $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
- $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
- $BoxSize = isset($Format["BoxSize"]) ? $Format["BoxSize"] : 5;
- $Margin = isset($Format["Margin"]) ? $Format["Margin"] : 5;
- $Style = isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND;
- $Mode = isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL;
- $BoxWidth = isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 5;
- $BoxHeight = isset($Format["BoxHeight"]) ? $Format["BoxHeight"] : 5;
- $IconAreaWidth = isset($Format["IconAreaWidth"]) ? $Format["IconAreaWidth"] : $BoxWidth;
- $IconAreaHeight = isset($Format["IconAreaHeight"]) ? $Format["IconAreaHeight"] : $BoxHeight;
- $XSpacing = isset($Format["XSpacing"]) ? $Format["XSpacing"] : 5;
-
- $Data = $this->DataSet->getData();
-
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] && isset($Serie["Picture"]))
- {
- list($PicWidth,$PicHeight) = $this->getPicInfo($Serie["Picture"]);
- if ( $IconAreaWidth < $PicWidth ) { $IconAreaWidth = $PicWidth; }
- if ( $IconAreaHeight < $PicHeight ) { $IconAreaHeight = $PicHeight; }
- }
- }
-
- $YStep = max($this->FontSize,$IconAreaHeight) + 5;
- $XStep = $IconAreaWidth + 5;
- $XStep = $XSpacing;
-
- $X=100; $Y=100;
-
- $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X;
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- {
- if ( $Mode == LEGEND_VERTICAL )
- {
- $BoxArray = $this->getTextBox($vX+$IconAreaWidth+4,$vY+$IconAreaHeight/2,$FontName,$FontSize,0,$Serie["Description"]);
-
- if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
- if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
- if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
-
- $Lines = preg_split("/\n/",$Serie["Description"]);
- $vY = $vY + max($this->FontSize*count($Lines),$IconAreaHeight) + 5;
- }
- elseif ( $Mode == LEGEND_HORIZONTAL )
- {
- $Lines = preg_split("/\n/",$Serie["Description"]);
- $Width = "";
- foreach($Lines as $Key => $Value)
- {
- $BoxArray = $this->getTextBox($vX+$IconAreaWidth+6,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$FontName,$FontSize,0,$Value);
-
- if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
- if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
- if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
-
- $Width[] = $BoxArray[1]["X"];
- }
-
- $vX=max($Width)+$XStep;
- }
- }
- }
- $vY=$vY-$YStep; $vX=$vX-$XStep;
-
- $TopOffset = $Y - $Boundaries["T"];
- if ( $Boundaries["B"]-($vY+$IconAreaHeight) < $TopOffset ) { $Boundaries["B"] = $vY+$IconAreaHeight+$TopOffset; }
-
- $Width = ($Boundaries["R"]+$Margin) - ($Boundaries["L"]-$Margin);
- $Height = ($Boundaries["B"]+$Margin) - ($Boundaries["T"]-$Margin);
-
- return(array("Width"=>$Width,"Height"=>$Height));
- }
-
- /* Draw the legend of the active series */
- function drawLegend($X,$Y,$Format="")
- {
- $Family = isset($Format["Family"]) ? $Format["Family"] : LEGEND_FAMILY_BOX;
- $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
- $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
- $FontR = isset($Format["FontR"]) ? $Format["FontR"] : $this->FontColorR;
- $FontG = isset($Format["FontG"]) ? $Format["FontG"] : $this->FontColorG;
- $FontB = isset($Format["FontB"]) ? $Format["FontB"] : $this->FontColorB;
- $BoxWidth = isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 5;
- $BoxHeight = isset($Format["BoxHeight"]) ? $Format["BoxHeight"] : 5;
- $IconAreaWidth = isset($Format["IconAreaWidth"]) ? $Format["IconAreaWidth"] : $BoxWidth;
- $IconAreaHeight = isset($Format["IconAreaHeight"]) ? $Format["IconAreaHeight"] : $BoxHeight;
- $XSpacing = isset($Format["XSpacing"]) ? $Format["XSpacing"] : 5;
- $Margin = isset($Format["Margin"]) ? $Format["Margin"] : 5;
- $R = isset($Format["R"]) ? $Format["R"] : 200;
- $G = isset($Format["G"]) ? $Format["G"] : 200;
- $B = isset($Format["B"]) ? $Format["B"] : 200;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 255;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 255;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 255;
- $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
- $Style = isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND;
- $Mode = isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL;
-
- if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
-
- $Data = $this->DataSet->getData();
-
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] && isset($Serie["Picture"]))
- {
- list($PicWidth,$PicHeight) = $this->getPicInfo($Serie["Picture"]);
- if ( $IconAreaWidth < $PicWidth ) { $IconAreaWidth = $PicWidth; }
- if ( $IconAreaHeight < $PicHeight ) { $IconAreaHeight = $PicHeight; }
- }
- }
-
- $YStep = max($this->FontSize,$IconAreaHeight) + 5;
- $XStep = $IconAreaWidth + 5;
- $XStep = $XSpacing;
-
- $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X;
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- {
- if ( $Mode == LEGEND_VERTICAL )
- {
- $BoxArray = $this->getTextBox($vX+$IconAreaWidth+4,$vY+$IconAreaHeight/2,$FontName,$FontSize,0,$Serie["Description"]);
-
- if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
- if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
- if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
-
- $Lines = preg_split("/\n/",$Serie["Description"]);
- $vY = $vY + max($this->FontSize*count($Lines),$IconAreaHeight) + 5;
- }
- elseif ( $Mode == LEGEND_HORIZONTAL )
- {
- $Lines = preg_split("/\n/",$Serie["Description"]);
- $Width = "";
- foreach($Lines as $Key => $Value)
- {
- $BoxArray = $this->getTextBox($vX+$IconAreaWidth+6,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$FontName,$FontSize,0,$Value);
-
- if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$IconAreaHeight/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$IconAreaHeight/2; }
- if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
- if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$IconAreaHeight/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$IconAreaHeight/2; }
-
- $Width[] = $BoxArray[1]["X"];
- }
-
- $vX=max($Width)+$XStep;
- }
- }
- }
- $vY=$vY-$YStep; $vX=$vX-$XStep;
-
- $TopOffset = $Y - $Boundaries["T"];
- if ( $Boundaries["B"]-($vY+$IconAreaHeight) < $TopOffset ) { $Boundaries["B"] = $vY+$IconAreaHeight+$TopOffset; }
-
- if ( $Style == LEGEND_ROUND )
- $this->drawRoundedFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
- elseif ( $Style == LEGEND_BOX )
- $this->drawFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
-
- $RestoreShadow = $this->Shadow; $this->Shadow = FALSE;
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- {
- $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"];
- $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
-
- if ( isset($Serie["Picture"]) )
- {
- $Picture = $Serie["Picture"];
- list($PicWidth,$PicHeight) = $this->getPicInfo($Picture);
- $PicX = $X+$IconAreaWidth/2; $PicY = $Y+$IconAreaHeight/2;
-
- $this->drawFromPNG($PicX-$PicWidth/2,$PicY-$PicHeight/2,$Picture);
- }
- else
- {
- if ( $Family == LEGEND_FAMILY_BOX )
- {
- if ( $BoxWidth != $IconAreaWidth ) { $XOffset = floor(($IconAreaWidth-$BoxWidth)/2); } else { $XOffset = 0; }
- if ( $BoxHeight != $IconAreaHeight ) { $YOffset = floor(($IconAreaHeight-$BoxHeight)/2); } else { $YOffset = 0; }
-
- $this->drawFilledRectangle($X+1+$XOffset,$Y+1+$YOffset,$X+$BoxWidth+$XOffset+1,$Y+$BoxHeight+1+$YOffset,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
- $this->drawFilledRectangle($X+$XOffset,$Y+$YOffset,$X+$BoxWidth+$XOffset,$Y+$BoxHeight+$YOffset,array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20));
- }
- elseif ( $Family == LEGEND_FAMILY_CIRCLE )
- {
- $this->drawFilledCircle($X+1+$IconAreaWidth/2,$Y+1+$IconAreaHeight/2,min($IconAreaHeight/2,$IconAreaWidth/2),array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
- $this->drawFilledCircle($X+$IconAreaWidth/2,$Y+$IconAreaHeight/2,min($IconAreaHeight/2,$IconAreaWidth/2),array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20));
- }
- elseif ( $Family == LEGEND_FAMILY_LINE )
- {
- $this->drawLine($X+1,$Y+1+$IconAreaHeight/2,$X+1+$IconAreaWidth,$Y+1+$IconAreaHeight/2,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20,"Ticks"=>$Ticks,"Weight"=>$Weight));
- $this->drawLine($X,$Y+$IconAreaHeight/2,$X+$IconAreaWidth,$Y+$IconAreaHeight/2,array("R"=>$R,"G"=>$G,"B"=>$B,"Ticks"=>$Ticks,"Weight"=>$Weight));
- }
- }
-
- if ( $Mode == LEGEND_VERTICAL )
- {
- $Lines = preg_split("/\n/",$Serie["Description"]);
- foreach($Lines as $Key => $Value)
- $this->drawText($X+$IconAreaWidth+4,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT,"FontSize"=>$FontSize,"FontName"=>$FontName));
-
- $Y=$Y+max($this->FontSize*count($Lines),$IconAreaHeight) + 5;
- }
- elseif ( $Mode == LEGEND_HORIZONTAL )
- {
- $Lines = preg_split("/\n/",$Serie["Description"]);
- $Width = "";
- foreach($Lines as $Key => $Value)
- {
- $BoxArray = $this->drawText($X+$IconAreaWidth+4,$Y+$IconAreaHeight/2+(($this->FontSize+3)*$Key),$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT,"FontSize"=>$FontSize,"FontName"=>$FontName));
- $Width[] = $BoxArray[1]["X"];
- }
- $X=max($Width)+2+$XStep;
- }
- }
- }
-
-
- $this->Shadow = $RestoreShadow;
- }
-
- function drawScale($Format="")
- {
- $Pos = isset($Format["Pos"]) ? $Format["Pos"] : SCALE_POS_LEFTRIGHT;
- $Floating = isset($Format["Floating"]) ? $Format["Floating"] : FALSE;
- $Mode = isset($Format["Mode"]) ? $Format["Mode"] : SCALE_MODE_FLOATING;
- $RemoveXAxis = isset($Format["RemoveXAxis"]) ? $Format["RemoveXAxis"] : FALSE;
- $MinDivHeight = isset($Format["MinDivHeight"]) ? $Format["MinDivHeight"] : 20;
- $Factors = isset($Format["Factors"]) ? $Format["Factors"] : array(1,2,5);
- $ManualScale = isset($Format["ManualScale"]) ? $Format["ManualScale"] : array("0"=>array("Min"=>-100,"Max"=>100));
- $XMargin = isset($Format["XMargin"]) ? $Format["XMargin"] : AUTO;
- $YMargin = isset($Format["YMargin"]) ? $Format["YMargin"] : 0;
- $ScaleSpacing = isset($Format["ScaleSpacing"]) ? $Format["ScaleSpacing"] : 15;
- $InnerTickWidth = isset($Format["InnerTickWidth"]) ? $Format["InnerTickWidth"] : 2;
- $OuterTickWidth = isset($Format["OuterTickWidth"]) ? $Format["OuterTickWidth"] : 2;
- $DrawXLines = isset($Format["DrawXLines"]) ? $Format["DrawXLines"] : TRUE;
- $DrawYLines = isset($Format["DrawYLines"]) ? $Format["DrawYLines"] : ALL;
- $GridTicks = isset($Format["GridTicks"]) ? $Format["GridTicks"] : 4;
- $GridR = isset($Format["GridR"]) ? $Format["GridR"] : 255;
- $GridG = isset($Format["GridG"]) ? $Format["GridG"] : 255;
- $GridB = isset($Format["GridB"]) ? $Format["GridB"] : 255;
- $GridAlpha = isset($Format["GridAlpha"]) ? $Format["GridAlpha"] : 40;
- $AxisRo = isset($Format["AxisR"]) ? $Format["AxisR"] : 0;
- $AxisGo = isset($Format["AxisG"]) ? $Format["AxisG"] : 0;
- $AxisBo = isset($Format["AxisB"]) ? $Format["AxisB"] : 0;
- $AxisAlpha = isset($Format["AxisAlpha"]) ? $Format["AxisAlpha"] : 100;
- $TickRo = isset($Format["TickR"]) ? $Format["TickR"] : 0;
- $TickGo = isset($Format["TickG"]) ? $Format["TickG"] : 0;
- $TickBo = isset($Format["TickB"]) ? $Format["TickB"] : 0;
- $TickAlpha = isset($Format["TickAlpha"]) ? $Format["TickAlpha"] : 100;
- $DrawSubTicks = isset($Format["DrawSubTicks"]) ? $Format["DrawSubTicks"] : FALSE;
- $InnerSubTickWidth = isset($Format["InnerSubTickWidth"]) ? $Format["InnerSubTickWidth"] : 0;
- $OuterSubTickWidth = isset($Format["OuterSubTickWidth"]) ? $Format["OuterSubTickWidth"] : 2;
- $SubTickR = isset($Format["SubTickR"]) ? $Format["SubTickR"] : 255;
- $SubTickG = isset($Format["SubTickG"]) ? $Format["SubTickG"] : 0;
- $SubTickB = isset($Format["SubTickB"]) ? $Format["SubTickB"] : 0;
- $SubTickAlpha = isset($Format["SubTickAlpha"]) ? $Format["SubTickAlpha"] : 100;
- $AutoAxisLabels = isset($Format["AutoAxisLabels"]) ? $Format["AutoAxisLabels"] : TRUE;
- $XReleasePercent = isset($Format["XReleasePercent"]) ? $Format["XReleasePercent"] : 1;
- $DrawArrows = isset($Format["DrawArrows"]) ? $Format["DrawArrows"] : FALSE;
- $ArrowSize = isset($Format["ArrowSize"]) ? $Format["ArrowSize"] : 8;
- $CycleBackground = isset($Format["CycleBackground"]) ? $Format["CycleBackground"] : FALSE;
- $BackgroundR1 = isset($Format["BackgroundR1"]) ? $Format["BackgroundR1"] : 255;
- $BackgroundG1 = isset($Format["BackgroundG1"]) ? $Format["BackgroundG1"] : 255;
- $BackgroundB1 = isset($Format["BackgroundB1"]) ? $Format["BackgroundB1"] : 255;
- $BackgroundAlpha1 = isset($Format["BackgroundAlpha1"]) ? $Format["BackgroundAlpha1"] : 20;
- $BackgroundR2 = isset($Format["BackgroundR2"]) ? $Format["BackgroundR2"] : 230;
- $BackgroundG2 = isset($Format["BackgroundG2"]) ? $Format["BackgroundG2"] : 230;
- $BackgroundB2 = isset($Format["BackgroundB2"]) ? $Format["BackgroundB2"] : 230;
- $BackgroundAlpha2 = isset($Format["BackgroundAlpha2"]) ? $Format["BackgroundAlpha2"] : 20;
- $LabelingMethod = isset($Format["LabelingMethod"]) ? $Format["LabelingMethod"] : LABELING_ALL;
- $LabelSkip = isset($Format["LabelSkip"]) ? $Format["LabelSkip"] : 0;
- $LabelRotation = isset($Format["LabelRotation"]) ? $Format["LabelRotation"] : 0;
- $RemoveSkippedAxis = isset($Format["RemoveSkippedAxis"]) ? $Format["RemoveSkippedAxis"] : FALSE;
- $SkippedAxisTicks = isset($Format["SkippedAxisTicks"]) ? $Format["SkippedAxisTicks"] : $GridTicks+2;
- $SkippedAxisR = isset($Format["SkippedAxisR"]) ? $Format["SkippedAxisR"] : $GridR;
- $SkippedAxisG = isset($Format["SkippedAxisG"]) ? $Format["SkippedAxisG"] : $GridG;
- $SkippedAxisB = isset($Format["SkippedAxisB"]) ? $Format["SkippedAxisB"] : $GridB;
- $SkippedAxisAlpha = isset($Format["SkippedAxisAlpha"]) ? $Format["SkippedAxisAlpha"] : $GridAlpha-30;
- $SkippedTickR = isset($Format["SkippedTickR"]) ? $Format["SkippedTickR"] : $TickRo;
- $SkippedTickG = isset($Format["SkippedTickG"]) ? $Format["SkippedTickG"] : $TickGo;
- $SkippedTickB = isset($Format["SkippedTicksB"]) ? $Format["SkippedTickB"] : $TickBo;
- $SkippedTickAlpha = isset($Format["SkippedTickAlpha"]) ? $Format["SkippedTickAlpha"] : $TickAlpha-80;
- $SkippedInnerTickWidth = isset($Format["SkippedInnerTickWidth"]) ? $Format["SkippedInnerTickWidth"] : 0;
- $SkippedOuterTickWidth = isset($Format["SkippedOuterTickWidth"]) ? $Format["SkippedOuterTickWidth"] : 2;
-
- /* Floating scale require X & Y margins to be set manually */
- if ( $Floating && ( $XMargin == AUTO || $YMargin == 0 ) ) { $Floating = FALSE; }
-
- /* Skip a NOTICE event in case of an empty array */
- if ( $DrawYLines == NONE || $DrawYLines == FALSE ) { $DrawYLines = array("zarma"=>"31"); }
-
- /* Define the color for the skipped elements */
- $SkippedAxisColor = array("R"=>$SkippedAxisR,"G"=>$SkippedAxisG,"B"=>$SkippedAxisB,"Alpha"=>$SkippedAxisAlpha,"Ticks"=>$SkippedAxisTicks);
- $SkippedTickColor = array("R"=>$SkippedTickR,"G"=>$SkippedTickG,"B"=>$SkippedTickB,"Alpha"=>$SkippedTickAlpha);
-
- $Data = $this->DataSet->getData();
- if ( isset($Data["Abscissa"]) ) { $Abscissa = $Data["Abscissa"]; } else { $Abscissa = NULL; }
-
- /* Unset the abscissa axis, needed if we display multiple charts on the same picture */
- if ( $Abscissa != NULL )
- {
- foreach($Data["Axis"] as $AxisID => $Parameters)
- { if ($Parameters["Identity"] == AXIS_X) { unset($Data["Axis"][$AxisID]); } }
- }
-
- /* Build the scale settings */
- $GotXAxis = FALSE;
- foreach($Data["Axis"] as $AxisID => $AxisParameter)
- {
- if ( $AxisParameter["Identity"] == AXIS_X ) { $GotXAxis = TRUE; }
-
- if ( $Pos == SCALE_POS_LEFTRIGHT && $AxisParameter["Identity"] == AXIS_Y)
- { $Height = $this->GraphAreaY2-$this->GraphAreaY1 - $YMargin*2; }
- elseif ( $Pos == SCALE_POS_LEFTRIGHT && $AxisParameter["Identity"] == AXIS_X)
- { $Height = $this->GraphAreaX2-$this->GraphAreaX1; }
- elseif ( $Pos == SCALE_POS_TOPBOTTOM && $AxisParameter["Identity"] == AXIS_Y)
- { $Height = $this->GraphAreaX2-$this->GraphAreaX1 - $YMargin*2;; }
- else
- { $Height = $this->GraphAreaY2-$this->GraphAreaY1; }
-
- $AxisMin = ABSOLUTE_MAX; $AxisMax = OUT_OF_SIGHT;
- if ( $Mode == SCALE_MODE_FLOATING || $Mode == SCALE_MODE_START0 )
- {
- foreach($Data["Series"] as $SerieID => $SerieParameter)
- {
- if ( $SerieParameter["Axis"] == $AxisID && $Data["Series"][$SerieID]["isDrawable"] && $Data["Abscissa"] != $SerieID)
- {
- $AxisMax = max($AxisMax,$Data["Series"][$SerieID]["Max"]);
- $AxisMin = min($AxisMin,$Data["Series"][$SerieID]["Min"]);
- }
- }
- $AutoMargin = (($AxisMax-$AxisMin)/100)*$XReleasePercent;
-
- $Data["Axis"][$AxisID]["Min"] = $AxisMin-$AutoMargin; $Data["Axis"][$AxisID]["Max"] = $AxisMax+$AutoMargin;
- if ( $Mode == SCALE_MODE_START0 ) { $Data["Axis"][$AxisID]["Min"] = 0; }
- }
- elseif ( $Mode == SCALE_MODE_MANUAL )
- {
- if ( isset($ManualScale[$AxisID]["Min"]) && isset($ManualScale[$AxisID]["Max"]) )
- {
- $Data["Axis"][$AxisID]["Min"] = $ManualScale[$AxisID]["Min"];
- $Data["Axis"][$AxisID]["Max"] = $ManualScale[$AxisID]["Max"];
- }
- else
- { echo "Manual scale boundaries not set."; exit(); }
- }
- elseif ( $Mode == SCALE_MODE_ADDALL || $Mode == SCALE_MODE_ADDALL_START0 )
- {
- $Series = "";
- foreach($Data["Series"] as $SerieID => $SerieParameter)
- { if ( $SerieParameter["Axis"] == $AxisID && $SerieParameter["isDrawable"] && $Data["Abscissa"] != $SerieID ) { $Series[$SerieID] = count($Data["Series"][$SerieID]["Data"]); } }
-
- for ($ID=0;$ID<=max($Series)-1;$ID++)
- {
- $PointMin = 0; $PointMax = 0;
- foreach($Series as $SerieID => $ValuesCount )
- {
- if (isset($Data["Series"][$SerieID]["Data"][$ID]) && $Data["Series"][$SerieID]["Data"][$ID] != NULL )
- {
- $Value = $Data["Series"][$SerieID]["Data"][$ID];
- if ( $Value > 0 ) { $PointMax = $PointMax + $Value; } else { $PointMin = $PointMin + $Value; }
- }
- }
- $AxisMax = max($AxisMax,$PointMax);
- $AxisMin = min($AxisMin,$PointMin);
- }
- $AutoMargin = (($AxisMax-$AxisMin)/100)*$XReleasePercent;
- $Data["Axis"][$AxisID]["Min"] = $AxisMin-$AutoMargin; $Data["Axis"][$AxisID]["Max"] = $AxisMax+$AutoMargin;
- }
- $MaxDivs = floor($Height/$MinDivHeight);
-
- if ( $Mode == SCALE_MODE_ADDALL_START0 ) { $Data["Axis"][$AxisID]["Min"] = 0; }
-
- $Scale = $this->computeScale($Data["Axis"][$AxisID]["Min"],$Data["Axis"][$AxisID]["Max"],$MaxDivs,$Factors,$AxisID);
-
- $Data["Axis"][$AxisID]["Margin"] = $AxisParameter["Identity"] == AXIS_X ? $XMargin : $YMargin;
- $Data["Axis"][$AxisID]["ScaleMin"] = $Scale["XMin"];
- $Data["Axis"][$AxisID]["ScaleMax"] = $Scale["XMax"];
- $Data["Axis"][$AxisID]["Rows"] = $Scale["Rows"];
- $Data["Axis"][$AxisID]["RowHeight"] = $Scale["RowHeight"];
-
- if ( isset($Scale["Format"]) ) { $Data["Axis"][$AxisID]["Format"] = $Scale["Format"]; }
-
- if ( !isset($Data["Axis"][$AxisID]["Display"]) ) { $Data["Axis"][$AxisID]["Display"] = NULL; }
- if ( !isset($Data["Axis"][$AxisID]["Format"]) ) { $Data["Axis"][$AxisID]["Format"] = NULL; }
- if ( !isset($Data["Axis"][$AxisID]["Unit"]) ) { $Data["Axis"][$AxisID]["Unit"] = NULL; }
- }
-
- /* Still no X axis */
- if ( $GotXAxis == FALSE )
- {
- if ( $Abscissa != NULL )
- {
- $Points = count($Data["Series"][$Abscissa]["Data"]);
- if ( $AutoAxisLabels )
- $AxisName = isset($Data["Series"][$Abscissa]["Description"]) ? $Data["Series"][$Abscissa]["Description"] : NULL;
- else
- $AxisName = NULL;
- }
- else
- {
- $Points = 0;
- $AxisName = isset($Data["XAxisName"]) ? $Data["XAxisName"] : NULL;
- foreach($Data["Series"] as $SerieID => $SerieParameter)
- { if ( $SerieParameter["isDrawable"] ) { $Points = max($Points,count($SerieParameter["Data"])); } }
- }
-
- $AxisID = count($Data["Axis"]);
- $Data["Axis"][$AxisID]["Identity"] = AXIS_X;
- if ( $Pos == SCALE_POS_LEFTRIGHT ) { $Data["Axis"][$AxisID]["Position"] = AXIS_POSITION_BOTTOM; } else { $Data["Axis"][$AxisID]["Position"] = AXIS_POSITION_LEFT; }
- if ( isset($Data["AbscissaName"]) ) { $Data["Axis"][$AxisID]["Name"] = $Data["AbscissaName"]; }
- if ( $XMargin == AUTO )
- {
- if ( $Pos == SCALE_POS_LEFTRIGHT )
- { $Height = $this->GraphAreaX2-$this->GraphAreaX1; }
- else
- { $Height = $this->GraphAreaY2-$this->GraphAreaY1; }
-
- if ( $Points == 1 )
- $Data["Axis"][$AxisID]["Margin"] = $Height / 2;
- else
- $Data["Axis"][$AxisID]["Margin"] = ($Height/$Points) / 2;
- }
- else
- { $Data["Axis"][$AxisID]["Margin"] = $XMargin; }
- $Data["Axis"][$AxisID]["Rows"] = $Points-1;
- if ( !isset($Data["Axis"][$AxisID]["Display"]) ) { $Data["Axis"][$AxisID]["Display"] = NULL; }
- if ( !isset($Data["Axis"][$AxisID]["Format"]) ) { $Data["Axis"][$AxisID]["Format"] = NULL; }
- if ( !isset($Data["Axis"][$AxisID]["Unit"]) ) { $Data["Axis"][$AxisID]["Unit"] = NULL; }
- }
-
- /* Do we need to reverse the abscissa position? */
- if ( $Pos != SCALE_POS_LEFTRIGHT )
- {
- if ( $Data["AbsicssaPosition"] == AXIS_POSITION_BOTTOM )
- { $Data["AbsicssaPosition"] = AXIS_POSITION_LEFT; }
- else
- { $Data["AbsicssaPosition"] = AXIS_POSITION_RIGHT; }
- }
- $Data["Axis"][$AxisID]["Position"] = $Data["AbsicssaPosition"];
-
- $this->DataSet->saveOrientation($Pos);
- $this->DataSet->saveAxisConfig($Data["Axis"]);
- $this->DataSet->saveYMargin($YMargin);
-
- $FontColorRo = $this->FontColorR; $FontColorGo = $this->FontColorG; $FontColorBo = $this->FontColorB;
-
- $AxisPos["L"] = $this->GraphAreaX1; $AxisPos["R"] = $this->GraphAreaX2; $AxisPos["T"] = $this->GraphAreaY1; $AxisPos["B"] = $this->GraphAreaY2;
- foreach($Data["Axis"] as $AxisID => $Parameters)
- {
- if ( isset($Parameters["Color"]) )
- {
- $AxisR = $Parameters["Color"]["R"]; $AxisG = $Parameters["Color"]["G"]; $AxisB = $Parameters["Color"]["B"];
- $TickR = $Parameters["Color"]["R"]; $TickG = $Parameters["Color"]["G"]; $TickB = $Parameters["Color"]["B"];
- $this->setFontProperties(array("R"=>$Parameters["Color"]["R"],"G"=>$Parameters["Color"]["G"],"B"=>$Parameters["Color"]["B"]));
- }
- else
- {
- $AxisR = $AxisRo; $AxisG = $AxisGo; $AxisB = $AxisBo;
- $TickR = $TickRo; $TickG = $TickGo; $TickB = $TickBo;
- $this->setFontProperties(array("R"=>$FontColorRo,"G"=>$FontColorGo,"B"=>$FontColorBo));
- }
-
- $LastValue = "w00t"; $ID = 1;
- if ( $Parameters["Identity"] == AXIS_X )
- {
- if ( $Pos == SCALE_POS_LEFTRIGHT )
- {
- if ( $Parameters["Position"] == AXIS_POSITION_BOTTOM )
- {
- if ( $LabelRotation == 0 ) { $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $YLabelOffset = 2; }
- if ( $LabelRotation > 0 && $LabelRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $YLabelOffset = 5; }
- if ( $LabelRotation == 180 ) { $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $YLabelOffset = 5; }
- if ( $LabelRotation > 180 && $LabelRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $YLabelOffset = 2; }
-
- if ( !$RemoveXAxis )
- {
- if ( $Floating )
- { $FloatingOffset = $YMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
- else
- { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["B"],$this->GraphAreaX2,$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
-
- if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["B"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
- }
-
- $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2;
-
- if ($Parameters["Rows"] == 0 ) { $Step = $Width; } else { $Step = $Width / ($Parameters["Rows"]); }
-
- $MaxBottom = $AxisPos["B"];
- for($i=0;$i<=$Parameters["Rows"];$i++)
- {
- $XPos = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i;
- $YPos = $AxisPos["B"];
-
- if ( $Abscissa != NULL )
- { if ( isset($Data["Series"][$Abscissa]["Data"][$i]) ) { $Value = $this->scaleFormat($Data["Series"][$Abscissa]["Data"][$i],$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); } else { $Value = ""; } }
- else
- {
- if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) )
- $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]);
- else
- $Value = $i;
- }
-
- $ID++; $Skipped = TRUE;
- if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) && !$RemoveXAxis)
- {
- $Bounds = $this->drawText($XPos,$YPos+$OuterTickWidth+$YLabelOffset,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
- $TxtBottom = $YPos+$OuterTickWidth+2+($Bounds[0]["Y"]-$Bounds[2]["Y"]);
- $MaxBottom = max($MaxBottom,$TxtBottom);
- $LastValue = $Value;
- $Skipped = FALSE;
- }
-
- if ( $RemoveXAxis ) { $Skipped = FALSE; }
-
- if ( $Skipped )
- {
- if ( $DrawXLines && !$RemoveSkippedAxis ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$SkippedAxisColor); }
- if ( ($SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0) && !$RemoveXAxis && !$RemoveSkippedAxis) { $this->drawLine($XPos,$YPos-$SkippedInnerTickWidth,$XPos,$YPos+$SkippedOuterTickWidth,$SkippedTickColor); }
- }
- else
- {
- if ( $DrawXLines && ($XPos != $this->GraphAreaX1 && $XPos != $this->GraphAreaX2) ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
- if ( ($InnerTickWidth !=0 || $OuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos,$YPos-$InnerTickWidth,$XPos,$YPos+$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
- }
- }
-
- if ( isset($Parameters["Name"]) && !$RemoveXAxis)
- {
- $YPos = $MaxBottom+2;
- $XPos = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2;
- $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_TOPMIDDLE));
- $MaxBottom = $Bounds[0]["Y"];
-
- $this->DataSet->Data["GraphArea"]["Y2"] = $MaxBottom + $this->FontSize;
- }
-
- $AxisPos["B"] = $MaxBottom + $ScaleSpacing;
- }
- elseif ( $Parameters["Position"] == AXIS_POSITION_TOP )
- {
- if ( $LabelRotation == 0 ) { $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $YLabelOffset = 2; }
- if ( $LabelRotation > 0 && $LabelRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $YLabelOffset = 2; }
- if ( $LabelRotation == 180 ) { $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $YLabelOffset = 5; }
- if ( $LabelRotation > 180 && $LabelRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $YLabelOffset = 5; }
-
- if ( !$RemoveXAxis )
- {
- if ( $Floating )
- { $FloatingOffset = $YMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
- else
- { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["T"],$this->GraphAreaX2,$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
-
- if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["T"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
- }
-
- $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2;
-
- if ($Parameters["Rows"] == 0 ) { $Step = $Width; } else { $Step = $Width / $Parameters["Rows"]; }
-
- $MinTop = $AxisPos["T"];
- for($i=0;$i<=$Parameters["Rows"];$i++)
- {
- $XPos = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i;
- $YPos = $AxisPos["T"];
-
- if ( $Abscissa != NULL )
- { if ( isset($Data["Series"][$Abscissa]["Data"][$i]) ) { $Value = $this->scaleFormat($Data["Series"][$Abscissa]["Data"][$i],$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); } else { $Value = ""; } }
- else
- {
- if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) )
- $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]);
- else
- $Value = $i;
- }
-
- $ID++; $Skipped = TRUE;
- if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) && !$RemoveXAxis)
- {
- $Bounds = $this->drawText($XPos,$YPos-$OuterTickWidth-$YLabelOffset,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
- $TxtBox = $YPos-$OuterTickWidth-2-($Bounds[0]["Y"]-$Bounds[2]["Y"]);
- $MinTop = min($MinTop,$TxtBox);
- $LastValue = $Value;
- $Skipped = FALSE;
- }
-
- if ( $RemoveXAxis ) { $Skipped = FALSE; }
-
- if ( $Skipped )
- {
- if ( $DrawXLines && !$RemoveSkippedAxis ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$SkippedAxisColor); }
- if ( ($SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0) && !$RemoveXAxis && !$RemoveSkippedAxis ) { $this->drawLine($XPos,$YPos+$SkippedInnerTickWidth,$XPos,$YPos-$SkippedOuterTickWidth,$SkippedTickColor); }
- }
- else
- {
- if ( $DrawXLines ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
- if ( ($InnerTickWidth !=0 || $OuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos,$YPos+$InnerTickWidth,$XPos,$YPos-$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
- }
-
- }
-
- if ( isset($Parameters["Name"]) && !$RemoveXAxis )
- {
- $YPos = $MinTop-2;
- $XPos = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2;
- $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
- $MinTop = $Bounds[2]["Y"];
-
- $this->DataSet->Data["GraphArea"]["Y1"] = $MinTop;
- }
-
- $AxisPos["T"] = $MinTop - $ScaleSpacing;
- }
- }
- elseif ( $Pos == SCALE_POS_TOPBOTTOM )
- {
- if ( $Parameters["Position"] == AXIS_POSITION_LEFT )
- {
- if ( $LabelRotation == 0 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = -2; }
- if ( $LabelRotation > 0 && $LabelRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = -6; }
- if ( $LabelRotation == 180 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = -2; }
- if ( $LabelRotation > 180 && $LabelRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = -5; }
-
- if ( !$RemoveXAxis )
- {
- if ( $Floating )
- { $FloatingOffset = $YMargin; $this->drawLine($AxisPos["L"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
- else
- { $FloatingOffset = 0; $this->drawLine($AxisPos["L"],$this->GraphAreaY1,$AxisPos["L"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
-
- if ( $DrawArrows ) { $this->drawArrow($AxisPos["L"],$this->GraphAreaY2-$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY2+($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
- }
-
- $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2;
-
- if ($Parameters["Rows"] == 0 ) { $Step = $Height; } else { $Step = $Height / $Parameters["Rows"]; }
-
- $MinLeft = $AxisPos["L"];
- for($i=0;$i<=$Parameters["Rows"];$i++)
- {
- $YPos = $this->GraphAreaY1 + $Parameters["Margin"] + $Step*$i;
- $XPos = $AxisPos["L"];
-
- if ( $Abscissa != NULL )
- { if ( isset($Data["Series"][$Abscissa]["Data"][$i]) ) { $Value = $this->scaleFormat($Data["Series"][$Abscissa]["Data"][$i],$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); } else { $Value = ""; } }
- else
- {
- if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) )
- $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]);
- else
- $Value = $i;
- }
-
- $ID++; $Skipped = TRUE;
- if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) && !$RemoveXAxis)
- {
- $Bounds = $this->drawText($XPos-$OuterTickWidth+$XLabelOffset,$YPos,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
- $TxtBox = $XPos-$OuterTickWidth-2-($Bounds[1]["X"]-$Bounds[0]["X"]);
- $MinLeft = min($MinLeft,$TxtBox);
- $LastValue = $Value;
- $Skipped = FALSE;
- }
-
- if ( $RemoveXAxis ) { $Skipped = FALSE; }
-
- if ( $Skipped )
- {
- if ( $DrawXLines && !$RemoveSkippedAxis ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,$SkippedAxisColor); }
- if ( ($SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0) && !$RemoveXAxis && !$RemoveSkippedAxis ) { $this->drawLine($XPos-$SkippedOuterTickWidth,$YPos,$XPos+$SkippedInnerTickWidth,$YPos,$SkippedTickColor); }
- }
- else
- {
- if ( $DrawXLines && ($YPos != $this->GraphAreaY1 && $YPos != $this->GraphAreaY2) ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
- if ( ($InnerTickWidth !=0 || $OuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos-$OuterTickWidth,$YPos,$XPos+$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
- }
-
- }
- if ( isset($Parameters["Name"]) && !$RemoveXAxis )
- {
- $XPos = $MinLeft-2;
- $YPos = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2;
- $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>90));
- $MinLeft = $Bounds[0]["X"];
-
- $this->DataSet->Data["GraphArea"]["X1"] = $MinLeft;
- }
-
- $AxisPos["L"] = $MinLeft - $ScaleSpacing;
- }
- elseif ( $Parameters["Position"] == AXIS_POSITION_RIGHT )
- {
- if ( $LabelRotation == 0 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = 2; }
- if ( $LabelRotation > 0 && $LabelRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $XLabelOffset = 6; }
- if ( $LabelRotation == 180 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = 5; }
- if ( $LabelRotation > 180 && $LabelRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $XLabelOffset = 7; }
-
- if ( !$RemoveXAxis )
- {
- if ( $Floating )
- { $FloatingOffset = $YMargin; $this->drawLine($AxisPos["R"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
- else
- { $FloatingOffset = 0; $this->drawLine($AxisPos["R"],$this->GraphAreaY1,$AxisPos["R"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
-
- if ( $DrawArrows ) { $this->drawArrow($AxisPos["R"],$this->GraphAreaY2-$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY2+($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
- }
-
- $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2;
-
- if ($Parameters["Rows"] == 0 ) { $Step = $Height; } else { $Step = $Height / $Parameters["Rows"]; }
-
- $MaxRight = $AxisPos["R"];
- for($i=0;$i<=$Parameters["Rows"];$i++)
- {
- $YPos = $this->GraphAreaY1 + $Parameters["Margin"] + $Step*$i;
- $XPos = $AxisPos["R"];
-
- if ( $Abscissa != NULL )
- { if ( isset($Data["Series"][$Abscissa]["Data"][$i]) ) { $Value = $this->scaleFormat($Data["Series"][$Abscissa]["Data"][$i],$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]); } else { $Value = ""; } }
- else
- {
- if ( isset($Parameters["ScaleMin"]) && isset ($Parameters["RowHeight"]) )
- $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Data["XAxisDisplay"],$Data["XAxisFormat"],$Data["XAxisUnit"]);
- else
- $Value = $i;
- }
-
- $ID++; $Skipped = TRUE;
- if ( $this->isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip) && !$RemoveXAxis)
- {
- $Bounds = $this->drawText($XPos+$OuterTickWidth+$XLabelOffset,$YPos,$Value,array("Angle"=>$LabelRotation,"Align"=>$LabelAlign));
- $TxtBox = $XPos+$OuterTickWidth+2+($Bounds[1]["X"]-$Bounds[0]["X"]);
- $MaxRight = max($MaxRight,$TxtBox);
- $LastValue = $Value;
- $Skipped = FALSE;
- }
-
- if ( $RemoveXAxis ) { $Skipped = FALSE; }
-
- if ( $Skipped )
- {
- if ( $DrawXLines && !$RemoveSkippedAxis ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,$SkippedAxisColor); }
- if ( ($SkippedInnerTickWidth != 0 || $SkippedOuterTickWidth != 0) && !$RemoveXAxis && !$RemoveSkippedAxis ) { $this->drawLine($XPos+$SkippedOuterTickWidth,$YPos,$XPos-$SkippedInnerTickWidth,$YPos,$SkippedTickColor); }
- }
- else
- {
- if ( $DrawXLines ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
- if ( ($InnerTickWidth != 0 || $OuterTickWidth != 0) && !$RemoveXAxis ) { $this->drawLine($XPos+$OuterTickWidth,$YPos,$XPos-$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
- }
-
- }
-
- if ( isset($Parameters["Name"]) && !$RemoveXAxis)
- {
- $XPos = $MaxRight+4;
- $YPos = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2;
- $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>270));
- $MaxRight = $Bounds[1]["X"];
-
- $this->DataSet->Data["GraphArea"]["X2"] = $MaxRight + $this->FontSize;
- }
-
- $AxisPos["R"] = $MaxRight + $ScaleSpacing;
- }
- }
- }
-
-
-
- if ( $Parameters["Identity"] == AXIS_Y )
- {
- if ( $Pos == SCALE_POS_LEFTRIGHT )
- {
- if ( $Parameters["Position"] == AXIS_POSITION_LEFT )
- {
-
- if ( $Floating )
- { $FloatingOffset = $XMargin; $this->drawLine($AxisPos["L"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
- else
- { $FloatingOffset = 0; $this->drawLine($AxisPos["L"],$this->GraphAreaY1,$AxisPos["L"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
-
- if ( $DrawArrows ) { $this->drawArrow($AxisPos["L"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["L"],$this->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
-
- $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2;
- $Step = $Height / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MinLeft = $AxisPos["L"];
- $LastY = NULL;
- for($i=0;$i<=$Parameters["Rows"];$i++)
- {
- $YPos = $this->GraphAreaY2 - $Parameters["Margin"] - $Step*$i;
- $XPos = $AxisPos["L"];
- $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]);
-
- if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
- if ( $LastY != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($this->GraphAreaX1+$FloatingOffset,$LastY,$this->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); }
-
- if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
-
- if ( $DrawSubTicks && $i != $Parameters["Rows"] )
- $this->drawLine($XPos-$OuterSubTickWidth,$YPos-$SubTicksSize,$XPos+$InnerSubTickWidth,$YPos-$SubTicksSize,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
-
- $this->drawLine($XPos-$OuterTickWidth,$YPos,$XPos+$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
- $Bounds = $this->drawText($XPos-$OuterTickWidth-2,$YPos,$Value,array("Align"=>TEXT_ALIGN_MIDDLERIGHT));
- $TxtLeft = $XPos-$OuterTickWidth-2-($Bounds[1]["X"]-$Bounds[0]["X"]);
- $MinLeft = min($MinLeft,$TxtLeft);
-
- $LastY = $YPos;
- }
-
- if ( isset($Parameters["Name"]) )
- {
- $XPos = $MinLeft-2;
- $YPos = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2;
- $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>90));
- $MinLeft = $Bounds[2]["X"];
-
- $this->DataSet->Data["GraphArea"]["X1"] = $MinLeft;
- }
-
- $AxisPos["L"] = $MinLeft - $ScaleSpacing;
- }
- elseif ( $Parameters["Position"] == AXIS_POSITION_RIGHT )
- {
- if ( $Floating )
- { $FloatingOffset = $XMargin; $this->drawLine($AxisPos["R"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY2-$Parameters["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
- else
- { $FloatingOffset = 0; $this->drawLine($AxisPos["R"],$this->GraphAreaY1,$AxisPos["R"],$this->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
-
- if ( $DrawArrows ) { $this->drawArrow($AxisPos["R"],$this->GraphAreaY1+$Parameters["Margin"],$AxisPos["R"],$this->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
-
- $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Parameters["Margin"]*2;
- $Step = $Height / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MaxLeft = $AxisPos["R"];
- $LastY = NULL;
- for($i=0;$i<=$Parameters["Rows"];$i++)
- {
- $YPos = $this->GraphAreaY2 - $Parameters["Margin"] - $Step*$i;
- $XPos = $AxisPos["R"];
- $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]);
-
- if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
- if ( $LastY != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($this->GraphAreaX1+$FloatingOffset,$LastY,$this->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); }
-
- if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
-
- if ( $DrawSubTicks && $i != $Parameters["Rows"] )
- $this->drawLine($XPos-$OuterSubTickWidth,$YPos-$SubTicksSize,$XPos+$InnerSubTickWidth,$YPos-$SubTicksSize,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
-
- $this->drawLine($XPos-$InnerTickWidth,$YPos,$XPos+$OuterTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
- $Bounds = $this->drawText($XPos+$OuterTickWidth+2,$YPos,$Value,array("Align"=>TEXT_ALIGN_MIDDLELEFT));
- $TxtLeft = $XPos+$OuterTickWidth+2+($Bounds[1]["X"]-$Bounds[0]["X"]);
- $MaxLeft = max($MaxLeft,$TxtLeft);
-
- $LastY = $YPos;
- }
-
- if ( isset($Parameters["Name"]) )
- {
- $XPos = $MaxLeft+6;
- $YPos = $this->GraphAreaY1+($this->GraphAreaY2-$this->GraphAreaY1)/2;
- $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>270));
- $MaxLeft = $Bounds[2]["X"];
-
- $this->DataSet->Data["GraphArea"]["X2"] = $MaxLeft + $this->FontSize;
- }
- $AxisPos["R"] = $MaxLeft + $ScaleSpacing;
- }
- }
- elseif ( $Pos == SCALE_POS_TOPBOTTOM )
- {
- if ( $Parameters["Position"] == AXIS_POSITION_TOP )
- {
- if ( $Floating )
- { $FloatingOffset = $XMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
- else
- { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["T"],$this->GraphAreaX2,$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
-
- if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["T"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["T"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
-
- $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2;
- $Step = $Width / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MinTop = $AxisPos["T"];
- $LastX = NULL;
- for($i=0;$i<=$Parameters["Rows"];$i++)
- {
- $XPos = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i;
- $YPos = $AxisPos["T"];
- $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]);
-
- if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
- if ( $LastX != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($LastX,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$BGColor); }
-
- if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
-
- if ( $DrawSubTicks && $i != $Parameters["Rows"] )
- $this->drawLine($XPos+$SubTicksSize,$YPos-$OuterSubTickWidth,$XPos+$SubTicksSize,$YPos+$InnerSubTickWidth,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
-
- $this->drawLine($XPos,$YPos-$OuterTickWidth,$XPos,$YPos+$InnerTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
- $Bounds = $this->drawText($XPos,$YPos-$OuterTickWidth-2,$Value,array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
- $TxtHeight = $YPos-$OuterTickWidth-2-($Bounds[1]["Y"]-$Bounds[2]["Y"]);
- $MinTop = min($MinTop,$TxtHeight);
-
- $LastX = $XPos;
- }
-
- if ( isset($Parameters["Name"]) )
- {
- $YPos = $MinTop-2;
- $XPos = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2;
- $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
- $MinTop = $Bounds[2]["Y"];
-
- $this->DataSet->Data["GraphArea"]["Y1"] = $MinTop;
- }
-
- $AxisPos["T"] = $MinTop - $ScaleSpacing;
- }
- elseif ( $Parameters["Position"] == AXIS_POSITION_BOTTOM )
- {
- if ( $Floating )
- { $FloatingOffset = $XMargin; $this->drawLine($this->GraphAreaX1+$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
- else
- { $FloatingOffset = 0; $this->drawLine($this->GraphAreaX1,$AxisPos["B"],$this->GraphAreaX2,$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
-
- if ( $DrawArrows ) { $this->drawArrow($this->GraphAreaX2-$Parameters["Margin"],$AxisPos["B"],$this->GraphAreaX2+($ArrowSize*2),$AxisPos["B"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
-
- $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Parameters["Margin"]*2;
- $Step = $Width / $Parameters["Rows"]; $SubTicksSize = $Step /2; $MaxBottom = $AxisPos["B"];
- $LastX = NULL;
- for($i=0;$i<=$Parameters["Rows"];$i++)
- {
- $XPos = $this->GraphAreaX1 + $Parameters["Margin"] + $Step*$i;
- $YPos = $AxisPos["B"];
- $Value = $this->scaleFormat($Parameters["ScaleMin"] + $Parameters["RowHeight"]*$i,$Parameters["Display"],$Parameters["Format"],$Parameters["Unit"]);
-
- if ( $i%2 == 1 ) { $BGColor = array("R"=>$BackgroundR1,"G"=>$BackgroundG1,"B"=>$BackgroundB1,"Alpha"=>$BackgroundAlpha1); } else { $BGColor = array("R"=>$BackgroundR2,"G"=>$BackgroundG2,"B"=>$BackgroundB2,"Alpha"=>$BackgroundAlpha2); }
- if ( $LastX != NULL && $CycleBackground && ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->drawFilledRectangle($LastX,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$BGColor); }
-
- if ( $DrawYLines == ALL || in_array($AxisID,$DrawYLines) ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
-
- if ( $DrawSubTicks && $i != $Parameters["Rows"] )
- $this->drawLine($XPos+$SubTicksSize,$YPos-$OuterSubTickWidth,$XPos+$SubTicksSize,$YPos+$InnerSubTickWidth,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
-
- $this->drawLine($XPos,$YPos-$OuterTickWidth,$XPos,$YPos+$InnerTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
- $Bounds = $this->drawText($XPos,$YPos+$OuterTickWidth+2,$Value,array("Align"=>TEXT_ALIGN_TOPMIDDLE));
- $TxtHeight = $YPos+$OuterTickWidth+2+($Bounds[1]["Y"]-$Bounds[2]["Y"]);
- $MaxBottom = max($MaxBottom,$TxtHeight);
-
- $LastX = $XPos;
- }
-
- if ( isset($Parameters["Name"]) )
- {
- $YPos = $MaxBottom+2;
- $XPos = $this->GraphAreaX1+($this->GraphAreaX2-$this->GraphAreaX1)/2;
- $Bounds = $this->drawText($XPos,$YPos,$Parameters["Name"],array("Align"=>TEXT_ALIGN_TOPMIDDLE));
- $MaxBottom = $Bounds[0]["Y"];
-
- $this->DataSet->Data["GraphArea"]["Y2"] = $MaxBottom + $this->FontSize;
- }
-
- $AxisPos["B"] = $MaxBottom + $ScaleSpacing;
- }
- }
- }
- }
- }
-
- function isValidLabel($Value,$LastValue,$LabelingMethod,$ID,$LabelSkip)
- {
- if ( $LabelingMethod == LABELING_DIFFERENT && $Value != $LastValue ) { return(TRUE); }
- if ( $LabelingMethod == LABELING_DIFFERENT && $Value == $LastValue ) { return(FALSE); }
- if ( $LabelingMethod == LABELING_ALL && $LabelSkip == 0 ) { return(TRUE); }
- if ( $LabelingMethod == LABELING_ALL && ($ID+$LabelSkip) % ($LabelSkip+1) != 1 ) { return(FALSE); }
-
- return(TRUE);
- }
-
- /* Compute the scale, check for the best visual factors */
- function computeScale($XMin,$XMax,$MaxDivs,$Factors,$AxisID=0)
- {
- /* Compute each factors */
- $Results = "";
- foreach ($Factors as $Key => $Factor)
- $Results[$Factor] = $this->processScale($XMin,$XMax,$MaxDivs,array($Factor),$AxisID);
-
- /* Remove scales that are creating to much decimals */
- $GoodScaleFactors = "";
- foreach ($Results as $Key => $Result)
- {
- $Decimals = preg_split("/\./",$Result["RowHeight"]);
- if ( (!isset($Decimals[1])) || (strlen($Decimals[1]) < 6) ) { $GoodScaleFactors[] = $Key; }
- }
-
- /* Found no correct scale, shame,... returns the 1st one as default */
- if ( $GoodScaleFactors == "" ) { return($Results[$Factors[0]]); }
-
- /* Find the factor that cause the maximum number of Rows */
- $MaxRows = 0; $BestFactor = 0;
- foreach($GoodScaleFactors as $Key => $Factor)
- { if ( $Results[$Factor]["Rows"] > $MaxRows ) { $MaxRows = $Results[$Factor]["Rows"]; $BestFactor = $Factor; } }
-
- /* Return the best visual scale */
- return($Results[$BestFactor]);
- }
-
- /* Compute the best matching scale based on size & factors */
- function processScale($XMin,$XMax,$MaxDivs,$Factors,$AxisID)
- {
- $ScaleHeight = abs(ceil($XMax)-floor($XMin));
-
- if ( isset($this->DataSet->Data["Axis"][$AxisID]["Format"]) )
- $Format = $this->DataSet->Data["Axis"][$AxisID]["Format"];
- else
- $Format = NULL;
-
- if ( isset($this->DataSet->Data["Axis"][$AxisID]["Display"]) )
- $Mode = $this->DataSet->Data["Axis"][$AxisID]["Display"];
- else
- $Mode = AXIS_FORMAT_DEFAULT;
-
- $Scale = "";
- if ( $XMin != $XMax )
- {
- $Found = FALSE; $Rescaled = FALSE; $Scaled10Factor = .0001; $Result = 0;
- while(!$Found)
- {
- foreach($Factors as $Key => $Factor)
- {
- if ( !$Found )
- {
- if ( !($this->modulo($XMin,$Factor*$Scaled10Factor) == 0) || ($XMin != floor($XMin))) { $XMinRescaled = floor($XMin/($Factor*$Scaled10Factor))*$Factor*$Scaled10Factor; } else { $XMinRescaled = $XMin; }
- if ( !($this->modulo($XMax,$Factor*$Scaled10Factor) == 0) || ($XMax != floor($XMax))) { $XMaxRescaled = floor($XMax/($Factor*$Scaled10Factor))*$Factor*$Scaled10Factor+($Factor*$Scaled10Factor); } else { $XMaxRescaled = $XMax; }
- $ScaleHeightRescaled = abs($XMaxRescaled-$XMinRescaled);
-
- if ( !$Found && floor($ScaleHeightRescaled/($Factor*$Scaled10Factor)) <= $MaxDivs ) { $Found = TRUE; $Rescaled = TRUE; $Result = $Factor * $Scaled10Factor; }
- }
- }
- $Scaled10Factor = $Scaled10Factor * 10;
- }
-
- /* ReCall Min / Max / Height */
- if ( $Rescaled ) { $XMin = $XMinRescaled; $XMax = $XMaxRescaled; $ScaleHeight = $ScaleHeightRescaled; }
-
- /* Compute rows size */
- $Rows = floor($ScaleHeight / $Result); if ( $Rows == 0 ) { $Rows = 1; }
- $RowHeight = $ScaleHeight / $Rows;
-
- /* Return the results */
- $Scale["Rows"] = $Rows; $Scale["RowHeight"] = $RowHeight; $Scale["XMin"] = $XMin; $Scale["XMax"] = $XMax;
-
- /* Compute the needed decimals for the metric view to avoid repetition of the same X Axis labels */
- if ( $Mode == AXIS_FORMAT_METRIC && $Format == NULL )
- {
- $Done = FALSE; $GoodDecimals = 0;
- for($Decimals=0;$Decimals<=10;$Decimals++)
- {
- if ( !$Done )
- {
- $LastLabel = "zob"; $ScaleOK = TRUE;
- for($i=0;$i<=$Rows;$i++)
- {
- $Value = $XMin + $i*$RowHeight;
- $Label = $this->scaleFormat($Value,AXIS_FORMAT_METRIC,$Decimals);
-
- if ( $LastLabel == $Label ) { $ScaleOK = FALSE; }
- $LastLabel = $Label;
- }
- if ( $ScaleOK ) { $Done = TRUE; $GoodDecimals = $Decimals; }
- }
- }
-
- $Scale["Format"] = $GoodDecimals;
- }
- }
- else
- {
- /* If all values are the same we keep a +1/-1 scale */
- $Rows = 2; $XMin = $XMax-1; $XMax = $XMax+1; $RowHeight = 1;
-
- /* Return the results */
- $Scale["Rows"] = $Rows; $Scale["RowHeight"] = $RowHeight; $Scale["XMin"] = $XMin; $Scale["XMax"] = $XMax;
- }
-
- return($Scale);
- }
-
- function modulo($Value1,$Value2)
- {
- if (floor($Value2) == 0) { return(0); }
- if (floor($Value2) != 0) { return($Value1 % $Value2); }
-
- $MinValue = min($Value1,$Value2); $Factor = 10;
- while ( floor($MinValue*$Factor) == 0 )
- { $Factor = $Factor * 10; }
-
- return(($Value1*$Factor) % ($Value2*$Factor));
- }
-
- /* Draw an X threshold */
- function drawXThreshold($Value,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : 255;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 50;
- $Weight = isset($Format["Weight"]) ? $Format["Weight"] : NULL;
- $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : 6;
- $Wide = isset($Format["Wide"]) ? $Format["Wide"] : FALSE;
- $WideFactor = isset($Format["WideFactor"]) ? $Format["WideFactor"] : 5;
- $WriteCaption = isset($Format["WriteCaption"]) ? $Format["WriteCaption"] : FALSE;
- $Caption = isset($Format["Caption"]) ? $Format["Caption"] : NULL;
- $CaptionAlign = isset($Format["CaptionAlign"]) ? $Format["CaptionAlign"] : CAPTION_LEFT_TOP;
- $CaptionOffset = isset($Format["CaptionOffset"]) ? $Format["CaptionOffset"] : 5;
- $CaptionR = isset($Format["CaptionR"]) ? $Format["CaptionR"] : 255;
- $CaptionG = isset($Format["CaptionG"]) ? $Format["CaptionG"] : 255;
- $CaptionB = isset($Format["CaptionB"]) ? $Format["CaptionB"] : 255;
- $CaptionAlpha = isset($Format["CaptionAlpha"]) ? $Format["CaptionAlpha"] : 100;
- $DrawBox = isset($Format["DrawBox"]) ? $Format["DrawBox"] : TRUE;
- $DrawBoxBorder = isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : FALSE;
- $BorderOffset = isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 3;
- $BoxRounded = isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : TRUE;
- $RoundedRadius = isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 3;
- $BoxR = isset($Format["BoxR"]) ? $Format["BoxR"] : 0;
- $BoxG = isset($Format["BoxG"]) ? $Format["BoxG"] : 0;
- $BoxB = isset($Format["BoxB"]) ? $Format["BoxB"] : 0;
- $BoxAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 30;
- $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : "";
- $BoxBorderR = isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 255;
- $BoxBorderG = isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 255;
- $BoxBorderB = isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 255;
- $BoxBorderAlpha = isset($Format["BoxBorderAlpha"]) ? $Format["BoxBorderAlpha"] : 100;
- $ValueIsLabel = isset($Format["ValueIsLabel"]) ? $Format["ValueIsLabel"] : FALSE;
-
- $Data = $this->DataSet->getData();
- $AbscissaMargin = $this->getAbscissaMargin($Data);
- $XScale = $this->scaleGetXSettings();
-
- if ( is_array($Value) ) { foreach ($Value as $Key => $ID) { $this->drawXThreshold($ID,$Format); } return(0); }
-
- if ( $ValueIsLabel )
- {
- $Format["ValueIsLabel"] = FALSE;
- foreach($Data["Series"][$Data["Abscissa"]]["Data"] as $Key => $SerieValue)
- { if ( $SerieValue == $Value ) { $this->drawXThreshold($Key,$Format); } }
-
- return(0);
- }
-
- $CaptionSettings = array("DrawBox"=>$DrawBox,"DrawBoxBorder"=>$DrawBoxBorder,"BorderOffset"=>$BorderOffset,"BoxRounded"=>$BoxRounded,"RoundedRadius"=>$RoundedRadius,
- "BoxR"=>$BoxR,"BoxG"=>$BoxG,"BoxB"=>$BoxB,"BoxAlpha"=>$BoxAlpha,"BoxSurrounding"=>$BoxSurrounding,
- "BoxBorderR"=>$BoxBorderR,"BoxBorderG"=>$BoxBorderG,"BoxBorderB"=>$BoxBorderB,"BoxBorderAlpha"=>$BoxBorderAlpha,
- "R"=>$CaptionR,"G"=>$CaptionG,"B"=>$CaptionB,"Alpha"=>$CaptionAlpha);
-
- if ( $Caption == NULL )
- {
- if ( isset($Data["Abscissa"]) )
- {
- if ( isset($Data["Series"][$Data["Abscissa"]]["Data"][$Value]) )
- $Caption = $Data["Series"][$Data["Abscissa"]]["Data"][$Value];
- else
- $Caption = $Value;
- }
- else
- $Caption = $Value;
- }
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- $XStep = (($this->GraphAreaX2 - $this->GraphAreaX1) - $XScale[0] *2 ) / $XScale[1];
- $XPos = $this->GraphAreaX1 + $XScale[0] + $XStep * $Value;
- $YPos1 = $this->GraphAreaY1 + $Data["YMargin"];
- $YPos2 = $this->GraphAreaY2 - $Data["YMargin"];
-
- if ( $XPos >= $this->GraphAreaX1 + $AbscissaMargin && $XPos <= $this->GraphAreaX2 - $AbscissaMargin )
- {
- $this->drawLine($XPos,$YPos1,$XPos,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
-
- if ( $Wide )
- {
- $this->drawLine($XPos-1,$YPos1,$XPos-1,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
- $this->drawLine($XPos+1,$YPos1,$XPos+1,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
- }
-
- if ( $WriteCaption )
- {
- if ( $CaptionAlign == CAPTION_LEFT_TOP )
- { $Y = $YPos1 + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_TOPMIDDLE; }
- else
- { $Y = $YPos2 - $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_BOTTOMMIDDLE; }
-
- $this->drawText($XPos,$Y,$Caption,$CaptionSettings);
- }
-
- return(array("X"=>$XPos));
- }
- }
- elseif( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
- {
- $XStep = (($this->GraphAreaY2 - $this->GraphAreaY1) - $XScale[0] *2 ) / $XScale[1];
- $XPos = $this->GraphAreaY1 + $XScale[0] + $XStep * $Value;
- $YPos1 = $this->GraphAreaX1 + $Data["YMargin"];
- $YPos2 = $this->GraphAreaX2 - $Data["YMargin"];
-
- if ( $XPos >= $this->GraphAreaY1 + $AbscissaMargin && $XPos <= $this->GraphAreaY2 - $AbscissaMargin )
- {
- $this->drawLine($YPos1,$XPos,$YPos2,$XPos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
-
- if ( $Wide )
- {
- $this->drawLine($YPos1,$XPos-1,$YPos2,$XPos-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
- $this->drawLine($YPos1,$XPos+1,$YPos2,$XPos+1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
- }
-
- if ( $WriteCaption )
- {
- if ( $CaptionAlign == CAPTION_LEFT_TOP )
- { $Y = $YPos1 + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLELEFT; }
- else
- { $Y = $YPos2 - $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLERIGHT; }
-
- $this->drawText($Y,$XPos,$Caption,$CaptionSettings);
- }
-
- return(array("X"=>$XPos));
- }
- }
- }
-
- /* Draw an X threshold area */
- function drawXThresholdArea($Value1,$Value2,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : 255;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 20;
- $Border = isset($Format["Border"]) ? $Format["Border"] : TRUE;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
- $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha + 20;
- $BorderTicks = isset($Format["BorderTicks"]) ? $Format["BorderTicks"] : 2;
- $AreaName = isset($Format["AreaName"]) ? $Format["AreaName"] : NULL;
- $NameAngle = isset($Format["NameAngle"]) ? $Format["NameAngle"] : ZONE_NAME_ANGLE_AUTO;
- $NameR = isset($Format["NameR"]) ? $Format["NameR"] : 255;
- $NameG = isset($Format["NameG"]) ? $Format["NameG"] : 255;
- $NameB = isset($Format["NameB"]) ? $Format["NameB"] : 255;
- $NameAlpha = isset($Format["NameAlpha"]) ? $Format["NameAlpha"] : 100;
- $DisableShadowOnArea = isset($Format["DisableShadowOnArea"]) ? $Format["DisableShadowOnArea"] : TRUE;
-
- $RestoreShadow = $this->Shadow;
- if ( $DisableShadowOnArea && $this->Shadow ) { $this->Shadow = FALSE; }
-
- if ($BorderAlpha >100) { $BorderAlpha = 100;}
-
- $Data = $this->DataSet->getData();
- $XScale = $this->scaleGetXSettings();
- $AbscissaMargin = $this->getAbscissaMargin($Data);
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- $XStep = (($this->GraphAreaX2 - $this->GraphAreaX1) - $XScale[0] *2 ) / $XScale[1];
- $XPos1 = $this->GraphAreaX1 + $XScale[0] + $XStep * $Value1;
- $XPos2 = $this->GraphAreaX1 + $XScale[0] + $XStep * $Value2;
- $YPos1 = $this->GraphAreaY1 + $Data["YMargin"];
- $YPos2 = $this->GraphAreaY2 - $Data["YMargin"];
-
- if ( $XPos1 < $this->GraphAreaX1 + $XScale[0] ) { $XPos1 = $this->GraphAreaX1 + $XScale[0]; }
- if ( $XPos1 > $this->GraphAreaX2 - $XScale[0] ) { $XPos1 = $this->GraphAreaX2 - $XScale[0]; }
- if ( $XPos2 < $this->GraphAreaX1 + $XScale[0] ) { $XPos2 = $this->GraphAreaX1 + $XScale[0]; }
- if ( $XPos2 > $this->GraphAreaX2 - $XScale[0] ) { $XPos2 = $this->GraphAreaX2 - $XScale[0]; }
-
- $this->drawFilledRectangle($XPos1,$YPos1,$XPos2,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
-
- if ( $Border )
- {
- $this->drawLine($XPos1,$YPos1,$XPos1,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
- $this->drawLine($XPos2,$YPos1,$XPos2,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
- }
-
- if ( $AreaName != NULL )
- {
- $XPos = ($XPos2-$XPos1)/2 + $XPos1;
- $YPos = ($YPos2-$YPos1)/2 + $YPos1;
-
- if ( $NameAngle == ZONE_NAME_ANGLE_AUTO )
- {
- $TxtPos = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$AreaName);
- $TxtWidth = $TxtPos[1]["X"] - $TxtPos[0]["X"];
- if ( abs($XPos2 - $XPos1) > $TxtWidth ) { $NameAngle = 0; } else { $NameAngle = 90; }
- }
- $this->Shadow = $RestoreShadow;
- $this->drawText($XPos,$YPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>$NameAngle,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE));
- if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; }
- }
-
- $this->Shadow = $RestoreShadow;
- return(array("X1"=>$XPos1,"X2"=>$XPos2));
- }
- elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
- {
- $XStep = (($this->GraphAreaY2 - $this->GraphAreaY1) - $XScale[0] *2 ) / $XScale[1];
- $XPos1 = $this->GraphAreaY1 + $XScale[0] + $XStep * $Value1;
- $XPos2 = $this->GraphAreaY1 + $XScale[0] + $XStep * $Value2;
- $YPos1 = $this->GraphAreaX1 + $Data["YMargin"];
- $YPos2 = $this->GraphAreaX2 - $Data["YMargin"];
-
- if ( $XPos1 < $this->GraphAreaY1 + $XScale[0] ) { $XPos1 = $this->GraphAreaY1 + $XScale[0]; }
- if ( $XPos1 > $this->GraphAreaY2 - $XScale[0] ) { $XPos1 = $this->GraphAreaY2 - $XScale[0]; }
- if ( $XPos2 < $this->GraphAreaY1 + $XScale[0] ) { $XPos2 = $this->GraphAreaY1 + $XScale[0]; }
- if ( $XPos2 > $this->GraphAreaY2 - $XScale[0] ) { $XPos2 = $this->GraphAreaY2 - $XScale[0]; }
-
- $this->drawFilledRectangle($YPos1,$XPos1,$YPos2,$XPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
-
- if ( $Border )
- {
- $this->drawLine($YPos1,$XPos1,$YPos2,$XPos1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
- $this->drawLine($YPos1,$XPos2,$YPos2,$XPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
- }
-
- if ( $AreaName != NULL )
- {
- $XPos = ($XPos2-$XPos1)/2 + $XPos1;
- $YPos = ($YPos2-$YPos1)/2 + $YPos1;
-
- $this->Shadow = $RestoreShadow;
- $this->drawText($YPos,$XPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>0,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE));
- if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; }
- }
-
- $this->Shadow = $RestoreShadow;
- return(array("X1"=>$XPos1,"X2"=>$XPos2));
- }
- }
-
- /* Draw an Y threshold with the computed scale */
- function drawThreshold($Value,$Format="")
- {
- $AxisID = isset($Format["AxisID"]) ? $Format["AxisID"] : 0;
- $R = isset($Format["R"]) ? $Format["R"] : 255;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 50;
- $Weight = isset($Format["Weight"]) ? $Format["Weight"] : NULL;
- $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : 6;
- $Wide = isset($Format["Wide"]) ? $Format["Wide"] : FALSE;
- $WideFactor = isset($Format["WideFactor"]) ? $Format["WideFactor"] : 5;
- $WriteCaption = isset($Format["WriteCaption"]) ? $Format["WriteCaption"] : FALSE;
- $Caption = isset($Format["Caption"]) ? $Format["Caption"] : NULL;
- $CaptionAlign = isset($Format["CaptionAlign"]) ? $Format["CaptionAlign"] : CAPTION_LEFT_TOP;
- $CaptionOffset = isset($Format["CaptionOffset"]) ? $Format["CaptionOffset"] : 10;
- $CaptionR = isset($Format["CaptionR"]) ? $Format["CaptionR"] : 255;
- $CaptionG = isset($Format["CaptionG"]) ? $Format["CaptionG"] : 255;
- $CaptionB = isset($Format["CaptionB"]) ? $Format["CaptionB"] : 255;
- $CaptionAlpha = isset($Format["CaptionAlpha"]) ? $Format["CaptionAlpha"] : 100;
- $DrawBox = isset($Format["DrawBox"]) ? $Format["DrawBox"] : TRUE;
- $DrawBoxBorder = isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : FALSE;
- $BorderOffset = isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 5;
- $BoxRounded = isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : TRUE;
- $RoundedRadius = isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 3;
- $BoxR = isset($Format["BoxR"]) ? $Format["BoxR"] : 0;
- $BoxG = isset($Format["BoxG"]) ? $Format["BoxG"] : 0;
- $BoxB = isset($Format["BoxB"]) ? $Format["BoxB"] : 0;
- $BoxAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 20;
- $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : "";
- $BoxBorderR = isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 255;
- $BoxBorderG = isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 255;
- $BoxBorderB = isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 255;
- $BoxBorderAlpha = isset($Format["BoxBorderAlpha"]) ? $Format["BoxBorderAlpha"] : 100;
- $NoMargin = isset($Format["NoMargin"]) ? $Format["NoMargin"] : FALSE;
-
- if ( is_array($Value) ) { foreach ($Value as $Key => $ID) { $this->drawThreshold($ID,$Format); } return(0); }
-
- $CaptionSettings = array("DrawBox"=>$DrawBox,"DrawBoxBorder"=>$DrawBoxBorder,"BorderOffset"=>$BorderOffset,"BoxRounded"=>$BoxRounded,"RoundedRadius"=>$RoundedRadius,
- "BoxR"=>$BoxR,"BoxG"=>$BoxG,"BoxB"=>$BoxB,"BoxAlpha"=>$BoxAlpha,"BoxSurrounding"=>$BoxSurrounding,
- "BoxBorderR"=>$BoxBorderR,"BoxBorderG"=>$BoxBorderG,"BoxBorderB"=>$BoxBorderB,"BoxBorderAlpha"=>$BoxBorderAlpha,
- "R"=>$CaptionR,"G"=>$CaptionG,"B"=>$CaptionB,"Alpha"=>$CaptionAlpha);
-
- $Data = $this->DataSet->getData();
- $AbscissaMargin = $this->getAbscissaMargin($Data);
-
- if ( $NoMargin ) { $AbscissaMargin = 0; }
- if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); }
- if ( $Caption == NULL ) { $Caption = $Value; }
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- $YPos = $this->scaleComputeY($Value,array("AxisID"=>$AxisID));
- if ( $YPos >= $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"] && $YPos <= $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"] )
- {
- $X1 = $this->GraphAreaX1 + $AbscissaMargin;
- $X2 = $this->GraphAreaX2 - $AbscissaMargin;
-
- $this->drawLine($X1,$YPos,$X2,$YPos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
-
- if ( $Wide )
- {
- $this->drawLine($X1,$YPos-1,$X2,$YPos-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
- $this->drawLine($X1,$YPos+1,$X2,$YPos+1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
- }
-
- if ( $WriteCaption )
- {
- if ( $CaptionAlign == CAPTION_LEFT_TOP )
- { $X = $X1 + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLELEFT; }
- else
- { $X = $X2 - $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLERIGHT; }
-
- $this->drawText($X,$YPos,$Caption,$CaptionSettings);
- }
- }
-
- return(array("Y"=>$YPos));
- }
-
- if ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
- {
- $XPos = $this->scaleComputeY($Value,array("AxisID"=>$AxisID));
- if ( $XPos >= $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"] && $XPos <= $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"] )
- {
- $Y1 = $this->GraphAreaY1 + $AbscissaMargin;
- $Y2 = $this->GraphAreaY2 - $AbscissaMargin;
-
- $this->drawLine($XPos,$Y1,$XPos,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
-
- if ( $Wide )
- {
- $this->drawLine($XPos-1,$Y1,$XPos-1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
- $this->drawLine($XPos+1,$Y1,$XPos+1,$Y2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
- }
-
- if ( $WriteCaption )
- {
- if ( $CaptionAlign == CAPTION_LEFT_TOP )
- { $Y = $Y1 + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_TOPMIDDLE; }
- else
- { $Y = $Y2 - $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_BOTTOMMIDDLE; }
-
- $CaptionSettings["Align"] = TEXT_ALIGN_TOPMIDDLE;
- $this->drawText($XPos,$Y,$Caption,$CaptionSettings);
- }
- }
-
- return(array("Y"=>$XPos));
- }
- }
-
- /* Draw a threshold with the computed scale */
- function drawThresholdArea($Value1,$Value2,$Format="")
- {
- $AxisID = isset($Format["AxisID"]) ? $Format["AxisID"] : 0;
- $R = isset($Format["R"]) ? $Format["R"] : 255;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 20;
- $Border = isset($Format["Border"]) ? $Format["Border"] : TRUE;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
- $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha + 20;
- $BorderTicks = isset($Format["BorderTicks"]) ? $Format["BorderTicks"] : 2;
- $AreaName = isset($Format["AreaName"]) ? $Format["AreaName"] : NULL;
- $NameAngle = isset($Format["NameAngle"]) ? $Format["NameAngle"] : ZONE_NAME_ANGLE_AUTO;
- $NameR = isset($Format["NameR"]) ? $Format["NameR"] : 255;
- $NameG = isset($Format["NameG"]) ? $Format["NameG"] : 255;
- $NameB = isset($Format["NameB"]) ? $Format["NameB"] : 255;
- $NameAlpha = isset($Format["NameAlpha"]) ? $Format["NameAlpha"] : 100;
- $DisableShadowOnArea = isset($Format["DisableShadowOnArea"]) ? $Format["DisableShadowOnArea"] : TRUE;
- $NoMargin = isset($Format["NoMargin"]) ? $Format["NoMargin"] : FALSE;
-
- if ($Value1 > $Value2) { list($Value1, $Value2) = array($Value2, $Value1); }
-
- $RestoreShadow = $this->Shadow;
- if ( $DisableShadowOnArea && $this->Shadow ) { $this->Shadow = FALSE; }
-
- if ($BorderAlpha >100) { $BorderAlpha = 100;}
-
- $Data = $this->DataSet->getData();
- $AbscissaMargin = $this->getAbscissaMargin($Data);
-
- if ( $NoMargin ) { $AbscissaMargin = 0; }
- if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); }
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- $XPos1 = $this->GraphAreaX1 + $AbscissaMargin;
- $XPos2 = $this->GraphAreaX2 - $AbscissaMargin;
- $YPos1 = $this->scaleComputeY($Value1,array("AxisID"=>$AxisID));
- $YPos2 = $this->scaleComputeY($Value2,array("AxisID"=>$AxisID));
-
- if ( $YPos1 < $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"] ) { $YPos1 = $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"]; }
- if ( $YPos1 > $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"] ) { $YPos1 = $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"]; }
- if ( $YPos2 < $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"] ) { $YPos2 = $this->GraphAreaY1+$Data["Axis"][$AxisID]["Margin"]; }
- if ( $YPos2 > $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"] ) { $YPos2 = $this->GraphAreaY2-$Data["Axis"][$AxisID]["Margin"]; }
-
- $this->drawFilledRectangle($XPos1,$YPos1,$XPos2,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
- if ( $Border )
- {
- $this->drawLine($XPos1,$YPos1,$XPos2,$YPos1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
- $this->drawLine($XPos1,$YPos2,$XPos2,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
- }
-
- if ( $AreaName != NULL )
- {
- $XPos = ($XPos2-$XPos1)/2 + $XPos1;
- $YPos = ($YPos2-$YPos1)/2 + $YPos1;
- $this->Shadow = $RestoreShadow;
- $this->drawText($XPos,$YPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>0,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE));
- if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; }
- }
-
- $this->Shadow = $RestoreShadow;
- return(array("Y1"=>$YPos1,"Y2"=>$YPos2));
- }
- elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
- {
- $YPos1 = $this->GraphAreaY1 + $AbscissaMargin;
- $YPos2 = $this->GraphAreaY2 - $AbscissaMargin;
- $XPos1 = $this->scaleComputeY($Value1,array("AxisID"=>$AxisID));
- $XPos2 = $this->scaleComputeY($Value2,array("AxisID"=>$AxisID));
-
- if ( $XPos1 < $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"] ) { $XPos1 = $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"]; }
- if ( $XPos1 > $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"] ) { $XPos1 = $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"]; }
- if ( $XPos2 < $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"] ) { $XPos2 = $this->GraphAreaX1+$Data["Axis"][$AxisID]["Margin"]; }
- if ( $XPos2 > $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"] ) { $XPos2 = $this->GraphAreaX2-$Data["Axis"][$AxisID]["Margin"]; }
-
- $this->drawFilledRectangle($XPos1,$YPos1,$XPos2,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
- if ( $Border )
- {
- $this->drawLine($XPos1,$YPos1,$XPos1,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
- $this->drawLine($XPos2,$YPos1,$XPos2,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
- }
-
- if ( $AreaName != NULL )
- {
- $XPos = ($YPos2-$YPos1)/2 + $YPos1;
- $YPos = ($XPos2-$XPos1)/2 + $XPos1;
-
- if ( $NameAngle == ZONE_NAME_ANGLE_AUTO )
- {
- $TxtPos = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$AreaName);
- $TxtWidth = $TxtPos[1]["X"] - $TxtPos[0]["X"];
- if ( abs($XPos2 - $XPos1) > $TxtWidth ) { $NameAngle = 0; } else { $NameAngle = 90; }
- }
- $this->Shadow = $RestoreShadow;
- $this->drawText($YPos,$XPos,$AreaName,array("R"=>$NameR,"G"=>$NameG,"B"=>$NameB,"Alpha"=>$NameAlpha,"Angle"=>$NameAngle,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE));
- if ( $DisableShadowOnArea ) { $this->Shadow = FALSE; }
- }
-
- $this->Shadow = $RestoreShadow;
- return(array("Y1"=>$XPos1,"Y2"=>$XPos2));
- }
- }
-
- function scaleGetXSettings()
- {
- $Data = $this->DataSet->getData();
- foreach($Data["Axis"] as $AxisID => $Settings)
- {
- if ( $Settings["Identity"] == AXIS_X )
- {
- $Rows = $Settings["Rows"];
-
- return(array($Settings["Margin"],$Rows));
- }
- }
- }
-
- function scaleComputeY($Values,$Option="",$ReturnOnly0Height=FALSE)
- {
- $AxisID = isset($Option["AxisID"]) ? $Option["AxisID"] : 0;
- $SerieName = isset($Option["SerieName"]) ? $Option["SerieName"] : NULL;
-
- $Data = $this->DataSet->getData();
- if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); }
-
- if ( $SerieName != NULL ) { $AxisID = $Data["Series"][$SerieName]["Axis"]; }
- if ( !is_array($Values) ) { $tmp = $Values; $Values = ""; $Values[0] = $tmp; }
-
- $Result = "";
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- $Height = ($this->GraphAreaY2 - $this->GraphAreaY1) - $Data["Axis"][$AxisID]["Margin"]*2;
- $ScaleHeight = $Data["Axis"][$AxisID]["ScaleMax"] - $Data["Axis"][$AxisID]["ScaleMin"];
- $Step = $Height / $ScaleHeight;
-
- if ( $ReturnOnly0Height )
- { foreach($Values as $Key => $Value) { if ( $Value == VOID ) { $Result[] = VOID; } else { $Result[] = $Step * $Value; } } }
- else
- { foreach($Values as $Key => $Value) { if ( $Value == VOID ) { $Result[] = VOID; } else { $Result[] = $this->GraphAreaY2 - $Data["Axis"][$AxisID]["Margin"] - ($Step * ($Value-$Data["Axis"][$AxisID]["ScaleMin"])); } } }
- }
- else
- {
- $Width = ($this->GraphAreaX2 - $this->GraphAreaX1) - $Data["Axis"][$AxisID]["Margin"]*2;
- $ScaleWidth = $Data["Axis"][$AxisID]["ScaleMax"] - $Data["Axis"][$AxisID]["ScaleMin"];
- $Step = $Width / $ScaleWidth;
-
- if ( $ReturnOnly0Height )
- { foreach($Values as $Key => $Value) { if ( $Value == VOID ) { $Result[] = VOID; } else { $Result[] = $Step * $Value; } } }
- else
- { foreach($Values as $Key => $Value) { if ( $Value == VOID ) { $Result[] = VOID; } else { $Result[] = $this->GraphAreaX1 + $Data["Axis"][$AxisID]["Margin"] + ($Step * ($Value-$Data["Axis"][$AxisID]["ScaleMin"])); } } }
- }
-
- if ( count($Result) == 1 )
- return($Result[0]);
- else
- return($Result);
- }
-
- /* Format the axis values */
- function scaleFormat($Value,$Mode=NULL,$Format=NULL,$Unit=NULL)
- {
- if ( $Value == VOID ) { return(""); }
-
- if ( $Mode == AXIS_FORMAT_TRAFFIC )
- {
- if ( $Value == 0 ) { return("0B"); }
- $Units = array("B","KB","MB","GB","TB","PB");
- $Sign = ""; if ( $Value < 0 ) { $Value = abs($Value); $Sign = "-"; }
-
- $Value = number_format($Value/pow(1024,($Scale=floor(log($Value,1024)))),2,",",".");
- return($Sign.$Value." ".$Units[$Scale]);
- }
-
- if ( $Mode == AXIS_FORMAT_CUSTOM )
- { if ( function_exists($Format) ) { return(call_user_func($Format,$Value)); } }
-
- if ( $Mode == AXIS_FORMAT_DATE )
- { if ( $Format == NULL ) { $Pattern = "d/m/Y"; } else { $Pattern = $Format; } return(gmdate($Pattern,$Value)); }
-
- if ( $Mode == AXIS_FORMAT_TIME )
- { if ( $Format == NULL ) { $Pattern = "H:i:s"; } else { $Pattern = $Format; } return(gmdate($Pattern,$Value)); }
-
- if ( $Mode == AXIS_FORMAT_CURRENCY )
- { return($Format.number_format($Value,2)); }
-
- if ( $Mode == AXIS_FORMAT_METRIC )
- {
- if (abs($Value) > 1000000000)
- return(round($Value/1000000000,$Format)."g".$Unit);
- if (abs($Value) > 1000000)
- return(round($Value/1000000,$Format)."m".$Unit);
- elseif (abs($Value) >= 1000)
- return(round($Value/1000,$Format)."k".$Unit);
-
- }
- return($Value.$Unit);
- }
-
- /* Write Max value on a chart */
- function writeBounds($Type=BOUND_BOTH,$Format=NULL)
- {
- $MaxLabelTxt = isset($Format["MaxLabelTxt"]) ? $Format["MaxLabelTxt"] : "max=";
- $MinLabelTxt = isset($Format["MinLabelTxt"]) ? $Format["MinLabelTxt"] : "min=";
- $Decimals = isset($Format["Decimals"]) ? $Format["Decimals"] : 1;
- $ExcludedSeries = isset($Format["ExcludedSeries"]) ? $Format["ExcludedSeries"] : "";
- $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 4;
- $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
- $MaxDisplayR = isset($Format["MaxDisplayR"]) ? $Format["MaxDisplayR"] : 0;
- $MaxDisplayG = isset($Format["MaxDisplayG"]) ? $Format["MaxDisplayG"] : 0;
- $MaxDisplayB = isset($Format["MaxDisplayB"]) ? $Format["MaxDisplayB"] : 0;
- $MinDisplayR = isset($Format["MinDisplayR"]) ? $Format["MinDisplayR"] : 255;
- $MinDisplayG = isset($Format["MinDisplayG"]) ? $Format["MinDisplayG"] : 255;
- $MinDisplayB = isset($Format["MinDisplayB"]) ? $Format["MinDisplayB"] : 255;
- $MinLabelPos = isset($Format["MinLabelPos"]) ? $Format["MinLabelPos"] : BOUND_LABEL_POS_AUTO;
- $MaxLabelPos = isset($Format["MaxLabelPos"]) ? $Format["MaxLabelPos"] : BOUND_LABEL_POS_AUTO;
- $DrawBox = isset($Format["DrawBox"]) ? $Format["DrawBox"] : TRUE;
- $DrawBoxBorder = isset($Format["DrawBoxBorder"]) ? $Format["DrawBoxBorder"] : FALSE;
- $BorderOffset = isset($Format["BorderOffset"]) ? $Format["BorderOffset"] : 5;
- $BoxRounded = isset($Format["BoxRounded"]) ? $Format["BoxRounded"] : TRUE;
- $RoundedRadius = isset($Format["RoundedRadius"]) ? $Format["RoundedRadius"] : 3;
- $BoxR = isset($Format["BoxR"]) ? $Format["BoxR"] : 0;
- $BoxG = isset($Format["BoxG"]) ? $Format["BoxG"] : 0;
- $BoxB = isset($Format["BoxB"]) ? $Format["BoxB"] : 0;
- $BoxAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 20;
- $BoxSurrounding = isset($Format["BoxSurrounding"]) ? $Format["BoxSurrounding"] : "";
- $BoxBorderR = isset($Format["BoxBorderR"]) ? $Format["BoxBorderR"] : 255;
- $BoxBorderG = isset($Format["BoxBorderG"]) ? $Format["BoxBorderG"] : 255;
- $BoxBorderB = isset($Format["BoxBorderB"]) ? $Format["BoxBorderB"] : 255;
- $BoxBorderAlpha = isset($Format["BoxBorderAlpha"]) ? $Format["BoxBorderAlpha"] : 100;
-
- $CaptionSettings = array("DrawBox"=>$DrawBox,"DrawBoxBorder"=>$DrawBoxBorder,"BorderOffset"=>$BorderOffset,"BoxRounded"=>$BoxRounded,"RoundedRadius"=>$RoundedRadius,
- "BoxR"=>$BoxR,"BoxG"=>$BoxG,"BoxB"=>$BoxB,"BoxAlpha"=>$BoxAlpha,"BoxSurrounding"=>$BoxSurrounding,
- "BoxBorderR"=>$BoxBorderR,"BoxBorderG"=>$BoxBorderG,"BoxBorderB"=>$BoxBorderB,"BoxBorderAlpha"=>$BoxBorderAlpha);
-
- list($XMargin,$XDivs) = $this->scaleGetXSettings();
-
- $Data = $this->DataSet->getData();
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] && !isset($ExcludedSeries[$SerieName]))
- {
- $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
- if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
-
- $MinValue = $this->DataSet->getMin($SerieName);
- $MaxValue = $this->DataSet->getMax($SerieName);
-
- $MinPos = VOID; $MaxPos = VOID;
- foreach($Serie["Data"] as $Key => $Value)
- {
- if ( $Value == $MinValue && $MinPos == VOID ) { $MinPos = $Key; }
- if ( $Value == $MaxValue ) { $MaxPos = $Key; }
- }
-
- $AxisID = $Serie["Axis"];
- $Mode = $Data["Axis"][$AxisID]["Display"];
- $Format = $Data["Axis"][$AxisID]["Format"];
- $Unit = $Data["Axis"][$AxisID]["Unit"];
-
- $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs;
- $X = $this->GraphAreaX1 + $XMargin;
- $SerieOffset = isset($Serie["XOffset"]) ? $Serie["XOffset"] : 0;
-
- if ( $Type == BOUND_MAX || $Type == BOUND_BOTH )
- {
- if ( $MaxLabelPos == BOUND_LABEL_POS_TOP || ( $MaxLabelPos == BOUND_LABEL_POS_AUTO && $MaxValue >= 0) ) { $YPos = $PosArray[$MaxPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_BOTTOMMIDDLE; }
- if ( $MaxLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MaxLabelPos == BOUND_LABEL_POS_AUTO && $MaxValue < 0) ) { $YPos = $PosArray[$MaxPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_TOPMIDDLE; }
-
- $XPos = $X + $MaxPos*$XStep + $SerieOffset;
- $Label = $MaxLabelTxt.$this->scaleFormat(round($MaxValue,$Decimals),$Mode,$Format,$Unit);
-
- $TxtPos = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$Label);
- $XOffset = 0; $YOffset = 0;
- if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = (($this->GraphAreaX1 - $TxtPos[0]["X"])/2); }
- if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -(($TxtPos[1]["X"] - $this->GraphAreaX2)/2); }
- if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = $this->GraphAreaY1 - $TxtPos[2]["Y"]; }
- if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -($TxtPos[0]["Y"] - $this->GraphAreaY2); }
-
- $CaptionSettings["R"] = $MaxDisplayR; $CaptionSettings["G"] = $MaxDisplayG;
- $CaptionSettings["B"] = $MaxDisplayB; $CaptionSettings["Align"] = $Align;
-
- $this->drawText($XPos+$XOffset,$YPos+$YOffset,$Label,$CaptionSettings);
- }
-
- if ( $Type == BOUND_MIN || $Type == BOUND_BOTH )
- {
- if ( $MinLabelPos == BOUND_LABEL_POS_TOP || ( $MinLabelPos == BOUND_LABEL_POS_AUTO && $MinValue >= 0) ) { $YPos = $PosArray[$MinPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_BOTTOMMIDDLE; }
- if ( $MinLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MinLabelPos == BOUND_LABEL_POS_AUTO && $MinValue < 0) ) { $YPos = $PosArray[$MinPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_TOPMIDDLE; }
-
- $XPos = $X + $MinPos*$XStep + $SerieOffset;
- $Label = $MinLabelTxt.$this->scaleFormat(round($MinValue,$Decimals),$Mode,$Format,$Unit);
-
- $TxtPos = $this->getTextBox($XPos,$YPos,$this->FontName,$this->FontSize,0,$Label);
- $XOffset = 0; $YOffset = 0;
- if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = (($this->GraphAreaX1 - $TxtPos[0]["X"])/2); }
- if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -(($TxtPos[1]["X"] - $this->GraphAreaX2)/2); }
- if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = $this->GraphAreaY1 - $TxtPos[2]["Y"]; }
- if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -($TxtPos[0]["Y"] - $this->GraphAreaY2); }
-
- $CaptionSettings["R"] = $MinDisplayR; $CaptionSettings["G"] = $MinDisplayG;
- $CaptionSettings["B"] = $MinDisplayB; $CaptionSettings["Align"] = $Align;
-
- $this->drawText($XPos+$XOffset,$YPos-$DisplayOffset+$YOffset,$Label,$CaptionSettings);
- }
- }
- else
- {
- $XStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs;
- $X = $this->GraphAreaY1 + $XMargin;
- $SerieOffset = isset($Serie["XOffset"]) ? $Serie["XOffset"] : 0;
-
- if ( $Type == BOUND_MAX || $Type == BOUND_BOTH )
- {
- if ( $MaxLabelPos == BOUND_LABEL_POS_TOP || ( $MaxLabelPos == BOUND_LABEL_POS_AUTO && $MaxValue >= 0) ) { $YPos = $PosArray[$MaxPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLELEFT; }
- if ( $MaxLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MaxLabelPos == BOUND_LABEL_POS_AUTO && $MaxValue < 0) ) { $YPos = $PosArray[$MaxPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLERIGHT; }
-
- $XPos = $X + $MaxPos*$XStep + $SerieOffset;
- $Label = $MaxLabelTxt.$this->scaleFormat($MaxValue,$Mode,$Format,$Unit);
-
- $TxtPos = $this->getTextBox($YPos,$XPos,$this->FontName,$this->FontSize,0,$Label);
- $XOffset = 0; $YOffset = 0;
- if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = $this->GraphAreaX1 - $TxtPos[0]["X"]; }
- if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -($TxtPos[1]["X"] - $this->GraphAreaX2); }
- if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = ($this->GraphAreaY1 - $TxtPos[2]["Y"])/2; }
- if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -(($TxtPos[0]["Y"] - $this->GraphAreaY2)/2);}
-
- $CaptionSettings["R"] = $MaxDisplayR; $CaptionSettings["G"] = $MaxDisplayG;
- $CaptionSettings["B"] = $MaxDisplayB; $CaptionSettings["Align"] = $Align;
-
- $this->drawText($YPos+$XOffset,$XPos+$YOffset,$Label,$CaptionSettings);
- }
-
- if ( $Type == BOUND_MIN || $Type == BOUND_BOTH )
- {
- if ( $MinLabelPos == BOUND_LABEL_POS_TOP || ( $MinLabelPos == BOUND_LABEL_POS_AUTO && $MinValue >= 0) ) { $YPos = $PosArray[$MinPos] + $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLELEFT; }
- if ( $MinLabelPos == BOUND_LABEL_POS_BOTTOM || ( $MinLabelPos == BOUND_LABEL_POS_AUTO && $MinValue < 0) ) { $YPos = $PosArray[$MinPos] - $DisplayOffset + 2; $Align = TEXT_ALIGN_MIDDLERIGHT; }
-
- $XPos = $X + $MinPos*$XStep + $SerieOffset;
- $Label = $MinLabelTxt.$this->scaleFormat($MinValue,$Mode,$Format,$Unit);
-
- $TxtPos = $this->getTextBox($YPos,$XPos,$this->FontName,$this->FontSize,0,$Label);
- $XOffset = 0; $YOffset = 0;
- if ( $TxtPos[0]["X"] < $this->GraphAreaX1 ) { $XOffset = $this->GraphAreaX1 - $TxtPos[0]["X"]; }
- if ( $TxtPos[1]["X"] > $this->GraphAreaX2 ) { $XOffset = -($TxtPos[1]["X"] - $this->GraphAreaX2); }
- if ( $TxtPos[2]["Y"] < $this->GraphAreaY1 ) { $YOffset = ($this->GraphAreaY1 - $TxtPos[2]["Y"])/2; }
- if ( $TxtPos[0]["Y"] > $this->GraphAreaY2 ) { $YOffset = -(($TxtPos[0]["Y"] - $this->GraphAreaY2)/2);}
-
- $CaptionSettings["R"] = $MinDisplayR; $CaptionSettings["G"] = $MinDisplayG;
- $CaptionSettings["B"] = $MinDisplayB; $CaptionSettings["Align"] = $Align;
-
- $this->drawText($YPos+$XOffset,$XPos+$YOffset,$Label,$CaptionSettings);
- }
- }
- }
- }
- }
-
- /* Draw a plot chart */
- function drawPlotChart($Format=NULL)
- {
- $PlotSize = isset($Format["PlotSize"]) ? $Format["PlotSize"] : NULL;
- $PlotBorder = isset($Format["PlotBorder"]) ? $Format["PlotBorder"] : FALSE;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 50;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 50;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 50;
- $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 30;
- $BorderSize = isset($Format["BorderSize"]) ? $Format["BorderSize"] : 2;
- $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
- $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
- $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 4;
- $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
- $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
- $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
- $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
-
- $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
-
- $Data = $this->DataSet->getData();
- list($XMargin,$XDivs) = $this->scaleGetXSettings();
-
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- {
- if ( isset($Serie["Weight"]) ) { $SerieWeight = $Serie["Weight"] + 2; } else { $SerieWeight = 2; }
- if ( $PlotSize != NULL ) { $SerieWeight = $PlotSize; }
-
- $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
- if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
- if ( isset($Serie["Picture"]) )
- { $Picture = $Serie["Picture"]; list($PicWidth,$PicHeight,$PicType) = $this->getPicInfo($Picture); }
- else { $Picture = NULL; $PicOffset = 0; }
-
- if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
-
- $AxisID = $Serie["Axis"];
- $Shape = $Serie["Shape"];
- $Mode = $Data["Axis"][$AxisID]["Display"];
- $Format = $Data["Axis"][$AxisID]["Format"];
- $Unit = $Data["Axis"][$AxisID]["Unit"];
-
- if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
-
- $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
-
- $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
- if ( $Picture != NULL ) { $PicOffset = $PicHeight / 2; $SerieWeight = 0; }
- $X = $this->GraphAreaX1 + $XMargin;
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- foreach($PosArray as $Key => $Y)
- {
- if ( $DisplayValues )
- $this->drawText($X,$Y-$DisplayOffset-$SerieWeight-$BorderSize-$PicOffset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
-
- if ( $Y != VOID )
- {
- if ( $RecordImageMap ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$SerieWeight,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
-
- if ( $Picture != NULL )
- { $this->drawFromPicture($PicType,$Picture,$X-$PicWidth/2,$Y-$PicHeight/2); }
- else
- { $this->drawShape($X,$Y,$Shape,$SerieWeight,$PlotBorder,$BorderSize,$R,$G,$B,$Alpha,$BorderR,$BorderG,$BorderB,$BorderAlpha); }
- }
- $X = $X + $XStep;
- }
- }
- else
- {
- if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
- if ( $Picture != NULL ) { $PicOffset = $PicWidth / 2; $SerieWeight = 0; }
- $Y = $this->GraphAreaY1 + $XMargin;
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- foreach($PosArray as $Key => $X)
- {
- if ( $DisplayValues )
- $this->drawText($X+$DisplayOffset+$SerieWeight+$BorderSize+$PicOffset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
-
- if ( $X != VOID )
- {
- if ( $RecordImageMap ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$SerieWeight,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
-
- if ( $Picture != NULL )
- { $this->drawFromPicture($PicType,$Picture,$X-$PicWidth/2,$Y-$PicHeight/2); }
- else
- { $this->drawShape($X,$Y,$Shape,$SerieWeight,$PlotBorder,$BorderSize,$R,$G,$B,$Alpha,$BorderR,$BorderG,$BorderB,$BorderAlpha); }
- }
- $Y = $Y + $YStep;
- }
- }
- }
- }
- }
-
- /* Draw a spline chart */
- function drawSplineChart($Format=NULL)
- {
- $BreakVoid = isset($Format["BreakVoid"]) ? $Format["BreakVoid"] : TRUE;
- $VoidTicks = isset($Format["VoidTicks"]) ? $Format["VoidTicks"] : 4;
- $BreakR = isset($Format["BreakR"]) ? $Format["BreakR"] : NULL; // 234
- $BreakG = isset($Format["BreakG"]) ? $Format["BreakG"] : NULL; // 55
- $BreakB = isset($Format["BreakB"]) ? $Format["BreakB"] : NULL; // 26
- $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
- $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
- $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
- $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
- $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
- $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
- $ImageMapPlotSize = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 5;
-
- $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
-
- $Data = $this->DataSet->getData();
- list($XMargin,$XDivs) = $this->scaleGetXSettings();
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- {
- $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
-
- if ( $BreakR == NULL )
- $BreakSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks);
- else
- $BreakSettings = array("R"=>$BreakR,"G"=>$BreakG,"B"=>$BreakB,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
-
- if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
-
- $AxisID = $Serie["Axis"];
- $Mode = $Data["Axis"][$AxisID]["Display"];
- $Format = $Data["Axis"][$AxisID]["Format"];
- $Unit = $Data["Axis"][$AxisID]["Unit"];
-
- if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
-
- $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
-
- $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
- $X = $this->GraphAreaX1 + $XMargin; $WayPoints = "";
- $Force = $XStep / 5;
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- $LastGoodY = NULL; $LastGoodX = NULL; $LastX = 1; $LastY = 1;
- foreach($PosArray as $Key => $Y)
- {
- if ( $DisplayValues )
- $this->drawText($X,$Y-$DisplayOffset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
-
- if ( $RecordImageMap && $Y != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
-
- if ( $Y == VOID && $LastY != NULL )
- { $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); $WayPoints = ""; }
-
- if ( $Y != VOID && $LastY == NULL && $LastGoodY != NULL && !$BreakVoid )
- { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); }
-
- if ( $Y != VOID )
- $WayPoints[] = array($X,$Y);
-
- if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
- if ( $Y == VOID ) { $Y = NULL; }
-
- $LastX = $X; $LastY = $Y;
- $X = $X + $XStep;
- }
- $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
- }
- else
- {
- if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
- $Y = $this->GraphAreaY1 + $XMargin; $WayPoints = "";
- $Force = $YStep / 5;
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- $LastGoodY = NULL; $LastGoodX = NULL; $LastX = 1; $LastY = 1;
- foreach($PosArray as $Key => $X)
- {
- if ( $DisplayValues )
- $this->drawText($X+$DisplayOffset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
-
- if ( $RecordImageMap && $X != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
-
- if ( $X == VOID && $LastX != NULL )
- { $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight)); $WayPoints = ""; }
-
- if ( $X != VOID && $LastX == NULL && $LastGoodX != NULL && !$BreakVoid )
- { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); }
-
- if ( $X != VOID )
- $WayPoints[] = array($X,$Y);
-
- if ( $X != VOID ) { $LastGoodX = $X; $LastGoodY = $Y; }
- if ( $X == VOID ) { $X = NULL; }
-
- $LastX = $X; $LastY = $Y;
- $Y = $Y + $YStep;
- }
- $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
- }
- }
- }
- }
-
- /* Draw a filled spline chart */
- function drawFilledSplineChart($Format=NULL)
- {
- $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
- $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
- $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
- $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
- $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
- $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
- $AroundZero = isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE;
- $Threshold = isset($Format["Threshold"]) ? $Format["Threshold"] : NULL;
-
- $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
-
- $Data = $this->DataSet->getData();
- list($XMargin,$XDivs) = $this->scaleGetXSettings();
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- {
- $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
- if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
-
- $AxisID = $Serie["Axis"];
- $Mode = $Data["Axis"][$AxisID]["Display"];
- $Format = $Data["Axis"][$AxisID]["Format"];
- $Unit = $Data["Axis"][$AxisID]["Unit"];
-
- $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
- if ( $AroundZero ) { $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"])); }
-
- if ( $Threshold != NULL )
- {
- foreach($Threshold as $Key => $Params)
- {
- $Threshold[$Key]["MinX"] = $this->scaleComputeY($Params["Min"],array("AxisID"=>$Serie["Axis"]));
- $Threshold[$Key]["MaxX"] = $this->scaleComputeY($Params["Max"],array("AxisID"=>$Serie["Axis"]));
- }
- }
-
- $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
- $X = $this->GraphAreaX1 + $XMargin; $WayPoints = "";
- $Force = $XStep / 5;
-
- if ( !$AroundZero ) { $YZero = $this->GraphAreaY2-1; }
- if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
- if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
-
- $LastX = ""; $LastY = "";
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- foreach($PosArray as $Key => $Y)
- {
- if ( $DisplayValues )
- $this->drawText($X,$Y-$DisplayOffset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
-
- if ( $Y == VOID )
- {
- $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE));
-
- if ( $Area != "" )
- {
- foreach ($Area as $key => $Points)
- {
- $Corners = ""; $Corners[] = $Area[$key][0]["X"]; $Corners[] = $YZero;
- foreach($Points as $subKey => $Point)
- {
- if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; }
- $Corners[] = $Point["Y"]+1;
- }
- $Corners[] = $Points[$subKey]["X"]-1; $Corners[] = $YZero;
-
- $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold));
- }
- $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
- }
-
- $WayPoints = "";
- }
- else
- $WayPoints[] = array($X,$Y-.5); /* -.5 for AA visual fix */
-
- $X = $X + $XStep;
- }
- $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE));
-
- if ( $Area != "" )
- {
- foreach ($Area as $key => $Points)
- {
- $Corners = ""; $Corners[] = $Area[$key][0]["X"]; $Corners[] = $YZero;
- foreach($Points as $subKey => $Point)
- {
- if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; }
- $Corners[] = $Point["Y"]+1;
- }
- $Corners[] = $Points[$subKey]["X"]-1; $Corners[] = $YZero;
-
- $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold));
- }
- $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
- }
- }
- else
- {
- if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
- $Y = $this->GraphAreaY1 + $XMargin; $WayPoints = "";
- $Force = $YStep / 5;
-
- if ( !$AroundZero ) { $YZero = $this->GraphAreaX1+1; }
- if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
- if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- foreach($PosArray as $Key => $X)
- {
- if ( $DisplayValues )
- $this->drawText($X+$DisplayOffset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
-
- if ( $X == VOID )
- {
- $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE));
-
- if ( $Area != "" )
- {
- foreach ($Area as $key => $Points)
- {
- $Corners = ""; $Corners[] = $YZero; $Corners[] = $Area[$key][0]["Y"];
- foreach($Points as $subKey => $Point)
- {
- if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; }
- $Corners[] = $Point["Y"];
- }
- $Corners[] = $YZero; $Corners[] = $Points[$subKey]["Y"]-1;
-
- $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold));
- }
- $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
- }
-
- $WayPoints = "";
- }
- else
- $WayPoints[] = array($X,$Y);
-
- $Y = $Y + $YStep;
- }
- $Area = $this->drawSpline($WayPoints,array("Force"=>$Force,"PathOnly"=>TRUE));
-
- if ( $Area != "" )
- {
- foreach ($Area as $key => $Points)
- {
- $Corners = ""; $Corners[] = $YZero; $Corners[] = $Area[$key][0]["Y"];
- foreach($Points as $subKey => $Point)
- {
- if ( $subKey == count($Points)-1) { $Corners[] = $Point["X"]-1; } else { $Corners[] = $Point["X"]; }
- $Corners[] = $Point["Y"];
- }
- $Corners[] = $YZero; $Corners[] = $Points[$subKey]["Y"]-1;
-
- $this->drawPolygonChart($Corners,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/2,"NoBorder"=>TRUE,"Threshold"=>$Threshold));
- }
- $this->drawSpline($WayPoints,array("Force"=>$Force,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks));
- }
-
- }
- }
- }
- }
-
- /* Draw a line chart */
- function drawLineChart($Format=NULL)
- {
- $BreakVoid = isset($Format["BreakVoid"]) ? $Format["BreakVoid"] : TRUE;
- $VoidTicks = isset($Format["VoidTicks"]) ? $Format["VoidTicks"] : 4;
- $BreakR = isset($Format["BreakR"]) ? $Format["BreakR"] : NULL;
- $BreakG = isset($Format["BreakG"]) ? $Format["BreakG"] : NULL;
- $BreakB = isset($Format["BreakB"]) ? $Format["BreakB"] : NULL;
- $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
- $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
- $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
- $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
- $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
- $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
- $ImageMapPlotSize = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 5;
- $ForceColor = isset($Format["ForceColor"]) ? $Format["ForceColor"] : FALSE;
- $ForceR = isset($Format["ForceR"]) ? $Format["ForceR"] : 0;
- $ForceG = isset($Format["ForceG"]) ? $Format["ForceG"] : 0;
- $ForceB = isset($Format["ForceB"]) ? $Format["ForceB"] : 0;
- $ForceAlpha = isset($Format["ForceAlpha"]) ? $Format["ForceAlpha"] : 100;
-
- $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
-
- $Data = $this->DataSet->getData();
- list($XMargin,$XDivs) = $this->scaleGetXSettings();
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- {
- $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
-
- if ( $ForceColor )
- { $R = $ForceR; $G = $ForceG; $B = $ForceB; $Alpha = $ForceAlpha; }
-
- if ( $BreakR == NULL )
- $BreakSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
- else
- $BreakSettings = array("R"=>$BreakR,"G"=>$BreakG,"B"=>$BreakB,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
-
- if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
-
- $AxisID = $Serie["Axis"];
- $Mode = $Data["Axis"][$AxisID]["Display"];
- $Format = $Data["Axis"][$AxisID]["Format"];
- $Unit = $Data["Axis"][$AxisID]["Unit"];
-
- if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
-
- $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
-
- $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
- $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- $LastGoodY = NULL; $LastGoodX = NULL;
- foreach($PosArray as $Key => $Y)
- {
- if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
- {
- if ( $Serie["Data"][$Key] > 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
- $this->drawText($X,$Y-$Offset-$Weight,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
- }
-
- if ( $RecordImageMap && $Y != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
-
- if ( $Y != VOID && $LastX != NULL && $LastY != NULL )
- $this->drawLine($LastX,$LastY,$X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
-
- if ( $Y != VOID && $LastY == NULL && $LastGoodY != NULL && !$BreakVoid )
- { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); $LastGoodY = NULL; }
-
- if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
- if ( $Y == VOID ) { $Y = NULL; }
-
- $LastX = $X; $LastY = $Y;
- $X = $X + $XStep;
- }
- }
- else
- {
- if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
- $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- $LastGoodY = NULL; $LastGoodX = NULL;
- foreach($PosArray as $Key => $X)
- {
- if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
- { $this->drawText($X+$DisplayOffset+$Weight,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); }
-
- if ( $RecordImageMap && $X != VOID ) { $this->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
-
- if ( $X != VOID && $LastX != NULL && $LastY != NULL )
- $this->drawLine($LastX,$LastY,$X,$Y,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
-
- if ( $X != VOID && $LastX == NULL && $LastGoodY != NULL && !$BreakVoid )
- { $this->drawLine($LastGoodX,$LastGoodY,$X,$Y,$BreakSettings); $LastGoodY = NULL; }
-
- if ( $X != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
- if ( $X == VOID ) { $X = NULL; }
-
- $LastX = $X; $LastY = $Y;
- $Y = $Y + $YStep;
- }
- }
- }
- }
- }
-
- /* Draw a line chart */
- function drawZoneChart($SerieA,$SerieB,$Format=NULL)
- {
- $AxisID = isset($Format["AxisID"]) ? $Format["AxisID"] : 0;
- $LineR = isset($Format["LineR"]) ? $Format["LineR"] : 150;
- $LineG = isset($Format["LineG"]) ? $Format["LineG"] : 150;
- $LineB = isset($Format["LineB"]) ? $Format["LineB"] : 150;
- $LineAlpha = isset($Format["LineAlpha"]) ? $Format["LineAlpha"] : 50;
- $LineTicks = isset($Format["LineTicks"]) ? $Format["LineTicks"] : 1;
- $AreaR = isset($Format["AreaR"]) ? $Format["AreaR"] : 150;
- $AreaG = isset($Format["AreaG"]) ? $Format["AreaG"] : 150;
- $AreaB = isset($Format["AreaB"]) ? $Format["AreaB"] : 150;
- $AreaAlpha = isset($Format["AreaAlpha"]) ? $Format["AreaAlpha"] : 5;
-
- $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
-
- $Data = $this->DataSet->getData();
- if ( !isset($Data["Series"][$SerieA]["Data"]) || !isset($Data["Series"][$SerieB]["Data"]) ) { return(0); }
- $SerieAData = $Data["Series"][$SerieA]["Data"];
- $SerieBData = $Data["Series"][$SerieB]["Data"];
-
- list($XMargin,$XDivs) = $this->scaleGetXSettings();
-
- $Mode = $Data["Axis"][$AxisID]["Display"];
- $Format = $Data["Axis"][$AxisID]["Format"];
- $Unit = $Data["Axis"][$AxisID]["Unit"];
-
- $PosArrayA = $this->scaleComputeY($SerieAData,array("AxisID"=>$AxisID));
- $PosArrayB = $this->scaleComputeY($SerieBData,array("AxisID"=>$AxisID));
- if ( count($PosArrayA) != count($PosArrayB) ) { return(0); }
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
- $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
-
- $LastX = NULL; $LastY1 = NULL; $LastY2 = NULL;
- $BoundsA = ""; $BoundsB = "";
- foreach($PosArrayA as $Key => $Y1)
- {
- $Y2 = $PosArrayB[$Key];
-
- $BoundsA[] = $X; $BoundsA[] = $Y1;
- $BoundsB[] = $X; $BoundsB[] = $Y2;
-
- $LastX = $X;
- $LastY1 = $Y1; $LastY2 = $Y2;
-
- $X = $X + $XStep;
- }
- $Bounds = array_merge($BoundsA,$this->reversePlots($BoundsB));
- $this->drawPolygonChart($Bounds,array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"Alpha"=>$AreaAlpha));
-
- for($i=0;$i<=count($BoundsA)-4;$i=$i+2)
- {
- $this->drawLine($BoundsA[$i],$BoundsA[$i+1],$BoundsA[$i+2],$BoundsA[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks));
- $this->drawLine($BoundsB[$i],$BoundsB[$i+1],$BoundsB[$i+2],$BoundsB[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks));
- }
- }
- else
- {
- if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
- $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
-
- $LastY = NULL; $LastX1 = NULL; $LastX2 = NULL;
- $BoundsA = ""; $BoundsB = "";
- foreach($PosArrayA as $Key => $X1)
- {
- $X2 = $PosArrayB[$Key];
-
- $BoundsA[] = $X1; $BoundsA[] = $Y;
- $BoundsB[] = $X2; $BoundsB[] = $Y;
-
- $LastY = $Y;
- $LastX1 = $X1; $LastX2 = $X2;
-
- $Y = $Y + $YStep;
- }
- $Bounds = array_merge($BoundsA,$this->reversePlots($BoundsB));
- $this->drawPolygonChart($Bounds,array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"Alpha"=>$AreaAlpha));
-
- for($i=0;$i<=count($BoundsA)-4;$i=$i+2)
- {
- $this->drawLine($BoundsA[$i],$BoundsA[$i+1],$BoundsA[$i+2],$BoundsA[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks));
- $this->drawLine($BoundsB[$i],$BoundsB[$i+1],$BoundsB[$i+2],$BoundsB[$i+3],array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha,"Ticks"=>$LineTicks));
- }
- }
- }
-
- /* Draw a step chart */
- function drawStepChart($Format=NULL)
- {
- $BreakVoid = isset($Format["BreakVoid"]) ? $Format["BreakVoid"] : FALSE;
- $ReCenter = isset($Format["ReCenter"]) ? $Format["ReCenter"] : TRUE;
- $VoidTicks = isset($Format["VoidTicks"]) ? $Format["VoidTicks"] : 4;
- $BreakR = isset($Format["BreakR"]) ? $Format["BreakR"] : NULL;
- $BreakG = isset($Format["BreakG"]) ? $Format["BreakG"] : NULL;
- $BreakB = isset($Format["BreakB"]) ? $Format["BreakB"] : NULL;
- $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] :FALSE;
- $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
- $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
- $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
- $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
- $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
- $ImageMapPlotSize = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 5;
-
- $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
-
- $Data = $this->DataSet->getData();
- list($XMargin,$XDivs) = $this->scaleGetXSettings();
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- {
- $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
-
- if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
-
- if ( $BreakR == NULL )
- $BreakSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
- else
- $BreakSettings = array("R"=>$BreakR,"G"=>$BreakG,"B"=>$BreakB,"Alpha"=>$Alpha,"Ticks"=>$VoidTicks,"Weight"=>$Weight);
-
- if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
-
- $AxisID = $Serie["Axis"];
- $Mode = $Data["Axis"][$AxisID]["Display"];
- $Format = $Data["Axis"][$AxisID]["Format"];
- $Unit = $Data["Axis"][$AxisID]["Unit"];
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight);
-
- $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
-
- $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
- $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- $LastGoodY = NULL; $LastGoodX = NULL; $Init = FALSE;
- foreach($PosArray as $Key => $Y)
- {
- if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
- {
- if ( $Y <= $LastY ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
- $this->drawText($X,$Y-$Offset-$Weight,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
- }
-
- if ( $Y != VOID && $LastX != NULL && $LastY != NULL )
- {
- $this->drawLine($LastX,$LastY,$X,$LastY,$Color);
- $this->drawLine($X,$LastY,$X,$Y,$Color);
- if ( $ReCenter && $X+$XStep < $this->GraphAreaX2 - $XMargin )
- {
- $this->drawLine($X,$Y,$X+$XStep,$Y,$Color);
- if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X-$ImageMapPlotSize).",".floor($Y-$ImageMapPlotSize).",".floor($X+$XStep+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
- }
- else
- { if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($LastY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); } }
- }
-
- if ( $Y != VOID && $LastY == NULL && $LastGoodY != NULL && !$BreakVoid )
- {
- if ( $ReCenter )
- {
- $this->drawLine($LastGoodX+$XStep,$LastGoodY,$X,$LastGoodY,$BreakSettings);
- if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX+$XStep-$ImageMapPlotSize).",".floor($LastGoodY-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($LastGoodY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
- }
- else
- {
- $this->drawLine($LastGoodX,$LastGoodY,$X,$LastGoodY,$BreakSettings);
- if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX-$ImageMapPlotSize).",".floor($LastGoodY-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($LastGoodY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
- }
-
- $this->drawLine($X,$LastGoodY,$X,$Y,$BreakSettings);
- $LastGoodY = NULL;
- }
- elseif( !$BreakVoid && $LastGoodY == NULL && $Y != VOID )
- {
- $this->drawLine($this->GraphAreaX1 + $XMargin,$Y,$X,$Y,$BreakSettings);
- if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($this->GraphAreaX1+$XMargin-$ImageMapPlotSize).",".floor($Y-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
- }
-
- if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
- if ( $Y == VOID ) { $Y = NULL; }
-
- if ( !$Init && $ReCenter ) { $X = $X - $XStep/2; $Init = TRUE; }
- $LastX = $X; $LastY = $Y;
- if ( $LastX < $this->GraphAreaX1 + $XMargin ) { $LastX = $this->GraphAreaX1 + $XMargin; }
- $X = $X + $XStep;
- }
- if ( $ReCenter )
- {
- $this->drawLine($LastX,$LastY,$this->GraphAreaX2 - $XMargin,$LastY,$Color);
- if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($this->GraphAreaX2-$XMargin+$ImageMapPlotSize).",".floor($LastY+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
- }
- }
- else
- {
- if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
- $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- $LastGoodY = NULL; $LastGoodX = NULL; $Init = FALSE;
- foreach($PosArray as $Key => $X)
- {
- if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
- {
- if ( $X >= $LastX ) { $Align = TEXT_ALIGN_MIDDLELEFT; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_MIDDLERIGHT; $Offset = -$DisplayOffset; }
- $this->drawText($X+$Offset+$Weight,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
- }
-
- if ( $X != VOID && $LastX != NULL && $LastY != NULL )
- {
- $this->drawLine($LastX,$LastY,$LastX,$Y,$Color);
- $this->drawLine($LastX,$Y,$X,$Y,$Color);
-
- if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($LastX+$XStep+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
- }
-
- if ( $X != VOID && $LastX == NULL && $LastGoodY != NULL && !$BreakVoid )
- {
- $this->drawLine($LastGoodX,$LastGoodY,$LastGoodX,$LastGoodY+$YStep,$Color);
- if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX-$ImageMapPlotSize).",".floor($LastGoodY-$ImageMapPlotSize).",".floor($LastGoodX+$ImageMapPlotSize).",".floor($LastGoodY+$YStep+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
-
- $this->drawLine($LastGoodX,$LastGoodY+$YStep,$LastGoodX,$Y,$BreakSettings);
- if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastGoodX-$ImageMapPlotSize).",".floor($LastGoodY+$YStep-$ImageMapPlotSize).",".floor($LastGoodX+$ImageMapPlotSize).",".floor($YStep+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
-
- $this->drawLine($LastGoodX,$Y,$X,$Y,$BreakSettings);
- $LastGoodY = NULL;
- }
- elseif ( $X != VOID && $LastGoodY == NULL && !$BreakVoid )
- {
- $this->drawLine($X,$this->GraphAreaY1 + $XMargin,$X,$Y,$BreakSettings);
- if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X-$ImageMapPlotSize).",".floor($this->GraphAreaY1+$XMargin-$ImageMapPlotSize).",".floor($X+$ImageMapPlotSize).",".floor($Y+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
- }
-
- if ( $X != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
- if ( $X == VOID ) { $X = NULL; }
-
- if ( !$Init && $ReCenter ) { $Y = $Y - $YStep/2; $Init = TRUE; }
- $LastX = $X; $LastY = $Y;
- if ( $LastY < $this->GraphAreaY1 + $XMargin ) { $LastY = $this->GraphAreaY1 + $XMargin; }
- $Y = $Y + $YStep;
- }
- if ( $ReCenter )
- {
- $this->drawLine($LastX,$LastY,$LastX,$this->GraphAreaY2 - $XMargin,$Color);
- if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($LastX-$ImageMapPlotSize).",".floor($LastY-$ImageMapPlotSize).",".floor($LastX+$ImageMapPlotSize).",".floor($this->GraphAreaY2-$XMargin+$ImageMapPlotSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
- }
- }
- }
- }
- }
-
- /* Draw a step chart */
- function drawFilledStepChart($Format=NULL)
- {
- $ReCenter = isset($Format["ReCenter"]) ? $Format["ReCenter"] : TRUE;
- $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] :FALSE;
- $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
- $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
- $ForceTransparency = isset($Format["ForceTransparency"]) ? $Format["ForceTransparency"] : NULL;
- $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
- $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
- $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
- $AroundZero = isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE;
-
- $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
-
- $Data = $this->DataSet->getData();
- list($XMargin,$XDivs) = $this->scaleGetXSettings();
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- {
- $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
-
- if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
-
- $AxisID = $Serie["Axis"];
- $Mode = $Data["Axis"][$AxisID]["Display"];
- $Format = $Data["Axis"][$AxisID]["Format"];
- $Unit = $Data["Axis"][$AxisID]["Unit"];
-
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B);
- if ( $ForceTransparency != NULL ) { $Color["Alpha"] = $ForceTransparency; } else { $Color["Alpha"] = $Alpha; }
-
- $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
- $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"]));
-
- $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
- if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
-
- if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
- $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
-
- if ( !$AroundZero ) { $YZero = $this->GraphAreaY2-1; }
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- $LastGoodY = NULL; $LastGoodX = NULL; $Points = ""; $Init = FALSE;
- foreach($PosArray as $Key => $Y)
- {
- if ( $Y == VOID && $LastX != NULL && $LastY != NULL && $Points !="" )
- {
- $Points[] = $LastX; $Points[] = $LastY;
- $Points[] = $X; $Points[] = $LastY;
- $Points[] = $X; $Points[] = $YZero;
- $this->drawPolygon($Points,$Color);
- $Points = "";
- }
-
- if ( $Y != VOID && $LastX != NULL && $LastY != NULL )
- {
- if ( $Points == "") { $Points[] = $LastX; $Points[] = $YZero; }
- $Points[] = $LastX; $Points[] = $LastY;
- $Points[] = $X; $Points[] = $LastY;
- $Points[] = $X; $Points[] = $Y;
- }
-
- if ( $Y != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
- if ( $Y == VOID ) { $Y = NULL; }
-
- if ( !$Init && $ReCenter ) { $X = $X - $XStep/2; $Init = TRUE; }
- $LastX = $X; $LastY = $Y;
- if ( $LastX < $this->GraphAreaX1 + $XMargin ) { $LastX = $this->GraphAreaX1 + $XMargin; }
- $X = $X + $XStep;
- }
-
- if ( $ReCenter )
- {
- $Points[] = $LastX+$XStep/2; $Points[] = $LastY;
- $Points[] = $LastX+$XStep/2; $Points[] = $YZero;
- }
- else
- { $Points[] = $LastX; $Points[] = $YZero; }
-
- $this->drawPolygon($Points,$Color);
- }
- else
- {
- if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
- if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
-
- if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
- $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- $LastGoodY = NULL; $LastGoodX = NULL; $Points = "";
- foreach($PosArray as $Key => $X)
- {
- if ( $X == VOID && $LastX != NULL && $LastY != NULL && $Points !="" )
- {
- $Points[] = $LastX; $Points[] = $LastY;
- $Points[] = $LastX; $Points[] = $Y;
- $Points[] = $YZero; $Points[] = $Y;
- $this->drawPolygon($Points,$Color);
- $Points = "";
- }
-
- if ( $X != VOID && $LastX != NULL && $LastY != NULL )
- {
- if ( $Points == "") { $Points[] = $YZero; $Points[] = $LastY; }
- $Points[] = $LastX; $Points[] = $LastY;
- $Points[] = $LastX; $Points[] = $Y;
- $Points[] = $X; $Points[] = $Y;
- }
-
- if ( $X != VOID ) { $LastGoodY = $Y; $LastGoodX = $X; }
- if ( $X == VOID ) { $X = NULL; }
-
- if ( $LastX == NULL && $ReCenter ) { $Y = $Y - $YStep/2; }
- $LastX = $X; $LastY = $Y;
- if ( $LastY < $this->GraphAreaY1 + $XMargin ) { $LastY = $this->GraphAreaY1 + $XMargin; }
- $Y = $Y + $YStep;
- }
-
- if ( $ReCenter )
- {
- $Points[] = $LastX; $Points[] = $LastY+$YStep/2;
- $Points[] = $YZero; $Points[] = $LastY+$YStep/2;
- }
- else
- { $Points[] = $YZero; $Points[] = $LastY; }
-
- $this->drawPolygon($Points,$Color);
- }
- }
- }
- }
-
- /* Draw an area chart */
- function drawAreaChart($Format=NULL)
- {
- $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
- $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
- $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
- $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
- $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
- $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
- $ForceTransparency = isset($Format["ForceTransparency"]) ? $Format["ForceTransparency"] : 25;
- $AroundZero = isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE;
- $Threshold = isset($Format["Threshold"]) ? $Format["Threshold"] : NULL;
-
- $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
-
- $Data = $this->DataSet->getData();
- list($XMargin,$XDivs) = $this->scaleGetXSettings();
-
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- {
- $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
- if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
-
- $AxisID = $Serie["Axis"];
- $Mode = $Data["Axis"][$AxisID]["Display"];
- $Format = $Data["Axis"][$AxisID]["Format"];
- $Unit = $Data["Axis"][$AxisID]["Unit"];
-
- $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
- $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"]));
-
- if ( $Threshold != NULL )
- {
- foreach($Threshold as $Key => $Params)
- {
- $Threshold[$Key]["MinX"] = $this->scaleComputeY($Params["Min"],array("AxisID"=>$Serie["Axis"]));
- $Threshold[$Key]["MaxX"] = $this->scaleComputeY($Params["Max"],array("AxisID"=>$Serie["Axis"]));
- }
- }
-
- $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
-
- $Areas = ""; $AreaID = 0;
- $Areas[$AreaID][] = $this->GraphAreaX1 + $XMargin;
- if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; }
-
- if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
- $X = $this->GraphAreaX1 + $XMargin; $LastX = NULL; $LastY = NULL;
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- foreach($PosArray as $Key => $Y)
- {
- if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
- {
- if ( $Serie["Data"][$Key] > 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
- $this->drawText($X,$Y-$Offset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
- }
-
- if ( $Y == VOID && isset($Areas[$AreaID]) )
- {
- if($LastX == NULL)
- { $Areas[$AreaID][] = $X; }
- else
- { $Areas[$AreaID][] = $LastX; }
-
- if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; }
- $AreaID++;
- }
- elseif ($Y != VOID)
- {
- if ( !isset($Areas[$AreaID]) )
- {
- $Areas[$AreaID][] = $X;
- if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; }
- }
-
- $Areas[$AreaID][] = $X;
- $Areas[$AreaID][] = $Y;
- }
-
- $LastX = $X;
- $X = $X + $XStep;
- }
- $Areas[$AreaID][] = $LastX;
- if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaY2-1; }
-
- /* Handle shadows in the areas */
- if ( $this->Shadow )
- {
- $ShadowArea = "";
- foreach($Areas as $Key => $Points)
- {
- $ShadowArea[$Key] = "";
- foreach($Points as $Key2 => $Value)
- {
- if ( $Key2 % 2 == 0 )
- { $ShadowArea[$Key][] = $Value + $this->ShadowX; }
- else
- { $ShadowArea[$Key][] = $Value + $this->ShadowY; }
- }
- }
-
- foreach($ShadowArea as $Key => $Points)
- $this->drawPolygonChart($Points,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
- }
-
- $Alpha = $ForceTransparency != NULL ? $ForceTransparency : $Alpha;
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Threshold"=>$Threshold);
-
- foreach($Areas as $Key => $Points)
- $this->drawPolygonChart($Points,$Color);
- }
- else
- {
- if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
- if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
-
- $Areas = ""; $AreaID = 0;
- if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; }
- $Areas[$AreaID][] = $this->GraphAreaY1 + $XMargin;
-
- if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
- $Y = $this->GraphAreaY1 + $XMargin; $LastX = NULL; $LastY = NULL;
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- foreach($PosArray as $Key => $X)
- {
- if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
- {
- if ( $Serie["Data"][$Key] > 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
- $this->drawText($X+$Offset,$Y,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("Angle"=>270,"R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align));
- }
-
- if ( $X == VOID && isset($Areas[$AreaID]) )
- {
- if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; }
-
- if($LastY == NULL)
- { $Areas[$AreaID][] = $Y; }
- else
- { $Areas[$AreaID][] = $LastY; }
-
- $AreaID++;
- }
- elseif ($X != VOID)
- {
- if ( !isset($Areas[$AreaID]) )
- {
- if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; }
- $Areas[$AreaID][] = $Y;
- }
-
- $Areas[$AreaID][] = $X;
- $Areas[$AreaID][] = $Y;
- }
-
- $LastX = $X; $LastY = $Y;
- $Y = $Y + $YStep;
- }
- if ( $AroundZero ) { $Areas[$AreaID][] = $YZero; } else { $Areas[$AreaID][] = $this->GraphAreaX1+1; }
- $Areas[$AreaID][] = $LastY;
-
- /* Handle shadows in the areas */
- if ( $this->Shadow )
- {
- $ShadowArea = "";
- foreach($Areas as $Key => $Points)
- {
- $ShadowArea[$Key] = "";
- foreach($Points as $Key2 => $Value)
- {
- if ( $Key2 % 2 == 0 )
- { $ShadowArea[$Key][] = $Value + $this->ShadowX; }
- else
- { $ShadowArea[$Key][] = $Value + $this->ShadowY; }
- }
- }
-
- foreach($ShadowArea as $Key => $Points)
- $this->drawPolygonChart($Points,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
- }
-
- $Alpha = $ForceTransparency != NULL ? $ForceTransparency : $Alpha;
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Threshold"=>$Threshold);
-
- foreach($Areas as $Key => $Points)
- $this->drawPolygonChart($Points,$Color);
- }
- }
- }
- }
-
-
- /* Draw a bar chart */
- function drawBarChart($Format=NULL)
- {
- $Floating0Serie = isset($Format["Floating0Serie"]) ? $Format["Floating0Serie"] : NULL;
- $Floating0Value = isset($Format["Floating0Value"]) ? $Format["Floating0Value"] : NULL;
- $Draw0Line = isset($Format["Draw0Line"]) ? $Format["Draw0Line"] : FALSE;
- $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
- $DisplayOrientation = isset($Format["DisplayOrientation"]) ? $Format["DisplayOrientation"] : ORIENTATION_HORIZONTAL;
- $DisplayOffset = isset($Format["DisplayOffset"]) ? $Format["DisplayOffset"] : 2;
- $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
- $DisplayFont = isset($Format["DisplaySize"]) ? $Format["DisplaySize"] : $this->FontName;
- $DisplaySize = isset($Format["DisplaySize"]) ? $Format["DisplaySize"] : $this->FontSize;
- $DisplayPos = isset($Format["DisplayPos"]) ? $Format["DisplayPos"] : LABEL_POS_OUTSIDE;
- $DisplayShadow = isset($Format["DisplayShadow"]) ? $Format["DisplayShadow"] : TRUE;
- $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
- $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
- $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
- $AroundZero = isset($Format["AroundZero"]) ? $Format["AroundZero"] : TRUE;
- $Interleave = isset($Format["Interleave"]) ? $Format["Interleave"] : .5;
- $Rounded = isset($Format["Rounded"]) ? $Format["Rounded"] : FALSE;
- $RoundRadius = isset($Format["RoundRadius"]) ? $Format["RoundRadius"] : 4;
- $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
- $Gradient = isset($Format["Gradient"]) ? $Format["Gradient"] : FALSE;
- $GradientMode = isset($Format["GradientMode"]) ? $Format["GradientMode"] : GRADIENT_SIMPLE;
- $GradientAlpha = isset($Format["GradientAlpha"]) ? $Format["GradientAlpha"] : 20;
- $GradientStartR = isset($Format["GradientStartR"]) ? $Format["GradientStartR"] : 255;
- $GradientStartG = isset($Format["GradientStartG"]) ? $Format["GradientStartG"] : 255;
- $GradientStartB = isset($Format["GradientStartB"]) ? $Format["GradientStartB"] : 255;
- $GradientEndR = isset($Format["GradientEndR"]) ? $Format["GradientEndR"] : 0;
- $GradientEndG = isset($Format["GradientEndG"]) ? $Format["GradientEndG"] : 0;
- $GradientEndB = isset($Format["GradientEndB"]) ? $Format["GradientEndB"] : 0;
- $TxtMargin = isset($Format["TxtMargin"]) ? $Format["TxtMargin"] : 6;
- $OverrideColors = isset($Format["OverrideColors"]) ? $Format["OverrideColors"] : NULL;
- $OverrideSurrounding = isset($Format["OverrideSurrounding"]) ? $Format["OverrideSurrounding"] : 30;
- $InnerSurrounding = isset($Format["InnerSurrounding"]) ? $Format["InnerSurrounding"] : NULL;
- $InnerBorderR = isset($Format["InnerBorderR"]) ? $Format["InnerBorderR"] : -1;
- $InnerBorderG = isset($Format["InnerBorderG"]) ? $Format["InnerBorderG"] : -1;
- $InnerBorderB = isset($Format["InnerBorderB"]) ? $Format["InnerBorderB"] : -1;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
-
- $this->LastChartLayout = CHART_LAST_LAYOUT_REGULAR;
-
- $Data = $this->DataSet->getData();
- list($XMargin,$XDivs) = $this->scaleGetXSettings();
-
- if ( $OverrideColors != NULL )
- {
- $OverrideColors = $this->validatePalette($OverrideColors,$OverrideSurrounding);
- $this->DataSet->saveExtendedData("Palette",$OverrideColors);
- }
-
- $RestoreShadow = $this->Shadow;
-
- $SeriesCount = $this->countDrawableSeries();
- $CurrentSerie = 0;
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- {
- $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
- if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = $R; $DisplayG = $G; $DisplayB = $B; }
- if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
- if ( $InnerSurrounding != NULL ) { $InnerBorderR = $R+$InnerSurrounding; $InnerBorderG = $G+$InnerSurrounding; $InnerBorderB = $B+$InnerSurrounding; }
- if ( $InnerBorderR == -1 ) { $InnerColor = NULL; } else { $InnerColor = array("R"=>$InnerBorderR,"G"=>$InnerBorderG,"B"=>$InnerBorderB); }
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB);
-
- $AxisID = $Serie["Axis"];
- $Mode = $Data["Axis"][$AxisID]["Display"];
- $Format = $Data["Axis"][$AxisID]["Format"];
- $Unit = $Data["Axis"][$AxisID]["Unit"];
-
- if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
-
- $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
-
- if ( $Floating0Value != NULL )
- { $YZero = $this->scaleComputeY($Floating0Value,array("AxisID"=>$Serie["Axis"])); }
- else
- { $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"])); }
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
- if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
-
- if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
- $X = $this->GraphAreaX1 + $XMargin;
-
- if ( $AroundZero ) { $Y1 = $YZero; } else { $Y1 = $this->GraphAreaY2-1; }
- if ( $XDivs == 0 ) { $XSize = ($this->GraphAreaX2-$this->GraphAreaX1)/($SeriesCount+$Interleave); } else { $XSize = ($XStep / ($SeriesCount+$Interleave) ); }
-
- $XOffset = -($XSize*$SeriesCount)/2 + $CurrentSerie * $XSize;
- if ( $X + $XOffset <= $this->GraphAreaX1 ) { $XOffset = $this->GraphAreaX1 - $X + 1 ; }
-
- $this->DataSet->Data["Series"][$SerieName]["XOffset"] = $XOffset + $XSize / 2;
-
- if ( $Rounded || $BorderR != -1) { $XSpace = 1; } else { $XSpace = 0; }
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
-
- $ID = 0;
- foreach($PosArray as $Key => $Y2)
- {
- if ( $Floating0Serie != NULL )
- {
- if ( isset($Data["Series"][$Floating0Serie]["Data"][$Key]) )
- { $Value = $Data["Series"][$Floating0Serie]["Data"][$Key]; }
- else
- { $Value = 0; }
-
- $YZero = $this->scaleComputeY($Value,array("AxisID"=>$Serie["Axis"]));
- if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
- if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
-
- if ( $AroundZero ) { $Y1 = $YZero; } else { $Y1 = $this->GraphAreaY2-1; }
- }
-
- if ( $OverrideColors != NULL )
- { if ( isset($OverrideColors[$ID]) ) { $Color = array("R"=>$OverrideColors[$ID]["R"],"G"=>$OverrideColors[$ID]["G"],"B"=>$OverrideColors[$ID]["B"],"Alpha"=>$OverrideColors[$ID]["Alpha"],"BorderR"=>$OverrideColors[$ID]["BorderR"],"BorderG"=>$OverrideColors[$ID]["BorderG"],"BorderB"=>$OverrideColors[$ID]["BorderB"]); } else { $Color = $this->getRandomColor(); } }
-
- if ( $Y2 != VOID )
- {
- $BarHeight = $Y1 - $Y2;
-
- if ( $Serie["Data"][$Key] == 0 )
- {
- $this->drawLine($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y1,$Color);
- if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X+$XOffset+$XSpace).",".floor($Y1-1).",".floor($X+$XOffset+$XSize-$XSpace).",".floor($Y1+1),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
- }
- else
- {
- if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X+$XOffset+$XSpace).",".floor($Y1).",".floor($X+$XOffset+$XSize-$XSpace).",".floor($Y2),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
-
- if ( $Rounded )
- $this->drawRoundedFilledRectangle($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,$RoundRadius,$Color);
- else
- {
- $this->drawFilledRectangle($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,$Color);
-
- if ( $InnerColor != NULL ) { $this->drawRectangle($X+$XOffset+$XSpace+1,min($Y1,$Y2)+1,$X+$XOffset+$XSize-$XSpace-1,max($Y1,$Y2)-1,$InnerColor); }
-
- if ( $Gradient )
- {
- $this->Shadow = FALSE;
-
- if ( $GradientMode == GRADIENT_SIMPLE )
- {
- if ( $Serie["Data"][$Key] >= 0 )
- $GradienColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
- else
- $GradienColor = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
-
- $this->drawGradientArea($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,DIRECTION_VERTICAL,$GradienColor);
- }
- elseif ( $GradientMode == GRADIENT_EFFECT_CAN )
- {
- $GradienColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
- $GradienColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
- $XSpan = floor($XSize / 3);
-
- $this->drawGradientArea($X+$XOffset+$XSpace,$Y1,$X+$XOffset+$XSpan-$XSpace,$Y2,DIRECTION_HORIZONTAL,$GradienColor1);
- $this->drawGradientArea($X+$XOffset+$XSpan+$XSpace,$Y1,$X+$XOffset+$XSize-$XSpace,$Y2,DIRECTION_HORIZONTAL,$GradienColor2);
- }
- $this->Shadow = $RestoreShadow;
- }
- }
-
- if ( $Draw0Line )
- {
- $Line0Color = array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20);
-
- if ( abs($Y1 - $Y2) > 3 ) { $Line0Width = 3; } else { $Line0Width = 1; }
- if ( $Y1 - $Y2 < 0 ) { $Line0Width = -$Line0Width; }
-
- $this->drawFilledRectangle($X+$XOffset+$XSpace,floor($Y1),$X+$XOffset+$XSize-$XSpace,floor($Y1)-$Line0Width,$Line0Color);
- $this->drawLine($X+$XOffset+$XSpace,floor($Y1),$X+$XOffset+$XSize-$XSpace,floor($Y1),$Line0Color);
- }
- }
-
- if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
- {
- if ( $DisplayShadow ) { $this->Shadow = TRUE; }
-
- $Caption = $this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit);
- $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,90,$Caption);
- $TxtHeight = $TxtPos[0]["Y"] - $TxtPos[1]["Y"] + $TxtMargin;
-
- if ( $DisplayPos == LABEL_POS_INSIDE && abs($TxtHeight) < abs($BarHeight) )
- {
- $CenterX = (($X+$XOffset+$XSize-$XSpace)-($X+$XOffset+$XSpace))/2 + $X+$XOffset+$XSpace;
- $CenterY = ($Y2-$Y1)/2 + $Y1;
-
- $this->drawText($CenterX,$CenterY,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"Angle"=>90));
- }
- else
- {
- if ( $Serie["Data"][$Key] >= 0 ) { $Align = TEXT_ALIGN_BOTTOMMIDDLE; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_TOPMIDDLE; $Offset = -$DisplayOffset; }
- $this->drawText($X+$XOffset+$XSize/2,$Y2-$Offset,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align,"FontSize"=>$DisplaySize));
- }
-
- $this->Shadow = $RestoreShadow;
- }
- }
-
- $X = $X + $XStep;
- $ID++;
- }
- }
- else
- {
- if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
- if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
-
- if ( $XDivs == 0 ) { $YStep = 0; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
-
- $Y = $this->GraphAreaY1 + $XMargin;
-
- if ( $AroundZero ) { $X1 = $YZero; } else { $X1 = $this->GraphAreaX1+1; }
- if ( $XDivs == 0 ) { $YSize = ($this->GraphAreaY2-$this->GraphAreaY1)/($SeriesCount+$Interleave); } else { $YSize = ($YStep / ($SeriesCount+$Interleave) ); }
-
- $YOffset = -($YSize*$SeriesCount)/2 + $CurrentSerie * $YSize;
- if ( $Y + $YOffset <= $this->GraphAreaY1 ) { $YOffset = $this->GraphAreaY1 - $Y + 1 ; }
-
- $this->DataSet->Data["Series"][$SerieName]["XOffset"] = $YOffset + $YSize / 2;
-
- if ( $Rounded || $BorderR != -1 ) { $YSpace = 1; } else { $YSpace = 0; }
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
-
- $ID = 0 ;
- foreach($PosArray as $Key => $X2)
- {
- if ( $Floating0Serie != NULL )
- {
- if ( isset($Data["Series"][$Floating0Serie]["Data"][$Key]) )
- $Value = $Data["Series"][$Floating0Serie]["Data"][$Key];
- else { $Value = 0; }
-
- $YZero = $this->scaleComputeY($Value,array("AxisID"=>$Serie["Axis"]));
- if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
- if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
- if ( $AroundZero ) { $X1 = $YZero; } else { $X1 = $this->GraphAreaX1+1; }
- }
-
- if ( $OverrideColors != NULL )
- { if ( isset($OverrideColors[$ID]) ) { $Color = array("R"=>$OverrideColors[$ID]["R"],"G"=>$OverrideColors[$ID]["G"],"B"=>$OverrideColors[$ID]["B"],"Alpha"=>$OverrideColors[$ID]["Alpha"],"BorderR"=>$OverrideColors[$ID]["BorderR"],"BorderG"=>$OverrideColors[$ID]["BorderG"],"BorderB"=>$OverrideColors[$ID]["BorderB"]); } else { $Color = $this->getRandomColor(); } }
-
- if ( $X2 != VOID )
- {
- $BarWidth = $X2 - $X1;
-
- if ( $Serie["Data"][$Key] == 0 )
- {
- $this->drawLine($X1,$Y+$YOffset+$YSpace,$X1,$Y+$YOffset+$YSize-$YSpace,$Color);
- if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X1-1).",".floor($Y+$YOffset+$YSpace).",".floor($X1+1).",".floor($Y+$YOffset+$YSize-$YSpace),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
- }
- else
- {
- if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X1).",".floor($Y+$YOffset+$YSpace).",".floor($X2).",".floor($Y+$YOffset+$YSize-$YSpace),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
-
- if ( $Rounded )
- $this->drawRoundedFilledRectangle($X1+1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSize-$YSpace,$RoundRadius,$Color);
- else
- {
- $this->drawFilledRectangle($X1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSize-$YSpace,$Color);
-
- if ( $InnerColor != NULL ) { $this->drawRectangle(min($X1,$X2)+1,$Y+$YOffset+$YSpace+1,max($X1,$X2)-1,$Y+$YOffset+$YSize-$YSpace-1,$InnerColor); }
-
- if ( $Gradient )
- {
- $this->Shadow = FALSE;
-
- if ( $GradientMode == GRADIENT_SIMPLE )
- {
- if ( $Serie["Data"][$Key] >= 0 )
- $GradienColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
- else
- $GradienColor = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
-
- $this->drawGradientArea($X1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSize-$YSpace,DIRECTION_HORIZONTAL,$GradienColor);
- }
- elseif ( $GradientMode == GRADIENT_EFFECT_CAN )
- {
- $GradienColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
- $GradienColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
- $YSpan = floor($YSize / 3);
-
- $this->drawGradientArea($X1,$Y+$YOffset+$YSpace,$X2,$Y+$YOffset+$YSpan-$YSpace,DIRECTION_VERTICAL,$GradienColor1);
- $this->drawGradientArea($X1,$Y+$YOffset+$YSpan,$X2,$Y+$YOffset+$YSize-$YSpace,DIRECTION_VERTICAL,$GradienColor2);
- }
- $this->Shadow = $RestoreShadow;
- }
- }
-
- if ( $Draw0Line )
- {
- $Line0Color = array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20);
-
- if ( abs($X1 - $X2) > 3 ) { $Line0Width = 3; } else { $Line0Width = 1; }
- if ( $X2 - $X1 < 0 ) { $Line0Width = -$Line0Width; }
-
- $this->drawFilledRectangle(floor($X1),$Y+$YOffset+$YSpace,floor($X1)+$Line0Width,$Y+$YOffset+$YSize-$YSpace,$Line0Color);
- $this->drawLine(floor($X1),$Y+$YOffset+$YSpace,floor($X1),$Y+$YOffset+$YSize-$YSpace,$Line0Color);
- }
- }
-
- if ( $DisplayValues && $Serie["Data"][$Key] != VOID )
- {
- if ( $DisplayShadow ) { $this->Shadow = TRUE; }
-
- $Caption = $this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit);
- $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
- $TxtWidth = $TxtPos[1]["X"] - $TxtPos[0]["X"] + $TxtMargin;
-
- if ( $DisplayPos == LABEL_POS_INSIDE && abs($TxtWidth) < abs($BarWidth) )
- {
- $CenterX = ($X2-$X1)/2 + $X1;
- $CenterY = (($Y+$YOffset+$YSize-$YSpace)-($Y+$YOffset+$YSpace))/2 + ($Y+$YOffset+$YSpace);
-
- $this->drawText($CenterX,$CenterY,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize));
- }
- else
- {
- if ( $Serie["Data"][$Key] >= 0 ) { $Align = TEXT_ALIGN_MIDDLELEFT; $Offset = $DisplayOffset; } else { $Align = TEXT_ALIGN_MIDDLERIGHT; $Offset = -$DisplayOffset; }
- $this->drawText($X2+$Offset,$Y+$YOffset+$YSize/2,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>$Align,"FontSize"=>$DisplaySize));
- }
-
- $this->Shadow = $RestoreShadow;
- }
- }
- $Y = $Y + $YStep;
- $ID++;
- }
- }
- $CurrentSerie++;
- }
- }
- }
-
- /* Draw a bar chart */
- function drawStackedBarChart($Format=NULL)
- {
- $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
- $DisplayOrientation = isset($Format["DisplayOrientation"]) ? $Format["DisplayOrientation"] : ORIENTATION_AUTO;
- $DisplayRound = isset($Format["DisplayRound"]) ? $Format["DisplayRound"] : 0;
- $DisplayColor = isset($Format["DisplayColor"]) ? $Format["DisplayColor"] : DISPLAY_MANUAL;
- $DisplayFont = isset($Format["DisplayFont"]) ? $Format["DisplayFont"] : $this->FontName;
- $DisplaySize = isset($Format["DisplaySize"]) ? $Format["DisplaySize"] : $this->FontSize;
- $DisplayR = isset($Format["DisplayR"]) ? $Format["DisplayR"] : 0;
- $DisplayG = isset($Format["DisplayG"]) ? $Format["DisplayG"] : 0;
- $DisplayB = isset($Format["DisplayB"]) ? $Format["DisplayB"] : 0;
- $Interleave = isset($Format["Interleave"]) ? $Format["Interleave"] : .5;
- $Rounded = isset($Format["Rounded"]) ? $Format["Rounded"] : FALSE;
- $RoundRadius = isset($Format["RoundRadius"]) ? $Format["RoundRadius"] : 4;
- $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : -1;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : -1;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : -1;
- $Gradient = isset($Format["Gradient"]) ? $Format["Gradient"] : FALSE;
- $GradientMode = isset($Format["GradientMode"]) ? $Format["GradientMode"] : GRADIENT_SIMPLE;
- $GradientAlpha = isset($Format["GradientAlpha"]) ? $Format["GradientAlpha"] : 20;
- $GradientStartR = isset($Format["GradientStartR"]) ? $Format["GradientStartR"] : 255;
- $GradientStartG = isset($Format["GradientStartG"]) ? $Format["GradientStartG"] : 255;
- $GradientStartB = isset($Format["GradientStartB"]) ? $Format["GradientStartB"] : 255;
- $GradientEndR = isset($Format["GradientEndR"]) ? $Format["GradientEndR"] : 0;
- $GradientEndG = isset($Format["GradientEndG"]) ? $Format["GradientEndG"] : 0;
- $GradientEndB = isset($Format["GradientEndB"]) ? $Format["GradientEndB"] : 0;
- $InnerSurrounding = isset($Format["InnerSurrounding"]) ? $Format["InnerSurrounding"] : NULL;
- $InnerBorderR = isset($Format["InnerBorderR"]) ? $Format["InnerBorderR"] : -1;
- $InnerBorderG = isset($Format["InnerBorderG"]) ? $Format["InnerBorderG"] : -1;
- $InnerBorderB = isset($Format["InnerBorderB"]) ? $Format["InnerBorderB"] : -1;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
- $FontFactor = isset($Format["FontFactor"]) ? $Format["FontFactor"] : 8;
-
- $this->LastChartLayout = CHART_LAST_LAYOUT_STACKED;
-
- $Data = $this->DataSet->getData();
- list($XMargin,$XDivs) = $this->scaleGetXSettings();
-
- $RestoreShadow = $this->Shadow;
-
- $LastX = ""; $LastY = "";
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- {
- $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
- if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = 255; $DisplayG = 255; $DisplayB = 255; }
- if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
- if ( $InnerSurrounding != NULL ) { $InnerBorderR = $R+$InnerSurrounding; $InnerBorderG = $G+$InnerSurrounding; $InnerBorderB = $B+$InnerSurrounding; }
- if ( $InnerBorderR == -1 ) { $InnerColor = NULL; } else { $InnerColor = array("R"=>$InnerBorderR,"G"=>$InnerBorderG,"B"=>$InnerBorderB); }
-
- $AxisID = $Serie["Axis"];
- $Mode = $Data["Axis"][$AxisID]["Display"];
- $Format = $Data["Axis"][$AxisID]["Format"];
- $Unit = $Data["Axis"][$AxisID]["Unit"];
-
- if (isset($Serie["Description"])) { $SerieDescription = $Serie["Description"]; } else { $SerieDescription = $SerieName; }
-
- $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]),TRUE);
- $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"]));
-
- $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
-
- $Color = array("TransCorner"=>TRUE,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB);
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
- if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
-
- if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
- $X = $this->GraphAreaX1 + $XMargin;
-
- $XSize = ($XStep / (1+$Interleave) );
- $XOffset = -($XSize/2);
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- foreach($PosArray as $Key => $Height)
- {
- if ( $Height != VOID && $Serie["Data"][$Key] != 0 )
- {
- if ( $Serie["Data"][$Key] > 0 ) { $Pos = "+"; } else { $Pos = "-"; }
-
- if ( !isset($LastY[$Key] ) ) { $LastY[$Key] = ""; }
- if ( !isset($LastY[$Key][$Pos] ) ) { $LastY[$Key][$Pos] = $YZero; }
-
- $Y1 = $LastY[$Key][$Pos];
- $Y2 = $Y1 - $Height;
-
- if ( ($Rounded || $BorderR != -1) && ($Pos == "+" && $Y1 != $YZero) ) { $YSpaceUp = 1; } else { $YSpaceUp = 0; }
- if ( ($Rounded || $BorderR != -1) && ($Pos == "-" && $Y1 != $YZero) ) { $YSpaceDown = 1; } else { $YSpaceDown = 0; }
-
- if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X+$XOffset).",".floor($Y1-$YSpaceUp+$YSpaceDown).",".floor($X+$XOffset+$XSize).",".floor($Y2),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
-
- if ( $Rounded )
- $this->drawRoundedFilledRectangle($X+$XOffset,$Y1-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2,$RoundRadius,$Color);
- else
- {
- $this->drawFilledRectangle($X+$XOffset,$Y1-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2,$Color);
-
- if ( $InnerColor != NULL ) { $RestoreShadow = $this->Shadow; $this->Shadow = FALSE; $this->drawRectangle(min($X+$XOffset+1,$X+$XOffset+$XSize),min($Y1-$YSpaceUp+$YSpaceDown,$Y2)+1,max($X+$XOffset+1,$X+$XOffset+$XSize)-1,max($Y1-$YSpaceUp+$YSpaceDown,$Y2)-1,$InnerColor); $this->Shadow = $RestoreShadow;}
-
- if ( $Gradient )
- {
- $this->Shadow = FALSE;
-
- if ( $GradientMode == GRADIENT_SIMPLE )
- {
- $GradientColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
- $this->drawGradientArea($X+$XOffset,$Y1-1-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2+1,DIRECTION_VERTICAL,$GradientColor);
- }
- elseif ( $GradientMode == GRADIENT_EFFECT_CAN )
- {
- $GradientColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
- $GradientColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
- $XSpan = floor($XSize / 3);
-
- $this->drawGradientArea($X+$XOffset-.5,$Y1-.5-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSpan,$Y2+.5,DIRECTION_HORIZONTAL,$GradientColor1);
- $this->drawGradientArea($X+$XSpan+$XOffset-.5,$Y1-.5-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2+.5,DIRECTION_HORIZONTAL,$GradientColor2);
- }
- $this->Shadow = $RestoreShadow;
- }
- }
-
- if ( $DisplayValues )
- {
- $BarHeight = abs($Y2-$Y1)-2;
- $BarWidth = $XSize+($XOffset/2)-$FontFactor;
-
- $Caption = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit);
- $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
- $TxtHeight = abs($TxtPos[2]["Y"] - $TxtPos[0]["Y"]);
- $TxtWidth = abs($TxtPos[1]["X"] - $TxtPos[0]["X"]);
-
- $XCenter = ( ($X+$XOffset+$XSize) - ($X+$XOffset) ) / 2 + $X+$XOffset;
- $YCenter = ( ($Y2) - ($Y1-$YSpaceUp+$YSpaceDown) ) / 2 + $Y1-$YSpaceUp+$YSpaceDown;
-
- $Done = FALSE;
- if ( $DisplayOrientation == ORIENTATION_HORIZONTAL || $DisplayOrientation == ORIENTATION_AUTO )
- {
- if ( $TxtHeight < $BarHeight && $TxtWidth < $BarWidth )
- {
- $this->drawText($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
- $Done = TRUE;
- }
- }
-
- if ( $DisplayOrientation == ORIENTATION_VERTICAL || ( $DisplayOrientation == ORIENTATION_AUTO && !$Done) )
- {
- if ( $TxtHeight < $BarWidth && $TxtWidth < $BarHeight )
- $this->drawText($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Angle"=>90,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
- }
- }
-
- $LastY[$Key][$Pos] = $Y2;
- }
-
- $X = $X + $XStep;
- }
- }
- else
- {
- if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
- if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
-
- if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
- $Y = $this->GraphAreaY1 + $XMargin;
-
- $YSize = $YStep / (1+$Interleave);
- $YOffset = -($YSize/2);
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- foreach($PosArray as $Key => $Width)
- {
- if ( $Width != VOID && $Serie["Data"][$Key] != 0 )
- {
- if ( $Serie["Data"][$Key] > 0 ) { $Pos = "+"; } else { $Pos = "-"; }
-
- if ( !isset($LastX[$Key] ) ) { $LastX[$Key] = ""; }
- if ( !isset($LastX[$Key][$Pos] ) ) { $LastX[$Key][$Pos] = $YZero; }
-
- $X1 = $LastX[$Key][$Pos];
- $X2 = $X1 + $Width;
-
- if ( ($Rounded || $BorderR != -1) && ($Pos == "+" && $X1 != $YZero) ) { $XSpaceLeft = 2; } else { $XSpaceLeft = 0; }
- if ( ($Rounded || $BorderR != -1) && ($Pos == "-" && $X1 != $YZero) ) { $XSpaceRight = 2; } else { $XSpaceRight = 0; }
-
- if ( $RecordImageMap ) { $this->addToImageMap("RECT",floor($X1+$XSpaceLeft).",".floor($Y+$YOffset).",".floor($X2-$XSpaceRight).",".floor($Y+$YOffset+$YSize),$this->toHTMLColor($R,$G,$B),$SerieDescription,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit)); }
-
- if ( $Rounded )
- $this->drawRoundedFilledRectangle($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSize,$RoundRadius,$Color);
- else
- {
- $this->drawFilledRectangle($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSize,$Color);
-
- if ( $InnerColor != NULL ) { $RestoreShadow = $this->Shadow; $this->Shadow = FALSE; $this->drawRectangle(min($X1+$XSpaceLeft,$X2-$XSpaceRight)+1,min($Y+$YOffset,$Y+$YOffset+$YSize)+1,max($X1+$XSpaceLeft,$X2-$XSpaceRight)-1,max($Y+$YOffset,$Y+$YOffset+$YSize)-1,$InnerColor); $this->Shadow = $RestoreShadow;}
-
- if ( $Gradient )
- {
- $this->Shadow = FALSE;
-
- if ( $GradientMode == GRADIENT_SIMPLE )
- {
- $GradientColor = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
- $this->drawGradientArea($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSize,DIRECTION_HORIZONTAL,$GradientColor);
- }
- elseif ( $GradientMode == GRADIENT_EFFECT_CAN )
- {
- $GradientColor1 = array("StartR"=>$GradientEndR,"StartG"=>$GradientEndG,"StartB"=>$GradientEndB,"EndR"=>$GradientStartR,"EndG"=>$GradientStartG,"EndB"=>$GradientStartB,"Alpha"=>$GradientAlpha);
- $GradientColor2 = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$GradientAlpha);
- $YSpan = floor($YSize / 3);
-
- $this->drawGradientArea($X1+$XSpaceLeft,$Y+$YOffset,$X2-$XSpaceRight,$Y+$YOffset+$YSpan,DIRECTION_VERTICAL,$GradientColor1);
- $this->drawGradientArea($X1+$XSpaceLeft,$Y+$YOffset+$YSpan,$X2-$XSpaceRight,$Y+$YOffset+$YSize,DIRECTION_VERTICAL,$GradientColor2);
- }
- $this->Shadow = $RestoreShadow;
- }
- }
-
- if ( $DisplayValues )
- {
- $BarWidth = abs($X2-$X1)-$FontFactor;
- $BarHeight = $YSize+($YOffset/2)-$FontFactor/2;
- $Caption = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit);
- $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
- $TxtHeight = abs($TxtPos[2]["Y"] - $TxtPos[0]["Y"]);
- $TxtWidth = abs($TxtPos[1]["X"] - $TxtPos[0]["X"]);
-
- $XCenter = ( $X2 - $X1 ) / 2 + $X1;
- $YCenter = ( ($Y+$YOffset+$YSize) - ($Y+$YOffset) ) / 2 + $Y+$YOffset;
-
- $Done = FALSE;
- if ( $DisplayOrientation == ORIENTATION_HORIZONTAL || $DisplayOrientation == ORIENTATION_AUTO )
- {
- if ( $TxtHeight < $BarHeight && $TxtWidth < $BarWidth )
- {
- $this->drawText($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
- $Done = TRUE;
- }
- }
-
- if ( $DisplayOrientation == ORIENTATION_VERTICAL || ( $DisplayOrientation == ORIENTATION_AUTO && !$Done) )
- {
- if ( $TxtHeight < $BarWidth && $TxtWidth < $BarHeight )
- $this->drawText($XCenter,$YCenter,$this->scaleFormat($Serie["Data"][$Key],$Mode,$Format,$Unit),array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Angle"=>90,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
- }
- }
-
- $LastX[$Key][$Pos] = $X2;
- }
-
- $Y = $Y + $YStep;
- }
- }
- }
- }
- }
-
- /* Draw a stacked area chart */
- function drawStackedAreaChart($Format=NULL)
- {
- $DrawLine = isset($Format["DrawLine"]) ? $Format["DrawLine"] : FALSE;
- $LineSurrounding = isset($Format["LineSurrounding"]) ? $Format["LineSurrounding"] : NULL;
- $LineR = isset($Format["LineR"]) ? $Format["LineR"] : VOID;
- $LineG = isset($Format["LineG"]) ? $Format["LineG"] : VOID;
- $LineB = isset($Format["LineB"]) ? $Format["LineB"] : VOID;
- $LineAlpha = isset($Format["LineAlpha"]) ? $Format["LineAlpha"] : 100;
- $DrawPlot = isset($Format["DrawPlot"]) ? $Format["DrawPlot"] : FALSE;
- $PlotRadius = isset($Format["PlotRadius"]) ? $Format["PlotRadius"] : 2;
- $PlotBorder = isset($Format["PlotBorder"]) ? $Format["PlotBorder"] : 1;
- $PlotBorderSurrounding = isset($Format["PlotBorderSurrounding"]) ? $Format["PlotBorderSurrounding"] : NULL;
- $PlotBorderR = isset($Format["PlotBorderR"]) ? $Format["PlotBorderR"] : 0;
- $PlotBorderG = isset($Format["PlotBorderG"]) ? $Format["PlotBorderG"] : 0;
- $PlotBorderB = isset($Format["PlotBorderB"]) ? $Format["PlotBorderB"] : 0;
- $PlotBorderAlpha = isset($Format["PlotBorderAlpha"]) ? $Format["PlotBorderAlpha"] : 50;
- $ForceTransparency = isset($Format["ForceTransparency"]) ? $Format["ForceTransparency"] : NULL;
-
- $this->LastChartLayout = CHART_LAST_LAYOUT_STACKED;
-
- $Data = $this->DataSet->getData();
- list($XMargin,$XDivs) = $this->scaleGetXSettings();
-
- $RestoreShadow = $this->Shadow;
- $this->Shadow = FALSE;
-
- /* Build the offset data series */
- $OffsetData = "";
- $OverallOffset = "";
- $SerieOrder = "";
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- {
- $SerieOrder[] = $SerieName;
-
- foreach($Serie["Data"] as $Key => $Value)
- {
- if ( $Value == VOID ) { $Value = 0; }
- if ($Value >= 0) { $Sign = "+"; } else { $Sign = "-"; }
- if ( !isset($OverallOffset[$Key]) || !isset($OverallOffset[$Key][$Sign]) ) { $OverallOffset[$Key][$Sign] = 0; }
-
- if ( $Sign == "+" )
- { $Data["Series"][$SerieName]["Data"][$Key] = $Value + $OverallOffset[$Key][$Sign]; }
- else
- { $Data["Series"][$SerieName]["Data"][$Key] = $Value - $OverallOffset[$Key][$Sign]; }
-
- $OverallOffset[$Key][$Sign] = $OverallOffset[$Key][$Sign] + abs($Value);
- }
- }
- }
- $SerieOrder = array_reverse($SerieOrder);
-
- $LastX = ""; $LastY = "";
- foreach($SerieOrder as $Key => $SerieName)
- {
- $Serie = $Data["Series"][$SerieName];
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- {
- $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"];
- if ( $ForceTransparency != NULL ) { $Alpha = $ForceTransparency; }
-
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
-
- if ( $LineSurrounding != NULL )
- $LineColor = array("R"=>$R+$LineSurrounding,"G"=>$G+$LineSurrounding,"B"=>$B+$LineSurrounding,"Alpha"=>$Alpha);
- elseif ( $LineR != VOID )
- $LineColor = array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha);
- else
- $LineColor = $Color;
-
- if ( $PlotBorderSurrounding != NULL )
- $PlotBorderColor = array("R"=>$R+$PlotBorderSurrounding,"G"=>$G+$PlotBorderSurrounding,"B"=>$B+$PlotBorderSurrounding,"Alpha"=>$PlotBorderAlpha);
- else
- $PlotBorderColor = array("R"=>$PlotBorderR,"G"=>$PlotBorderG,"B"=>$PlotBorderB,"Alpha"=>$PlotBorderAlpha);
-
- $AxisID = $Serie["Axis"];
- $Mode = $Data["Axis"][$AxisID]["Display"];
- $Format = $Data["Axis"][$AxisID]["Format"];
- $Unit = $Data["Axis"][$AxisID]["Unit"];
-
- $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]),TRUE);
- $YZero = $this->scaleComputeY(0,array("AxisID"=>$Serie["Axis"]));
-
- $this->DataSet->Data["Series"][$SerieName]["XOffset"] = 0;
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $YZero < $this->GraphAreaY1+1 ) { $YZero = $this->GraphAreaY1+1; }
- if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
-
- if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
- $X = $this->GraphAreaX1 + $XMargin;
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
-
- $Plots = ""; $Plots[] = $X; $Plots[] = $YZero;
- foreach($PosArray as $Key => $Height)
- {
- if ( $Height != VOID ) { $Plots[] = $X; $Plots[] = $YZero-$Height; }
- $X = $X + $XStep;
- }
- $Plots[] = $X-$XStep; $Plots[] = $YZero;
-
- $this->drawPolygon($Plots,$Color);
-
- $this->Shadow = $RestoreShadow;
- if ( $DrawLine ) { for($i=2; $i<=count($Plots)-6; $i=$i+2) { $this->drawLine($Plots[$i],$Plots[$i+1],$Plots[$i+2],$Plots[$i+3],$LineColor); } }
- if ( $DrawPlot )
- {
- for($i=2; $i<=count($Plots)-4; $i=$i+2)
- {
- if ( $PlotBorder != 0 )
- { $this->drawFilledCircle($Plots[$i],$Plots[$i+1],$PlotRadius+$PlotBorder,$PlotBorderColor); }
-
- $this->drawFilledCircle($Plots[$i],$Plots[$i+1],$PlotRadius,$Color);
- }
- }
- $this->Shadow = FALSE;
- }
- elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
- {
- if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
- if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
-
- if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
- $Y = $this->GraphAreaY1 + $XMargin;
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
-
- $Plots = ""; $Plots[] = $YZero; $Plots[] = $Y;
- foreach($PosArray as $Key => $Height)
- {
- if ( $Height != VOID ) { $Plots[] = $YZero+$Height; $Plots[] = $Y; }
- $Y = $Y + $YStep;
- }
- $Plots[] = $YZero; $Plots[] = $Y-$YStep;
-
- $this->drawPolygon($Plots,$Color);
-
- $this->Shadow = $RestoreShadow;
- if ( $DrawLine ) { for($i=2; $i<=count($Plots)-6; $i=$i+2) { $this->drawLine($Plots[$i],$Plots[$i+1],$Plots[$i+2],$Plots[$i+3],$LineColor); } }
- if ( $DrawPlot )
- {
- for($i=2; $i<=count($Plots)-4; $i=$i+2)
- {
- if ( $PlotBorder != 0 )
- { $this->drawFilledCircle($Plots[$i],$Plots[$i+1],$PlotRadius+$PlotBorder,$PlotBorderColor); }
-
- $this->drawFilledCircle($Plots[$i],$Plots[$i+1],$PlotRadius,$Color);
- }
- }
- $this->Shadow = FALSE;
- }
- }
- }
- $this->Shadow = $RestoreShadow;
- }
-
- /* Returns a random color */
- function getRandomColor($Alpha=100)
- { return(array("R"=>rand(0,255),"G"=>rand(0,255),"B"=>rand(0,255),"Alpha"=>$Alpha)); }
-
- /* Validate a palette */
- function validatePalette($Colors,$Surrounding=NULL)
- {
- $Result = "";
-
- if ( !is_array($Colors) ) { return($this->getRandomColor()); }
-
- foreach($Colors as $Key => $Values)
- {
- if ( isset($Values["R"]) ) { $Result[$Key]["R"] = $Values["R"]; } else { $Result[$Key]["R"] = rand(0,255); }
- if ( isset($Values["G"]) ) { $Result[$Key]["G"] = $Values["G"]; } else { $Result[$Key]["G"] = rand(0,255); }
- if ( isset($Values["B"]) ) { $Result[$Key]["B"] = $Values["B"]; } else { $Result[$Key]["B"] = rand(0,255); }
- if ( isset($Values["Alpha"]) ) { $Result[$Key]["Alpha"] = $Values["Alpha"]; } else { $Result[$Key]["Alpha"] = 100; }
-
- if ( $Surrounding != NULL )
- {
- $Result[$Key]["BorderR"] = $Result[$Key]["R"] + $Surrounding;
- $Result[$Key]["BorderG"] = $Result[$Key]["G"] + $Surrounding;
- $Result[$Key]["BorderB"] = $Result[$Key]["B"] + $Surrounding;
- }
- else
- {
- if ( isset($Values["BorderR"]) ) { $Result[$Key]["BorderR"] = $Values["BorderR"]; } else { $Result[$Key]["BorderR"] = $Result[$Key]["R"]; }
- if ( isset($Values["BorderG"]) ) { $Result[$Key]["BorderG"] = $Values["BorderG"]; } else { $Result[$Key]["BorderG"] = $Result[$Key]["G"]; }
- if ( isset($Values["BorderB"]) ) { $Result[$Key]["BorderB"] = $Values["BorderB"]; } else { $Result[$Key]["BorderB"] = $Result[$Key]["B"]; }
- if ( isset($Values["BorderAlpha"]) ) { $Result[$Key]["BorderAlpha"] = $Values["BorderAlpha"]; } else { $Result[$Key]["BorderAlpha"] = $Result[$Key]["Alpha"]; }
- }
- }
-
- return($Result);
- }
-
- /* Draw the derivative chart associated to the data series */
- function drawDerivative($Format=NULL)
- {
- $Offset = isset($Format["Offset"]) ? $Format["Offset"] : 10;
- $SerieSpacing = isset($Format["SerieSpacing"]) ? $Format["SerieSpacing"] : 3;
- $DerivativeHeight = isset($Format["DerivativeHeight"]) ? $Format["DerivativeHeight"] : 4;
- $ShadedSlopeBox = isset($Format["ShadedSlopeBox"]) ? $Format["ShadedSlopeBox"] : FALSE;
- $DrawBackground = isset($Format["DrawBackground"]) ? $Format["DrawBackground"] : TRUE;
- $BackgroundR = isset($Format["BackgroundR"]) ? $Format["BackgroundR"] : 255;
- $BackgroundG = isset($Format["BackgroundG"]) ? $Format["BackgroundG"] : 255;
- $BackgroundB = isset($Format["BackgroundB"]) ? $Format["BackgroundB"] : 255;
- $BackgroundAlpha = isset($Format["BackgroundAlpha"]) ? $Format["BackgroundAlpha"] : 20;
- $DrawBorder = isset($Format["DrawBorder"]) ? $Format["DrawBorder"] : TRUE;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 0;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 0;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 0;
- $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 100;
- $Caption = isset($Format["Caption"]) ? $Format["Caption"] : TRUE;
- $CaptionHeight = isset($Format["CaptionHeight"]) ? $Format["CaptionHeight"] : 10;
- $CaptionWidth = isset($Format["CaptionWidth"]) ? $Format["CaptionWidth"] : 20;
- $CaptionMargin = isset($Format["CaptionMargin"]) ? $Format["CaptionMargin"] : 4;
- $CaptionLine = isset($Format["CaptionLine"]) ? $Format["CaptionLine"] : FALSE;
- $CaptionBox = isset($Format["CaptionBox"]) ? $Format["CaptionBox"] : FALSE;
- $CaptionBorderR = isset($Format["CaptionBorderR"]) ? $Format["CaptionBorderR"] : 0;
- $CaptionBorderG = isset($Format["CaptionBorderG"]) ? $Format["CaptionBorderG"] : 0;
- $CaptionBorderB = isset($Format["CaptionBorderB"]) ? $Format["CaptionBorderB"] : 0;
- $CaptionFillR = isset($Format["CaptionFillR"]) ? $Format["CaptionFillR"] : 255;
- $CaptionFillG = isset($Format["CaptionFillG"]) ? $Format["CaptionFillG"] : 255;
- $CaptionFillB = isset($Format["CaptionFillB"]) ? $Format["CaptionFillB"] : 255;
- $CaptionFillAlpha = isset($Format["CaptionFillAlpha"]) ? $Format["CaptionFillAlpha"] : 80;
- $PositiveSlopeStartR = isset($Format["PositiveSlopeStartR"]) ? $Format["PositiveSlopeStartR"] : 184;
- $PositiveSlopeStartG = isset($Format["PositiveSlopeStartG"]) ? $Format["PositiveSlopeStartG"] : 234;
- $PositiveSlopeStartB = isset($Format["PositiveSlopeStartB"]) ? $Format["PositiveSlopeStartB"] : 88;
- $PositiveSlopeEndR = isset($Format["PositiveSlopeStartR"]) ? $Format["PositiveSlopeStartR"] : 239;
- $PositiveSlopeEndG = isset($Format["PositiveSlopeStartG"]) ? $Format["PositiveSlopeStartG"] : 31;
- $PositiveSlopeEndB = isset($Format["PositiveSlopeStartB"]) ? $Format["PositiveSlopeStartB"] : 36;
- $NegativeSlopeStartR = isset($Format["NegativeSlopeStartR"]) ? $Format["NegativeSlopeStartR"] : 184;
- $NegativeSlopeStartG = isset($Format["NegativeSlopeStartG"]) ? $Format["NegativeSlopeStartG"] : 234;
- $NegativeSlopeStartB = isset($Format["NegativeSlopeStartB"]) ? $Format["NegativeSlopeStartB"] : 88;
- $NegativeSlopeEndR = isset($Format["NegativeSlopeStartR"]) ? $Format["NegativeSlopeStartR"] : 67;
- $NegativeSlopeEndG = isset($Format["NegativeSlopeStartG"]) ? $Format["NegativeSlopeStartG"] : 124;
- $NegativeSlopeEndB = isset($Format["NegativeSlopeStartB"]) ? $Format["NegativeSlopeStartB"] : 227;
-
- $Data = $this->DataSet->getData();
-
- list($XMargin,$XDivs) = $this->scaleGetXSettings();
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- $YPos = $this->DataSet->Data["GraphArea"]["Y2"] + $Offset;
- else
- $XPos = $this->DataSet->Data["GraphArea"]["X2"] + $Offset;
-
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- {
- $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; $Alpha = $Serie["Color"]["Alpha"]; $Ticks = $Serie["Ticks"]; $Weight = $Serie["Weight"];
-
- $AxisID = $Serie["Axis"];
- $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $Caption )
- {
- if ( $CaptionLine )
- {
- $StartX = floor($this->GraphAreaX1-$CaptionWidth+$XMargin-$CaptionMargin);
- $EndX = floor($this->GraphAreaX1-$CaptionMargin+$XMargin);
-
- $CaptionSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight);
- if ( $CaptionBox ) { $this->drawFilledRectangle($StartX,$YPos,$EndX,$YPos+$CaptionHeight,array("R"=>$CaptionFillR,"G"=>$CaptionFillG,"B"=>$CaptionFillB,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB,"Alpha"=>$CaptionFillAlpha)); }
- $this->drawLine($StartX+2,$YPos+($CaptionHeight/2),$EndX-2,$YPos+($CaptionHeight/2),$CaptionSettings);
- }
- else
- $this->drawFilledRectangle($this->GraphAreaX1-$CaptionWidth+$XMargin-$CaptionMargin,$YPos,$this->GraphAreaX1-$CaptionMargin+$XMargin,$YPos+$CaptionHeight,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB));
- }
-
- if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
- $X = $this->GraphAreaX1 + $XMargin;
-
- $TopY = $YPos + ($CaptionHeight/2) - ($DerivativeHeight/2);
- $BottomY = $YPos + ($CaptionHeight/2) + ($DerivativeHeight/2);
-
- $StartX = floor($this->GraphAreaX1+$XMargin);
- $EndX = floor($this->GraphAreaX2-$XMargin);
-
- if ( $DrawBackground ) { $this->drawFilledRectangle($StartX-1,$TopY-1,$EndX+1,$BottomY+1,array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha)); }
- if ( $DrawBorder ) { $this->drawRectangle($StartX-1,$TopY-1,$EndX+1,$BottomY+1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); }
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
-
- $RestoreShadow = $this->Shadow;
- $this->Shadow = FALSE;
-
- /* Determine the Max slope index */
- $LastX = NULL; $LastY = NULL; $MinSlope = 0; $MaxSlope = 1;
- foreach($PosArray as $Key => $Y)
- {
- if ( $Y != VOID && $LastX != NULL )
- { $Slope = ($LastY - $Y); if ( $Slope > $MaxSlope ) { $MaxSlope = $Slope; } if ( $Slope < $MinSlope ) { $MinSlope = $Slope; } }
-
- if ( $Y == VOID )
- { $LastX = NULL; $LastY = NULL; }
- else
- { $LastX = $X; $LastY = $Y; }
- }
-
- $LastX = NULL; $LastY = NULL; $LastColor = NULL;
- foreach($PosArray as $Key => $Y)
- {
- if ( $Y != VOID && $LastY != NULL )
- {
- $Slope = ($LastY - $Y);
-
- if ( $Slope >= 0 )
- {
- $SlopeIndex = (100 / $MaxSlope) * $Slope;
- $R = (($PositiveSlopeEndR - $PositiveSlopeStartR)/100)*$SlopeIndex+$PositiveSlopeStartR;
- $G = (($PositiveSlopeEndG - $PositiveSlopeStartG)/100)*$SlopeIndex+$PositiveSlopeStartG;
- $B = (($PositiveSlopeEndB - $PositiveSlopeStartB)/100)*$SlopeIndex+$PositiveSlopeStartB;
- }
- elseif ( $Slope < 0 )
- {
- $SlopeIndex = (100 / abs($MinSlope)) * abs($Slope);
- $R = (($NegativeSlopeEndR - $NegativeSlopeStartR)/100)*$SlopeIndex+$NegativeSlopeStartR;
- $G = (($NegativeSlopeEndG - $NegativeSlopeStartG)/100)*$SlopeIndex+$NegativeSlopeStartG;
- $B = (($NegativeSlopeEndB - $NegativeSlopeStartB)/100)*$SlopeIndex+$NegativeSlopeStartB;
- }
-
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B);
-
- if ( $ShadedSlopeBox && $LastColor != NULL ) // && $Slope != 0
- {
- $GradientSettings = array("StartR"=>$LastColor["R"],"StartG"=>$LastColor["G"],"StartB"=>$LastColor["B"],"EndR"=>$R,"EndG"=>$G,"EndB"=>$B);
- $this->drawGradientArea($LastX,$TopY,$X,$BottomY,DIRECTION_HORIZONTAL,$GradientSettings);
- }
- elseif ( !$ShadedSlopeBox || $LastColor == NULL ) // || $Slope == 0
- $this->drawFilledRectangle(floor($LastX),$TopY,floor($X),$BottomY,$Color);
-
- $LastColor = $Color;
- }
-
- if ( $Y == VOID )
- { $LastY = NULL; }
- else
- { $LastX = $X; $LastY = $Y; }
-
- $X = $X + $XStep;
- }
-
- $YPos = $YPos + $CaptionHeight + $SerieSpacing;
- }
- else
- {
- if ( $Caption )
- {
- $StartY = floor($this->GraphAreaY1-$CaptionWidth+$XMargin-$CaptionMargin);
- $EndY = floor($this->GraphAreaY1-$CaptionMargin+$XMargin);
- if ( $CaptionLine )
- {
- $CaptionSettings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight);
- if ( $CaptionBox ) { $this->drawFilledRectangle($XPos,$StartY,$XPos+$CaptionHeight,$EndY,array("R"=>$CaptionFillR,"G"=>$CaptionFillG,"B"=>$CaptionFillB,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB,"Alpha"=>$CaptionFillAlpha)); }
- $this->drawLine($XPos+($CaptionHeight/2),$StartY+2,$XPos+($CaptionHeight/2),$EndY-2,$CaptionSettings);
- }
- else
- $this->drawFilledRectangle($XPos,$StartY,$XPos+$CaptionHeight,$EndY,array("R"=>$R,"G"=>$G,"B"=>$B,"BorderR"=>$CaptionBorderR,"BorderG"=>$CaptionBorderG,"BorderB"=>$CaptionBorderB));
- }
-
-
- if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
- $Y = $this->GraphAreaY1 + $XMargin;
-
- $TopX = $XPos + ($CaptionHeight/2) - ($DerivativeHeight/2);
- $BottomX = $XPos + ($CaptionHeight/2) + ($DerivativeHeight/2);
-
- $StartY = floor($this->GraphAreaY1+$XMargin);
- $EndY = floor($this->GraphAreaY2-$XMargin);
-
- if ( $DrawBackground ) { $this->drawFilledRectangle($TopX-1,$StartY-1,$BottomX+1,$EndY+1,array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha)); }
- if ( $DrawBorder ) { $this->drawRectangle($TopX-1,$StartY-1,$BottomX+1,$EndY+1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); }
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
-
- $RestoreShadow = $this->Shadow;
- $this->Shadow = FALSE;
-
- /* Determine the Max slope index */
- $LastX = NULL; $LastY = NULL; $MinSlope = 0; $MaxSlope = 1;
- foreach($PosArray as $Key => $X)
- {
- if ( $X != VOID && $LastX != NULL )
- { $Slope = ($X - $LastX); if ( $Slope > $MaxSlope ) { $MaxSlope = $Slope; } if ( $Slope < $MinSlope ) { $MinSlope = $Slope; } }
-
- if ( $X == VOID )
- { $LastX = NULL; }
- else
- { $LastX = $X; }
- }
-
- $LastX = NULL; $LastY = NULL; $LastColor = NULL;
- foreach($PosArray as $Key => $X)
- {
- if ( $X != VOID && $LastX != NULL )
- {
- $Slope = ($X - $LastX);
-
- if ( $Slope >= 0 )
- {
- $SlopeIndex = (100 / $MaxSlope) * $Slope;
- $R = (($PositiveSlopeEndR - $PositiveSlopeStartR)/100)*$SlopeIndex+$PositiveSlopeStartR;
- $G = (($PositiveSlopeEndG - $PositiveSlopeStartG)/100)*$SlopeIndex+$PositiveSlopeStartG;
- $B = (($PositiveSlopeEndB - $PositiveSlopeStartB)/100)*$SlopeIndex+$PositiveSlopeStartB;
- }
- elseif ( $Slope < 0 )
- {
- $SlopeIndex = (100 / abs($MinSlope)) * abs($Slope);
- $R = (($NegativeSlopeEndR - $NegativeSlopeStartR)/100)*$SlopeIndex+$NegativeSlopeStartR;
- $G = (($NegativeSlopeEndG - $NegativeSlopeStartG)/100)*$SlopeIndex+$NegativeSlopeStartG;
- $B = (($NegativeSlopeEndB - $NegativeSlopeStartB)/100)*$SlopeIndex+$NegativeSlopeStartB;
- }
-
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B);
-
- if ( $ShadedSlopeBox && $LastColor != NULL )
- {
- $GradientSettings = array("StartR"=>$LastColor["R"],"StartG"=>$LastColor["G"],"StartB"=>$LastColor["B"],"EndR"=>$R,"EndG"=>$G,"EndB"=>$B);
-
- $this->drawGradientArea($TopX,$LastY,$BottomX,$Y,DIRECTION_VERTICAL,$GradientSettings);
- }
- elseif ( !$ShadedSlopeBox || $LastColor == NULL )
- $this->drawFilledRectangle($TopX,floor($LastY),$BottomX,floor($Y),$Color);
-
- $LastColor = $Color;
- }
-
- if ( $X == VOID )
- { $LastX = NULL; }
- else
- { $LastX = $X; $LastY = $Y; }
-
- $Y = $Y + $XStep;
- }
-
- $XPos = $XPos + $CaptionHeight + $SerieSpacing;
- }
-
- $this->Shadow = $RestoreShadow;
- }
- }
- }
-
- /* Draw the line of best fit */
- function drawBestFit($Format="")
- {
- $OverrideTicks = isset($Format["Ticks"]) ? $Format["Ticks"] : NULL;
- $OverrideR = isset($Format["R"]) ? $Format["R"] : VOID;
- $OverrideG = isset($Format["G"]) ? $Format["G"] : VOID;
- $OverrideB = isset($Format["B"]) ? $Format["B"] : VOID;
- $OverrideAlpha = isset($Format["Alpha"]) ? $Format["Alpha"] : VOID;
-
- $Data = $this->DataSet->getData();
- list($XMargin,$XDivs) = $this->scaleGetXSettings();
-
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- {
- if ( $OverrideR != VOID && $OverrideG != VOID && $OverrideB != VOID ) { $R = $OverrideR; $G = $OverrideG; $B = $OverrideB; } else { $R = $Serie["Color"]["R"]; $G = $Serie["Color"]["G"]; $B = $Serie["Color"]["B"]; }
- if ( $OverrideTicks == NULL ) { $Ticks = $Serie["Ticks"]; } else { $Ticks = $OverrideTicks; }
- if ( $OverrideAlpha == VOID ) { $Alpha = $Serie["Color"]["Alpha"]; } else { $Alpha = $OverrideAlpha; }
-
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks);
-
- $AxisID = $Serie["Axis"];
- $PosArray = $this->scaleComputeY($Serie["Data"],array("AxisID"=>$Serie["Axis"]));
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
- $X = $this->GraphAreaX1 + $XMargin;
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- $Sxy = 0; $Sx = 0; $Sy = 0; $Sxx = 0;
- foreach($PosArray as $Key => $Y)
- {
- if ( $Y != VOID )
- {
- $Sxy = $Sxy + $X*$Y;
- $Sx = $Sx + $X;
- $Sy = $Sy + $Y;
- $Sxx = $Sxx + $X*$X;
- }
-
- $X = $X + $XStep;
- }
- $n = count($this->DataSet->stripVOID($PosArray)); //$n = count($PosArray);
- $M = (($n*$Sxy)-($Sx*$Sy)) / (($n*$Sxx)-($Sx*$Sx));
- $B = (($Sy)-($M*$Sx))/($n);
-
- $X1 = $this->GraphAreaX1 + $XMargin;
- $Y1 = $M * $X1 + $B;
- $X2 = $this->GraphAreaX2 - $XMargin;
- $Y2 = $M * $X2 + $B;
-
- if ( $Y1 < $this->GraphAreaY1 ) { $X1 = $X1 + ($this->GraphAreaY1-$Y1); $Y1 = $this->GraphAreaY1; }
- if ( $Y1 > $this->GraphAreaY2 ) { $X1 = $X1 + ($Y1-$this->GraphAreaY2); $Y1 = $this->GraphAreaY2; }
- if ( $Y2 < $this->GraphAreaY1 ) { $X2 = $X2 - ($this->GraphAreaY1-$Y2); $Y2 = $this->GraphAreaY1; }
- if ( $Y2 > $this->GraphAreaY2 ) { $X2 = $X2 - ($Y2-$this->GraphAreaY2); $Y2 = $this->GraphAreaY2; }
-
- $this->drawLine($X1,$Y1,$X2,$Y2,$Color);
- }
- else
- {
- if ( $XDivs == 0 ) { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $YStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
- $Y = $this->GraphAreaY1 + $XMargin;
-
- if ( !is_array($PosArray) ) { $Value = $PosArray; $PosArray = ""; $PosArray[0] = $Value; }
- $Sxy = 0; $Sx = 0; $Sy = 0; $Sxx = 0;
- foreach($PosArray as $Key => $X)
- {
- if ( $X != VOID )
- {
- $Sxy = $Sxy + $X*$Y;
- $Sx = $Sx + $Y;
- $Sy = $Sy + $X;
- $Sxx = $Sxx + $Y*$Y;
- }
-
- $Y = $Y + $YStep;
- }
- $n = count($this->DataSet->stripVOID($PosArray)); //$n = count($PosArray);
- $M = (($n*$Sxy)-($Sx*$Sy)) / (($n*$Sxx)-($Sx*$Sx));
- $B = (($Sy)-($M*$Sx))/($n);
-
- $Y1 = $this->GraphAreaY1 + $XMargin;
- $X1 = $M * $Y1 + $B;
- $Y2 = $this->GraphAreaY2 - $XMargin;
- $X2 = $M * $Y2 + $B;
-
- if ( $X1 < $this->GraphAreaX1 ) { $Y1 = $Y1 + ($this->GraphAreaX1-$X1); $X1 = $this->GraphAreaX1; }
- if ( $X1 > $this->GraphAreaX2 ) { $Y1 = $Y1 + ($X1-$this->GraphAreaX2); $X1 = $this->GraphAreaX2; }
- if ( $X2 < $this->GraphAreaX1 ) { $Y2 = $Y2 - ($this->GraphAreaY1-$X2); $X2 = $this->GraphAreaX1; }
- if ( $X2 > $this->GraphAreaX2 ) { $Y2 = $Y2 - ($X2-$this->GraphAreaX2); $X2 = $this->GraphAreaX2; }
-
- $this->drawLine($X1,$Y1,$X2,$Y2,$Color);
- }
- }
- }
- }
-
- /* Write labels */
- function writeLabel($SeriesName,$Indexes,$Format="")
- {
- $OverrideTitle = isset($Format["OverrideTitle"]) ? $Format["OverrideTitle"] : NULL;
- $ForceLabels = isset($Format["ForceLabels"]) ? $Format["ForceLabels"] : NULL;
- $DrawPoint = isset($Format["DrawPoint"]) ? $Format["DrawPoint"] : LABEL_POINT_BOX;
- $DrawVerticalLine = isset($Format["DrawVerticalLine"]) ? $Format["DrawVerticalLine"] : FALSE;
- $VerticalLineR = isset($Format["VerticalLineR"]) ? $Format["VerticalLineR"] : 0;
- $VerticalLineG = isset($Format["VerticalLineG"]) ? $Format["VerticalLineG"] : 0;
- $VerticalLineB = isset($Format["VerticalLineB"]) ? $Format["VerticalLineB"] : 0;
- $VerticalLineAlpha = isset($Format["VerticalLineAlpha"]) ? $Format["VerticalLineAlpha"] : 40;
- $VerticalLineTicks = isset($Format["VerticalLineTicks"]) ? $Format["VerticalLineTicks"] : 2;
-
- $Data = $this->DataSet->getData();
- list($XMargin,$XDivs) = $this->scaleGetXSettings();
-
- if ( !is_array($Indexes) ) { $Index = $Indexes; $Indexes = ""; $Indexes[] = $Index; }
- if ( !is_array($SeriesName) ) { $SerieName = $SeriesName; $SeriesName = ""; $SeriesName[] = $SerieName; }
- if ( $ForceLabels != NULL && !is_array($ForceLabels) ) { $ForceLabel = $ForceLabels; $ForceLabels = ""; $ForceLabels[] = $ForceLabel; }
-
- foreach ($Indexes as $Key => $Index)
- {
- $Series = "";
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1)/4; } else { $XStep = ($this->GraphAreaX2-$this->GraphAreaX1-$XMargin*2)/$XDivs; }
- $X = $this->GraphAreaX1 + $XMargin + $Index * $XStep;
-
- if ( $DrawVerticalLine ) { $this->drawLine($X,$this->GraphAreaY1+$Data["YMargin"],$X,$this->GraphAreaY2-$Data["YMargin"],array("R"=>$VerticalLineR,"G"=>$VerticalLineG,"B"=>$VerticalLineB,"Alpha"=>$VerticalLineAlpha,"Ticks"=>$VerticalLineTicks)); }
-
- $MinY = $this->GraphAreaY2;
- foreach ($SeriesName as $iKey => $SerieName)
- {
- if ( isset($Data["Series"][$SerieName]["Data"][$Index]) )
- {
- $AxisID = $Data["Series"][$SerieName]["Axis"];
- $XAxisMode = $Data["XAxisDisplay"];
- $XAxisFormat = $Data["XAxisFormat"];
- $XAxisUnit = $Data["XAxisUnit"];
- $AxisMode = $Data["Axis"][$AxisID]["Display"];
- $AxisFormat = $Data["Axis"][$AxisID]["Format"];
- $AxisUnit = $Data["Axis"][$AxisID]["Unit"];
-
- if ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
- $XLabel = $this->scaleFormat($Data["Series"][$Data["Abscissa"]]["Data"][$Index],$XAxisMode,$XAxisFormat,$XAxisUnit);
- else
- $XLabel = "";
-
- if ( $OverrideTitle != NULL)
- $Description = $OverrideTitle;
- elseif ( count($SeriesName) == 1 )
- {
- $Description = $Data["Series"][$SerieName]["Description"]." - ".$XLabel;
- }
- elseif ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
- $Description = $XLabel;
-
- $Serie = "";
- $Serie["R"] = $Data["Series"][$SerieName]["Color"]["R"];
- $Serie["G"] = $Data["Series"][$SerieName]["Color"]["G"];
- $Serie["B"] = $Data["Series"][$SerieName]["Color"]["B"];
- $Serie["Alpha"] = $Data["Series"][$SerieName]["Color"]["Alpha"];
-
- if ( count($SeriesName) == 1 && isset($Data["Series"][$SerieName]["XOffset"]) )
- $SerieOffset = $Data["Series"][$SerieName]["XOffset"];
- else
- $SerieOffset = 0;
-
- $Value = $Data["Series"][$SerieName]["Data"][$Index];
- if ( $Value == VOID ) { $Value = "NaN"; }
-
- if ( $ForceLabels != NULL )
- $Caption = isset($ForceLabels[$Key]) ? $ForceLabels[$Key] : "Not set";
- else
- $Caption = $this->scaleFormat($Value,$AxisMode,$AxisFormat,$AxisUnit);
-
- if ( $this->LastChartLayout == CHART_LAST_LAYOUT_STACKED )
- {
- if ( $Value >=0 ) { $LookFor = "+"; } else { $LookFor = "-"; }
-
- $Value = 0; $Done = FALSE;
- foreach($Data["Series"] as $Name => $SerieLookup)
- {
- if ( $SerieLookup["isDrawable"] == TRUE && $Name != $Data["Abscissa"] && !$Done )
- {
- if ( isset($Data["Series"][$Name]["Data"][$Index]) && $Data["Series"][$Name]["Data"][$Index] != VOID )
- {
- if ($Data["Series"][$Name]["Data"][$Index] >= 0 && $LookFor == "+" ) { $Value = $Value + $Data["Series"][$Name]["Data"][$Index]; }
- if ($Data["Series"][$Name]["Data"][$Index] < 0 && $LookFor == "-" ) { $Value = $Value - $Data["Series"][$Name]["Data"][$Index]; }
- if ($Name == $SerieName ) { $Done = TRUE; }
- }
- }
- }
- }
-
- $X = floor($this->GraphAreaX1 + $XMargin + $Index * $XStep + $SerieOffset);
- $Y = floor($this->scaleComputeY($Value,array("AxisID"=>$AxisID)));
-
- if ($Y < $MinY) { $MinY = $Y; }
-
- if ( $DrawPoint == LABEL_POINT_CIRCLE )
- $this->drawFilledCircle($X,$Y,3,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
- elseif ( $DrawPoint == LABEL_POINT_BOX )
- $this->drawFilledRectangle($X-2,$Y-2,$X+2,$Y+2,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
-
- $Series[] = array("Format"=>$Serie,"Caption"=>$Caption);
- }
- }
- $this->drawLabelBox($X,$MinY-3,$Description,$Series,$Format);
-
- }
- else
- {
- if ( $XDivs == 0 ) { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1)/4; } else { $XStep = ($this->GraphAreaY2-$this->GraphAreaY1-$XMargin*2)/$XDivs; }
- $Y = $this->GraphAreaY1 + $XMargin + $Index * $XStep;
-
- if ( $DrawVerticalLine ) { $this->drawLine($this->GraphAreaX1+$Data["YMargin"],$Y,$this->GraphAreaX2-$Data["YMargin"],$Y,array("R"=>$VerticalLineR,"G"=>$VerticalLineG,"B"=>$VerticalLineB,"Alpha"=>$VerticalLineAlpha,"Ticks"=>$VerticalLineTicks)); }
-
- $MinX = $this->GraphAreaX2;
- foreach ($SeriesName as $Key => $SerieName)
- {
- if ( isset($Data["Series"][$SerieName]["Data"][$Index]) )
- {
- $AxisID = $Data["Series"][$SerieName]["Axis"];
- $XAxisMode = $Data["XAxisDisplay"];
- $XAxisFormat = $Data["XAxisFormat"];
- $XAxisUnit = $Data["XAxisUnit"];
- $AxisMode = $Data["Axis"][$AxisID]["Display"];
- $AxisFormat = $Data["Axis"][$AxisID]["Format"];
- $AxisUnit = $Data["Axis"][$AxisID]["Unit"];
-
- if ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
- $XLabel = $this->scaleFormat($Data["Series"][$Data["Abscissa"]]["Data"][$Index],$XAxisMode,$XAxisFormat,$XAxisUnit);
- else
- $XLabel = "";
-
- if ( $OverrideTitle != NULL)
- $Description = $OverrideTitle;
- elseif ( count($SeriesName) == 1 )
- {
- if ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
- $Description = $Data["Series"][$SerieName]["Description"]." - ".$XLabel;
- }
- elseif ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
- $Description = $XLabel;
-
- $Serie = "";
- if ( isset($Data["Extended"]["Palette"][$Index] ) )
- {
- $Serie["R"] = $Data["Extended"]["Palette"][$Index]["R"];
- $Serie["G"] = $Data["Extended"]["Palette"][$Index]["G"];
- $Serie["B"] = $Data["Extended"]["Palette"][$Index]["B"];
- $Serie["Alpha"] = $Data["Extended"]["Palette"][$Index]["Alpha"];
- }
- else
- {
- $Serie["R"] = $Data["Series"][$SerieName]["Color"]["R"];
- $Serie["G"] = $Data["Series"][$SerieName]["Color"]["G"];
- $Serie["B"] = $Data["Series"][$SerieName]["Color"]["B"];
- $Serie["Alpha"] = $Data["Series"][$SerieName]["Color"]["Alpha"];
- }
-
- if ( count($SeriesName) == 1 && isset($Data["Series"][$SerieName]["XOffset"]) )
- $SerieOffset = $Data["Series"][$SerieName]["XOffset"];
- else
- $SerieOffset = 0;
-
- $Value = $Data["Series"][$SerieName]["Data"][$Index];
- if ( $ForceLabels != NULL )
- $Caption = isset($ForceLabels[$Key]) ? $ForceLabels[$Key] : "Not set";
- else
- $Caption = $this->scaleFormat($Value,$AxisMode,$AxisFormat,$AxisUnit);
- if ( $Value == VOID ) { $Value = "NaN"; }
-
- if ( $this->LastChartLayout == CHART_LAST_LAYOUT_STACKED )
- {
- if ( $Value >=0 ) { $LookFor = "+"; } else { $LookFor = "-"; }
-
- $Value = 0; $Done = FALSE;
- foreach($Data["Series"] as $Name => $SerieLookup)
- {
- if ( $SerieLookup["isDrawable"] == TRUE && $Name != $Data["Abscissa"] && !$Done )
- {
- if ( isset($Data["Series"][$Name]["Data"][$Index]) && $Data["Series"][$Name]["Data"][$Index] != VOID )
- {
- if ($Data["Series"][$Name]["Data"][$Index] >= 0 && $LookFor == "+" ) { $Value = $Value + $Data["Series"][$Name]["Data"][$Index]; }
- if ($Data["Series"][$Name]["Data"][$Index] < 0 && $LookFor == "-" ) { $Value = $Value - $Data["Series"][$Name]["Data"][$Index]; }
- if ($Name == $SerieName ) { $Done = TRUE; }
- }
- }
- }
- }
-
- $X = floor($this->scaleComputeY($Value,array("AxisID"=>$AxisID)));
- $Y = floor($this->GraphAreaY1 + $XMargin + $Index * $XStep + $SerieOffset);
-
- if ($X < $MinX) { $MinX = $X; }
-
- if ( $DrawPoint == LABEL_POINT_CIRCLE )
- $this->drawFilledCircle($X,$Y,3,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
- elseif ( $DrawPoint == LABEL_POINT_BOX )
- $this->drawFilledRectangle($X-2,$Y-2,$X+2,$Y+2,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
-
- $Series[] = array("Format"=>$Serie,"Caption"=>$Caption);
- }
- }
- $this->drawLabelBox($MinX,$Y-3,$Description,$Series,$Format);
-
- }
- }
- }
-
- /* Draw a label box */
- function drawLabelBox($X,$Y,$Title,$Captions,$Format="")
- {
- $NoTitle = isset($Format["NoTitle"]) ? $Format["NoTitle"] : NULL;
- $BoxWidth = isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 50;
- $DrawSerieColor = isset($Format["DrawSerieColor"]) ? $Format["DrawSerieColor"] : TRUE;
- $SerieR = isset($Format["SerieR"]) ? $Format["SerieR"] : NULL;
- $SerieG = isset($Format["SerieG"]) ? $Format["SerieG"] : NULL;
- $SerieB = isset($Format["SerieB"]) ? $Format["SerieB"] : NULL;
- $SerieAlpha = isset($Format["SerieAlpha"]) ? $Format["SerieAlpha"] : NULL;
- $SerieBoxSize = isset($Format["SerieBoxSize"]) ? $Format["SerieBoxSize"] : 6;
- $SerieBoxSpacing = isset($Format["SerieBoxSpacing"]) ? $Format["SerieBoxSpacing"] : 4;
- $VerticalMargin = isset($Format["VerticalMargin"]) ? $Format["VerticalMargin"] : 10;
- $HorizontalMargin = isset($Format["HorizontalMargin"]) ? $Format["HorizontalMargin"] : 8;
- $R = isset($Format["R"]) ? $Format["R"] : $this->FontColorR;
- $G = isset($Format["G"]) ? $Format["G"] : $this->FontColorG;
- $B = isset($Format["B"]) ? $Format["B"] : $this->FontColorB;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $this->FontColorA;
- $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->FontName;
- $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->FontSize;
- $TitleMode = isset($Format["TitleMode"]) ? $Format["TitleMode"] : LABEL_TITLE_NOBACKGROUND;
- $TitleR = isset($Format["TitleR"]) ? $Format["TitleR"] : $R;
- $TitleG = isset($Format["TitleG"]) ? $Format["TitleG"] : $G;
- $TitleB = isset($Format["TitleB"]) ? $Format["TitleB"] : $B;
- $TitleAlpha = isset($Format["TitleAlpha"]) ? $Format["TitleAlpha"] : 100;
- $TitleBackgroundR = isset($Format["TitleBackgroundR"]) ? $Format["TitleBackgroundR"] : 0;
- $TitleBackgroundG = isset($Format["TitleBackgroundG"]) ? $Format["TitleBackgroundG"] : 0;
- $TitleBackgroundB = isset($Format["TitleBackgroundB"]) ? $Format["TitleBackgroundB"] : 0;
- $TitleBackgroundAlpha = isset($Format["TitleBackgroundAlpha"]) ? $Format["TitleBackgroundAlpha"] : 100;
- $GradientStartR = isset($Format["GradientStartR"]) ? $Format["GradientStartR"] : 255;
- $GradientStartG = isset($Format["GradientStartG"]) ? $Format["GradientStartG"] : 255;
- $GradientStartB = isset($Format["GradientStartB"]) ? $Format["GradientStartB"] : 255;
- $GradientEndR = isset($Format["GradientEndR"]) ? $Format["GradientEndR"] : 220;
- $GradientEndG = isset($Format["GradientEndG"]) ? $Format["GradientEndG"] : 220;
- $GradientEndB = isset($Format["GradientEndB"]) ? $Format["GradientEndB"] : 220;
- $BoxAlpha = isset($Format["BoxAlpha"]) ? $Format["BoxAlpha"] : 100;
-
- if ( !$DrawSerieColor ) { $SerieBoxSize = 0; $SerieBoxSpacing = 0; }
-
- $TxtPos = $this->getTextBox($X,$Y,$FontName,$FontSize,0,$Title);
- $TitleWidth = ($TxtPos[1]["X"] - $TxtPos[0]["X"])+$VerticalMargin*2;
- $TitleHeight = ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]);
-
- if ( $NoTitle ) { $TitleWidth = 0; $TitleHeight = 0; }
-
- $CaptionWidth = 0; $CaptionHeight = -$HorizontalMargin;
- foreach($Captions as $Key =>$Caption)
- {
- $TxtPos = $this->getTextBox($X,$Y,$FontName,$FontSize,0,$Caption["Caption"]);
- $CaptionWidth = max($CaptionWidth,($TxtPos[1]["X"] - $TxtPos[0]["X"])+$VerticalMargin*2);
- $CaptionHeight = $CaptionHeight + max(($TxtPos[0]["Y"] - $TxtPos[2]["Y"]),($SerieBoxSize+2)) + $HorizontalMargin;
- }
-
- if ( $CaptionHeight <= 5 ) { $CaptionHeight = $CaptionHeight + $HorizontalMargin/2; }
-
- if ( $DrawSerieColor ) { $CaptionWidth = $CaptionWidth + $SerieBoxSize + $SerieBoxSpacing; }
-
- $BoxWidth = max($BoxWidth,$TitleWidth,$CaptionWidth);
-
- $XMin = $X - 5 - floor(($BoxWidth-10) / 2);
- $XMax = $X + 5 + floor(($BoxWidth-10) / 2);
-
- $RestoreShadow = $this->Shadow;
- if ( $this->Shadow == TRUE )
- {
- $this->Shadow = FALSE;
-
- $Poly = "";
- $Poly[] = $X+$this->ShadowX; $Poly[] = $Y+$this->ShadowX;
- $Poly[] = $X+5+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX;
- $Poly[] = $XMax+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX;
-
- if ( $NoTitle )
- {
- $Poly[] = $XMax+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2+$this->ShadowX;
- $Poly[] = $XMin+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2+$this->ShadowX;
- }
- else
- {
- $Poly[] = $XMax+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3+$this->ShadowX;
- $Poly[] = $XMin+$this->ShadowX; $Poly[] = $Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3+$this->ShadowX;
- }
-
- $Poly[] = $XMin+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX;
- $Poly[] = $X-5+$this->ShadowX; $Poly[] = $Y-5+$this->ShadowX;
- $this->drawPolygon($Poly,array("R"=>$this->ShadowR,"G"=>$this->ShadowG,"B"=>$this->ShadowB,"Alpha"=>$this->Shadowa));
- }
-
- /* Draw the background */
- $GradientSettings = array("StartR"=>$GradientStartR,"StartG"=>$GradientStartG,"StartB"=>$GradientStartB,"EndR"=>$GradientEndR,"EndG"=>$GradientEndG,"EndB"=>$GradientEndB,"Alpha"=>$BoxAlpha);
- if ( $NoTitle )
- $this->drawGradientArea($XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax,$Y-6,DIRECTION_VERTICAL,$GradientSettings);
- else
- $this->drawGradientArea($XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-6,DIRECTION_VERTICAL,$GradientSettings);
- $Poly = ""; $Poly[] = $X; $Poly[] = $Y; $Poly[] = $X-5; $Poly[] = $Y-5; $Poly[] = $X+5; $Poly[] = $Y-5;
- $this->drawPolygon($Poly,array("R"=>$GradientEndR,"G"=>$GradientEndG,"B"=>$GradientEndB,"Alpha"=>$BoxAlpha,"NoBorder"=>TRUE));
-
- /* Outer border */
- $OuterBorderColor = $this->allocateColor($this->Picture,100,100,100,$BoxAlpha);
- imageline($this->Picture,$XMin,$Y-5,$X-5,$Y-5,$OuterBorderColor);
- imageline($this->Picture,$X,$Y,$X-5,$Y-5,$OuterBorderColor);
- imageline($this->Picture,$X,$Y,$X+5,$Y-5,$OuterBorderColor);
- imageline($this->Picture,$X+5,$Y-5,$XMax,$Y-5,$OuterBorderColor);
- if ( $NoTitle )
- {
- imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMin,$Y-5,$OuterBorderColor);
- imageline($this->Picture,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax,$Y-5,$OuterBorderColor);
- imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$OuterBorderColor);
- }
- else
- {
- imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMin,$Y-5,$OuterBorderColor);
- imageline($this->Picture,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-5,$OuterBorderColor);
- imageline($this->Picture,$XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$OuterBorderColor);
- }
-
- /* Inner border */
- $InnerBorderColor = $this->allocateColor($this->Picture,255,255,255,$BoxAlpha);
- imageline($this->Picture,$XMin+1,$Y-6,$X-5,$Y-6,$InnerBorderColor);
- imageline($this->Picture,$X,$Y-1,$X-5,$Y-6,$InnerBorderColor);
- imageline($this->Picture,$X,$Y-1,$X+5,$Y-6,$InnerBorderColor);
- imageline($this->Picture,$X+5,$Y-6,$XMax-1,$Y-6,$InnerBorderColor);
- if ( $NoTitle )
- {
- imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMin+1,$Y-6,$InnerBorderColor);
- imageline($this->Picture,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax-1,$Y-6,$InnerBorderColor);
- imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*2,$InnerBorderColor);
- }
- else
- {
- imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMin+1,$Y-6,$InnerBorderColor);
- imageline($this->Picture,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax-1,$Y-6,$InnerBorderColor);
- imageline($this->Picture,$XMin+1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax-1,$Y-4-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$InnerBorderColor);
- }
-
- /* Draw the separator line */
- if ( $TitleMode == LABEL_TITLE_NOBACKGROUND && !$NoTitle )
- {
- $YPos = $Y-7-$CaptionHeight-$HorizontalMargin-$HorizontalMargin/2;
- $XMargin = $VerticalMargin / 2;
- $this->drawLine($XMin+$XMargin,$YPos+1,$XMax-$XMargin,$YPos+1,array("R"=>$GradientEndR,"G"=>$GradientEndG,"B"=>$GradientEndB,"Alpha"=>$BoxAlpha));
- $this->drawLine($XMin+$XMargin,$YPos,$XMax-$XMargin,$YPos,array("R"=>$GradientStartR,"G"=>$GradientStartG,"B"=>$GradientStartB,"Alpha"=>$BoxAlpha));
- }
- elseif ( $TitleMode == LABEL_TITLE_BACKGROUND )
- {
- $this->drawFilledRectangle($XMin,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin*3,$XMax,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin+$HorizontalMargin/2,array("R"=>$TitleBackgroundR,"G"=>$TitleBackgroundG,"B"=>$TitleBackgroundB,"Alpha"=>$BoxAlpha));
- imageline($this->Picture,$XMin+1,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin+$HorizontalMargin/2+1,$XMax-1,$Y-5-$TitleHeight-$CaptionHeight-$HorizontalMargin+$HorizontalMargin/2+1,$InnerBorderColor);
- }
-
- /* Write the description */
- if ( !$NoTitle )
- $this->drawText($XMin+$VerticalMargin,$Y-7-$CaptionHeight-$HorizontalMargin*2,$Title,array("Align"=>TEXT_ALIGN_BOTTOMLEFT,"R"=>$TitleR,"G"=>$TitleG,"B"=>$TitleB));
-
- /* Write the value */
- $YPos = $Y-5-$HorizontalMargin; $XPos = $XMin+$VerticalMargin+$SerieBoxSize+$SerieBoxSpacing;
- foreach($Captions as $Key => $Caption)
- {
- $CaptionTxt = $Caption["Caption"];
- $TxtPos = $this->getTextBox($XPos,$YPos,$FontName,$FontSize,0,$CaptionTxt);
- $CaptionHeight = ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]);
-
- /* Write the serie color if needed */
- if ( $DrawSerieColor )
- {
- $BoxSettings = array("R"=>$Caption["Format"]["R"],"G"=>$Caption["Format"]["G"],"B"=>$Caption["Format"]["B"],"Alpha"=>$Caption["Format"]["Alpha"],"BorderR"=>0,"BorderG"=>0,"BorderB"=>0);
- $this->drawFilledRectangle($XMin+$VerticalMargin,$YPos-$SerieBoxSize,$XMin+$VerticalMargin+$SerieBoxSize,$YPos,$BoxSettings);
- }
-
- $this->drawText($XPos,$YPos,$CaptionTxt,array("Align"=>TEXT_ALIGN_BOTTOMLEFT));
-
- $YPos = $YPos - $CaptionHeight - $HorizontalMargin;
- }
-
- $this->Shadow = $RestoreShadow;
- }
-
- /* Draw a basic shape */
- function drawShape($X,$Y,$Shape,$PlotSize,$PlotBorder,$BorderSize,$R,$G,$B,$Alpha,$BorderR,$BorderG,$BorderB,$BorderAlpha)
- {
- if ( $Shape == SERIE_SHAPE_FILLEDCIRCLE )
- {
- if ( $PlotBorder ) { $this->drawFilledCircle($X,$Y,$PlotSize+$BorderSize,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); }
- $this->drawFilledCircle($X,$Y,$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
- }
- elseif ( $Shape == SERIE_SHAPE_FILLEDSQUARE )
- {
- if ( $PlotBorder ) { $this->drawFilledRectangle($X-$PlotSize-$BorderSize,$Y-$PlotSize-$BorderSize,$X+$PlotSize+$BorderSize,$Y+$PlotSize+$BorderSize,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha)); }
- $this->drawFilledRectangle($X-$PlotSize,$Y-$PlotSize,$X+$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
- }
- elseif ( $Shape == SERIE_SHAPE_FILLEDTRIANGLE )
- {
- if ( $PlotBorder )
- {
- $Pos = ""; $Pos[]=$X; $Pos[]=$Y-$PlotSize-$BorderSize; $Pos[]=$X-$PlotSize-$BorderSize; $Pos[]=$Y+$PlotSize+$BorderSize; $Pos[]=$X+$PlotSize+$BorderSize; $Pos[]=$Y+$PlotSize+$BorderSize;
- $this->drawPolygon($Pos,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha));
- }
-
- $Pos = ""; $Pos[]=$X; $Pos[]=$Y-$PlotSize; $Pos[]=$X-$PlotSize; $Pos[]=$Y+$PlotSize; $Pos[]=$X+$PlotSize; $Pos[]=$Y+$PlotSize;
- $this->drawPolygon($Pos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
- }
- elseif ( $Shape == SERIE_SHAPE_TRIANGLE )
- {
- $this->drawLine($X,$Y-$PlotSize,$X-$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
- $this->drawLine($X-$PlotSize,$Y+$PlotSize,$X+$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
- $this->drawLine($X+$PlotSize,$Y+$PlotSize,$X,$Y-$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
- }
- elseif ( $Shape == SERIE_SHAPE_SQUARE )
- $this->drawRectangle($X-$PlotSize,$Y-$PlotSize,$X+$PlotSize,$Y+$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
- elseif ( $Shape == SERIE_SHAPE_CIRCLE )
- $this->drawCircle($X,$Y,$PlotSize,$PlotSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
- elseif ( $Shape == SERIE_SHAPE_DIAMOND )
- {
- $Pos = ""; $Pos[]=$X-$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y-$PlotSize; $Pos[]=$X+$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y+$PlotSize;
- $this->drawPolygon($Pos,array("NoFill"=>TRUE,"BorderR"=>$R,"BorderG"=>$G,"BorderB"=>$B,"BorderAlpha"=>$Alpha));
- }
- elseif ( $Shape == SERIE_SHAPE_FILLEDDIAMOND )
- {
- if ( $PlotBorder )
- {
- $Pos = ""; $Pos[]=$X-$PlotSize-$BorderSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y-$PlotSize-$BorderSize; $Pos[]=$X+$PlotSize+$BorderSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y+$PlotSize+$BorderSize;
- $this->drawPolygon($Pos,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha));
- }
-
- $Pos = ""; $Pos[]=$X-$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y-$PlotSize; $Pos[]=$X+$PlotSize; $Pos[]=$Y; $Pos[]=$X; $Pos[]=$Y+$PlotSize;
- $this->drawPolygon($Pos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
- }
- }
-
- function drawPolygonChart($Points,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $NoFill = isset($Format["NoFill"]) ? $Format["NoFill"] : FALSE;
- $NoBorder = isset($Format["NoBorder"]) ? $Format["NoBorder"] : FALSE;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : $R;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : $G;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : $B;
- $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : $Alpha / 2;
- $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
- $Threshold = isset($Format["Threshold"]) ? $Format["Threshold"] : NULL;
-
- if ( $Surrounding != NULL ) { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
-
- $RestoreShadow = $this->Shadow;
- $this->Shadow = FALSE;
-
- $AllIntegers = TRUE;
- for($i=0;$i<=count($Points)-2;$i=$i+2)
- { if ( $this->getFirstDecimal($Points[$i+1]) != 0 ) { $AllIntegers = FALSE; } }
-
- /* Convert polygon to segments */
- $Segments = "";
- for($i=2;$i<=count($Points)-2;$i=$i+2)
- { $Segments[] = array("X1"=>$Points[$i-2],"Y1"=>$Points[$i-1],"X2"=>$Points[$i],"Y2"=>$Points[$i+1]); }
- $Segments[] = array("X1"=>$Points[$i-2],"Y1"=>$Points[$i-1],"X2"=>$Points[0],"Y2"=>$Points[1]);
-
- /* Simplify straight lines */
- $Result = ""; $inHorizon = FALSE; $LastX = VOID;
- foreach($Segments as $Key => $Pos)
- {
- if ( $Pos["Y1"] != $Pos["Y2"] )
- {
- if ( $inHorizon ) { $inHorizon = FALSE; $Result[] = array("X1"=>$LastX,"Y1"=>$Pos["Y1"],"X2"=>$Pos["X1"],"Y2"=>$Pos["Y1"]); }
-
- $Result[] = array("X1"=>$Pos["X1"],"Y1"=>$Pos["Y1"],"X2"=>$Pos["X2"],"Y2"=>$Pos["Y2"]);
- }
- else { if ( !$inHorizon ) { $inHorizon = TRUE; $LastX = $Pos["X1"];} }
- }
- $Segments = $Result;
-
- /* Do we have something to draw */
- if ( $Segments == "" ) { return(0); }
-
- /* For segments debugging purpose */
- //foreach($Segments as $Key => $Pos)
- // echo $Pos["X1"].",".$Pos["Y1"].",".$Pos["X2"].",".$Pos["Y2"]."\r\n";
-
- /* Find out the min & max Y boundaries */
- $MinY = OUT_OF_SIGHT; $MaxY = OUT_OF_SIGHT;
- foreach($Segments as $Key => $Coords)
- {
- if ( $MinY == OUT_OF_SIGHT || $MinY > min($Coords["Y1"],$Coords["Y2"]) ) { $MinY = min($Coords["Y1"],$Coords["Y2"]); }
- if ( $MaxY == OUT_OF_SIGHT || $MaxY < max($Coords["Y1"],$Coords["Y2"]) ) { $MaxY = max($Coords["Y1"],$Coords["Y2"]); }
- }
-
- if ( $AllIntegers ) { $YStep = 1; } else { $YStep = .5; }
-
- $MinY = floor($MinY); $MaxY = floor($MaxY);
-
- /* Scan each Y lines */
- $DefaultColor = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
- $DebugLine = 0; $DebugColor = $this->allocateColor($this->Picture,255,0,0,100);
-
- $MinY = floor($MinY); $MaxY = floor($MaxY); $YStep = 1;
-
- if ( !$NoFill )
- {
- //if ( $DebugLine ) { $MinY = $DebugLine; $MaxY = $DebugLine; }
- for($Y=$MinY;$Y<=$MaxY;$Y=$Y+$YStep)
- {
- $Intersections = ""; $LastSlope = NULL; $RestoreLast = "-";
- foreach($Segments as $Key => $Coords)
- {
- $X1 = $Coords["X1"]; $X2 = $Coords["X2"]; $Y1 = $Coords["Y1"]; $Y2 = $Coords["Y2"];
-
- if ( min($Y1,$Y2) <= $Y && max($Y1,$Y2) >= $Y )
- {
- if ( $Y1 == $Y2 )
- { $X = $X1; }
- else
- { $X = $X1 + ( ($Y-$Y1)*$X2 - ($Y-$Y1)*$X1 ) / ($Y2-$Y1); }
-
- $X = floor($X);
-
- if ( $X2 == $X1 )
- { $Slope = "!"; }
- else
- {
- $SlopeC = ($Y2 - $Y1) / ($X2 - $X1);
- if( $SlopeC == 0 )
- { $Slope = "="; }
- elseif( $SlopeC > 0 )
- { $Slope = "+"; }
- elseif ( $SlopeC < 0 )
- { $Slope = "-"; }
- }
-
- if ( !is_array($Intersections) )
- { $Intersections[] = $X; }
- elseif( !in_array($X,$Intersections) )
- { $Intersections[] = $X; }
- elseif( in_array($X,$Intersections) )
- {
- if ($Y == $DebugLine) { echo $Slope."/".$LastSlope."(".$X.") "; }
-
- if ( $Slope == "=" && $LastSlope == "-" ) { $Intersections[] = $X; }
- if ( $Slope != $LastSlope && $LastSlope != "!" && $LastSlope != "=" ) { $Intersections[] = $X; }
- if ( $Slope != $LastSlope && $LastSlope == "!" && $Slope == "+" ) { $Intersections[] = $X; }
- }
-
- if ( is_array($Intersections) && in_array($X,$Intersections) && $LastSlope == "=" && ($Slope == "-" )) { $Intersections[] = $X; }
-
- $LastSlope = $Slope;
- }
- }
- if ( $RestoreLast != "-" ) { $Intersections[] = $RestoreLast; echo "@".$Y."\r\n"; }
-
- if ( is_array($Intersections) )
- {
- sort($Intersections);
-
- if ($Y == $DebugLine) { print_r($Intersections); }
-
- /* Remove NULL plots */
- $Result = "";
- for($i=0;$i<=count($Intersections)-1;$i=$i+2)
- {
- if ( isset($Intersections[$i+1]) )
- { if ( $Intersections[$i] != $Intersections[$i+1] ) { $Result[] = $Intersections[$i]; $Result[] = $Intersections[$i+1]; } }
- }
-
- if ( is_array($Result) )
- {
- $Intersections = $Result;
-
- $LastX = OUT_OF_SIGHT;
- foreach($Intersections as $Key => $X)
- {
- if ( $LastX == OUT_OF_SIGHT )
- $LastX = $X;
- elseif ( $LastX != OUT_OF_SIGHT )
- {
- if ( $this->getFirstDecimal($LastX) > 1 ) { $LastX++; }
-
- $Color = $DefaultColor;
- if ( $Threshold != NULL )
- {
- foreach($Threshold as $Key => $Parameters)
- {
- if ( $Y <= $Parameters["MinX"] && $Y >= $Parameters["MaxX"])
- {
- if ( isset($Parameters["R"]) ) { $R = $Parameters["R"]; } else { $R = 0; }
- if ( isset($Parameters["G"]) ) { $G = $Parameters["G"]; } else { $G = 0; }
- if ( isset($Parameters["B"]) ) { $B = $Parameters["B"]; } else { $B = 0; }
- if ( isset($Parameters["Alpha"]) ) { $Alpha = $Parameters["Alpha"]; } else { $Alpha = 100; }
- $Color = $this->allocateColor($this->Picture,$R,$G,$B,$Alpha);
- }
- }
- }
-
- imageline($this->Picture,$LastX,$Y,$X,$Y,$Color);
-
- if ( $Y == $DebugLine) { imageline($this->Picture,$LastX,$Y,$X,$Y,$DebugColor); }
-
- $LastX = OUT_OF_SIGHT;
- }
- }
- }
- }
- }
- }
-
- /* Draw the polygon border, if required */
- if ( !$NoBorder)
- {
- foreach($Segments as $Key => $Coords)
- $this->drawLine($Coords["X1"],$Coords["Y1"],$Coords["X2"],$Coords["Y2"],array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Threshold"=>$Threshold));
- }
-
- $this->Shadow = $RestoreShadow;
- }
-
- /* Return the abscissa margin */
- function getAbscissaMargin($Data)
- {
- foreach($Data["Axis"] as $AxisID => $Values) { if ( $Values["Identity"] == AXIS_X ) { return($Values["Margin"]); } }
- return(0);
- }
-
- }
-?> \ No newline at end of file
diff --git a/libs/pChart/class/pImage.class.php b/libs/pChart/class/pImage.class.php
deleted file mode 100755
index 562dd08922..0000000000
--- a/libs/pChart/class/pImage.class.php
+++ /dev/null
@@ -1,482 +0,0 @@
-<?php
- /*
- pDraw - pChart core class
-
- Version : 2.1.4
- Made by : Jean-Damien POGOLOTTI
- Last Update : 19/01/2014
-
- This file can be distributed under the license you can find at :
-
- http://www.pchart.net/license
-
- You can find the whole class documentation on the pChart web site.
- */
-
- /* The GD extension is mandatory */
- if (!extension_loaded('gd') && !extension_loaded('gd2'))
- {
- echo "GD extension must be loaded. \r\n";
- exit();
- }
-
- /* Image map handling */
- define("IMAGE_MAP_STORAGE_FILE" , 680001);
- define("IMAGE_MAP_STORAGE_SESSION" , 680002);
-
- /* Last generated chart layout */
- define("CHART_LAST_LAYOUT_REGULAR" , 680011);
- define("CHART_LAST_LAYOUT_STACKED" , 680012);
-
- /* ImageMap string delimiter */
- define("IMAGE_MAP_DELIMITER" , chr(1));
-
- class pImage extends pDraw
- {
- /* Image settings, size, quality, .. */
- var $XSize = NULL; // Width of the picture
- var $YSize = NULL; // Height of the picture
- var $Picture = NULL; // GD picture object
- var $Antialias = TRUE; // Turn antialias on or off
- var $AntialiasQuality = 0; // Quality of the antialiasing implementation (0-1)
- var $Mask = ""; // Already drawn pixels mask (Filled circle implementation)
- var $TransparentBackground = FALSE; // Just to know if we need to flush the alpha channels when rendering
-
- /* Graph area settings */
- var $GraphAreaX1 = NULL; // Graph area X origin
- var $GraphAreaY1 = NULL; // Graph area Y origin
- var $GraphAreaX2 = NULL; // Graph area bottom right X position
- var $GraphAreaY2 = NULL; // Graph area bottom right Y position
-
- /* Scale settings */
- var $ScaleMinDivHeight = 20; // Minimum height for scame divs
-
- /* Font properties */
- var $FontName = "fonts/GeosansLight.ttf"; // Default font file
- var $FontSize = 12; // Default font size
- var $FontBox = NULL; // Return the bounding box of the last written string
- var $FontColorR = 0; // Default color settings
- var $FontColorG = 0; // Default color settings
- var $FontColorB = 0; // Default color settings
- var $FontColorA = 100; // Default transparency
-
- /* Shadow properties */
- var $Shadow = FALSE; // Turn shadows on or off
- var $ShadowX = NULL; // X Offset of the shadow
- var $ShadowY = NULL; // Y Offset of the shadow
- var $ShadowR = NULL; // R component of the shadow
- var $ShadowG = NULL; // G component of the shadow
- var $ShadowB = NULL; // B component of the shadow
- var $Shadowa = NULL; // Alpha level of the shadow
-
- /* Image map */
- var $ImageMap = NULL; // Aray containing the image map
- var $ImageMapIndex = "pChart"; // Name of the session array
- var $ImageMapStorageMode = NULL; // Save the current imagemap storage mode
- var $ImageMapAutoDelete = TRUE; // Automatic deletion of the image map temp files
-
- /* Data Set */
- var $DataSet = NULL; // Attached dataset
-
- /* Last generated chart info */
- var $LastChartLayout = CHART_LAST_LAYOUT_REGULAR; // Last layout : regular or stacked
-
- /* Class constructor */
- function __construct($XSize,$YSize,$DataSet=NULL,$TransparentBackground=FALSE)
- {
- $this->TransparentBackground = $TransparentBackground;
-
- if ( $DataSet != NULL ) { $this->DataSet = $DataSet; }
-
- $this->XSize = $XSize;
- $this->YSize = $YSize;
- $this->Picture = imagecreatetruecolor($XSize,$YSize);
-
- if ( $this->TransparentBackground )
- {
- imagealphablending($this->Picture,FALSE);
- imagefilledrectangle($this->Picture, 0,0,$XSize, $YSize, imagecolorallocatealpha($this->Picture, 255, 255, 255, 127));
- imagealphablending($this->Picture,TRUE);
- imagesavealpha($this->Picture,true);
- }
- else
- {
- $C_White = $this->AllocateColor($this->Picture,255,255,255);
- imagefilledrectangle($this->Picture,0,0,$XSize,$YSize,$C_White);
- }
- }
-
- /* Enable / Disable and set shadow properties */
- function setShadow($Enabled=TRUE,$Format="")
- {
- $X = isset($Format["X"]) ? $Format["X"] : 2;
- $Y = isset($Format["Y"]) ? $Format["Y"] : 2;
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 10;
-
- $this->Shadow = $Enabled;
- $this->ShadowX = $X;
- $this->ShadowY = $Y;
- $this->ShadowR = $R;
- $this->ShadowG = $G;
- $this->ShadowB = $B;
- $this->Shadowa = $Alpha;
- }
-
- /* Set the graph area position */
- function setGraphArea($X1,$Y1,$X2,$Y2)
- {
- if ( $X2 < $X1 || $X1 == $X2 || $Y2 < $Y1 || $Y1 == $Y2 ) { return(-1); }
-
- $this->GraphAreaX1 = $X1; $this->DataSet->Data["GraphArea"]["X1"] = $X1;
- $this->GraphAreaY1 = $Y1; $this->DataSet->Data["GraphArea"]["Y1"] = $Y1;
- $this->GraphAreaX2 = $X2; $this->DataSet->Data["GraphArea"]["X2"] = $X2;
- $this->GraphAreaY2 = $Y2; $this->DataSet->Data["GraphArea"]["Y2"] = $Y2;
- }
-
- /* Return the width of the picture */
- function getWidth()
- { return($this->XSize); }
-
- /* Return the heigth of the picture */
- function getHeight()
- { return($this->YSize); }
-
- /* Render the picture to a file */
- function render($FileName)
- {
- if ( $this->TransparentBackground ) { imagealphablending($this->Picture,false); imagesavealpha($this->Picture,true); }
- imagepng($this->Picture,$FileName);
- }
-
- /* Render the picture to a web browser stream */
- function stroke($BrowserExpire=FALSE)
- {
- if ( $this->TransparentBackground ) { imagealphablending($this->Picture,false); imagesavealpha($this->Picture,true); }
-
- if ( $BrowserExpire )
- {
- header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
- header("Cache-Control: no-cache");
- header("Pragma: no-cache");
- }
-
- header('Content-type: image/png');
- imagepng($this->Picture);
- }
-
- /* Automatic output method based on the calling interface */
- function autoOutput($FileName="output.png")
- {
- if (php_sapi_name() == "cli")
- $this->Render($FileName);
- else
- $this->Stroke();
- }
-
- /* Return the length between two points */
- function getLength($X1,$Y1,$X2,$Y2)
- { return(sqrt(pow(max($X1,$X2)-min($X1,$X2),2)+pow(max($Y1,$Y2)-min($Y1,$Y2),2))); }
-
- /* Return the orientation of a line */
- function getAngle($X1,$Y1,$X2,$Y2)
- {
- $Opposite = $Y2 - $Y1; $Adjacent = $X2 - $X1;$Angle = rad2deg(atan2($Opposite,$Adjacent));
- if ($Angle > 0) { return($Angle); } else { return(360-abs($Angle)); }
- }
-
- /* Return the surrounding box of text area */
- function getTextBox_deprecated($X,$Y,$FontName,$FontSize,$Angle,$Text)
- {
- $Size = imagettfbbox($FontSize,$Angle,$FontName,$this->getEncodedText($Text));
- $Width = $this->getLength($Size[0],$Size[1],$Size[2],$Size[3])+1;
- $Height = $this->getLength($Size[2],$Size[3],$Size[4],$Size[5])+1;
-
- $RealPos[0]["X"] = $X; $RealPos[0]["Y"] = $Y;
- $RealPos[1]["X"] = cos((360-$Angle)*PI/180)*$Width + $RealPos[0]["X"]; $RealPos[1]["Y"] = sin((360-$Angle)*PI/180)*$Width + $RealPos[0]["Y"];
- $RealPos[2]["X"] = cos((270-$Angle)*PI/180)*$Height + $RealPos[1]["X"]; $RealPos[2]["Y"] = sin((270-$Angle)*PI/180)*$Height + $RealPos[1]["Y"];
- $RealPos[3]["X"] = cos((180-$Angle)*PI/180)*$Width + $RealPos[2]["X"]; $RealPos[3]["Y"] = sin((180-$Angle)*PI/180)*$Width + $RealPos[2]["Y"];
-
- $RealPos[TEXT_ALIGN_BOTTOMLEFT]["X"] = $RealPos[0]["X"]; $RealPos[TEXT_ALIGN_BOTTOMLEFT]["Y"] = $RealPos[0]["Y"];
- $RealPos[TEXT_ALIGN_BOTTOMRIGHT]["X"] = $RealPos[1]["X"]; $RealPos[TEXT_ALIGN_BOTTOMRIGHT]["Y"] = $RealPos[1]["Y"];
-
- return($RealPos);
- }
-
- function getEncodedText($text)
- {
- $gdinfo = gd_info();
- if (!empty($gdinfo['JIS-mapped Japanese Font Support'])) {
- return mb_convert_encoding($text, "SJIS", "UTF-8");
- }
-
- return $text;
- }
-
- /* Return the surrounding box of text area */
- function getTextBox($X,$Y,$FontName,$FontSize,$Angle,$Text)
- {
- $coords = imagettfbbox($FontSize, 0, $FontName, $this->getEncodedText($Text));
-
- $a = deg2rad($Angle); $ca = cos($a); $sa = sin($a); $RealPos = array();
- for($i = 0; $i < 7; $i += 2)
- {
- $RealPos[$i/2]["X"] = $X + round($coords[$i] * $ca + $coords[$i+1] * $sa);
- $RealPos[$i/2]["Y"] = $Y + round($coords[$i+1] * $ca - $coords[$i] * $sa);
- }
-
- $RealPos[TEXT_ALIGN_BOTTOMLEFT]["X"] = $RealPos[0]["X"]; $RealPos[TEXT_ALIGN_BOTTOMLEFT]["Y"] = $RealPos[0]["Y"];
- $RealPos[TEXT_ALIGN_BOTTOMRIGHT]["X"] = $RealPos[1]["X"]; $RealPos[TEXT_ALIGN_BOTTOMRIGHT]["Y"] = $RealPos[1]["Y"];
- $RealPos[TEXT_ALIGN_TOPLEFT]["X"] = $RealPos[3]["X"]; $RealPos[TEXT_ALIGN_TOPLEFT]["Y"] = $RealPos[3]["Y"];
- $RealPos[TEXT_ALIGN_TOPRIGHT]["X"] = $RealPos[2]["X"]; $RealPos[TEXT_ALIGN_TOPRIGHT]["Y"] = $RealPos[2]["Y"];
- $RealPos[TEXT_ALIGN_BOTTOMMIDDLE]["X"] = ($RealPos[1]["X"]-$RealPos[0]["X"])/2+$RealPos[0]["X"]; $RealPos[TEXT_ALIGN_BOTTOMMIDDLE]["Y"] = ($RealPos[0]["Y"]-$RealPos[1]["Y"])/2+$RealPos[1]["Y"];
- $RealPos[TEXT_ALIGN_TOPMIDDLE]["X"] = ($RealPos[2]["X"]-$RealPos[3]["X"])/2+$RealPos[3]["X"]; $RealPos[TEXT_ALIGN_TOPMIDDLE]["Y"] = ($RealPos[3]["Y"]-$RealPos[2]["Y"])/2+$RealPos[2]["Y"];
- $RealPos[TEXT_ALIGN_MIDDLELEFT]["X"] = ($RealPos[0]["X"]-$RealPos[3]["X"])/2+$RealPos[3]["X"]; $RealPos[TEXT_ALIGN_MIDDLELEFT]["Y"] = ($RealPos[0]["Y"]-$RealPos[3]["Y"])/2+$RealPos[3]["Y"];
- $RealPos[TEXT_ALIGN_MIDDLERIGHT]["X"] = ($RealPos[1]["X"]-$RealPos[2]["X"])/2+$RealPos[2]["X"]; $RealPos[TEXT_ALIGN_MIDDLERIGHT]["Y"] = ($RealPos[1]["Y"]-$RealPos[2]["Y"])/2+$RealPos[2]["Y"];
- $RealPos[TEXT_ALIGN_MIDDLEMIDDLE]["X"] = ($RealPos[1]["X"]-$RealPos[3]["X"])/2+$RealPos[3]["X"]; $RealPos[TEXT_ALIGN_MIDDLEMIDDLE]["Y"] = ($RealPos[0]["Y"]-$RealPos[2]["Y"])/2+$RealPos[2]["Y"];
-
- return($RealPos);
- }
-
- /* Set current font properties */
- function setFontProperties($Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : -1;
- $G = isset($Format["G"]) ? $Format["G"] : -1;
- $B = isset($Format["B"]) ? $Format["B"] : -1;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $FontName = isset($Format["FontName"]) ? $Format["FontName"] : NULL;
- $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : NULL;
-
- if ( $R != -1) { $this->FontColorR = $R; }
- if ( $G != -1) { $this->FontColorG = $G; }
- if ( $B != -1) { $this->FontColorB = $B; }
- if ( $Alpha != NULL) { $this->FontColorA = $Alpha; }
-
- if ( $FontName != NULL )
- $this->FontName = $FontName;
-
- if ( $FontSize != NULL )
- $this->FontSize = $FontSize;
- }
-
- /* Returns the 1st decimal values (used to correct AA bugs) */
- function getFirstDecimal($Value)
- {
- $Values = preg_split("/\./",$Value);
- if ( isset($Values[1]) ) { return(substr($Values[1],0,1)); } else { return(0); }
- }
-
- /* Attach a dataset to your pChart Object */
- function setDataSet(&$DataSet)
- { $this->DataSet = $DataSet; }
-
- /* Print attached dataset contents to STDOUT */
- function printDataSet()
- { print_r($this->DataSet); }
-
- /* Initialise the image map methods */
- function initialiseImageMap($Name="pChart",$StorageMode=IMAGE_MAP_STORAGE_SESSION,$UniqueID="imageMap",$StorageFolder="tmp")
- {
- $this->ImageMapIndex = $Name;
- $this->ImageMapStorageMode = $StorageMode;
-
- if ($StorageMode == IMAGE_MAP_STORAGE_SESSION)
- {
- if(!isset($_SESSION)) { session_start(); }
- $_SESSION[$this->ImageMapIndex] = NULL;
- }
- elseif($StorageMode == IMAGE_MAP_STORAGE_FILE)
- {
- $this->ImageMapFileName = $UniqueID;
- $this->ImageMapStorageFolder = $StorageFolder;
-
- if (file_exists($StorageFolder."/".$UniqueID.".map")) { unlink($StorageFolder."/".$UniqueID.".map"); }
- }
- }
-
- /* Add a zone to the image map */
- function addToImageMap($Type,$Plots,$Color=NULL,$Title=NULL,$Message=NULL,$HTMLEncode=FALSE)
- {
- if ( $this->ImageMapStorageMode == NULL ) { $this->initialiseImageMap(); }
-
- /* Encode the characters in the imagemap in HTML standards */
- $Title = str_replace("&#8364;","\u20AC",$Title);
- $Title = htmlentities($Title,ENT_QUOTES,"ISO-8859-15");
- if ( $HTMLEncode )
- {
- $Message = htmlentities($Message,ENT_QUOTES,"ISO-8859-15");
- $Message = str_replace("&lt;","<",$Message);
- $Message = str_replace("&gt;",">",$Message);
- }
-
- if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION )
- {
- if(!isset($_SESSION)) { $this->initialiseImageMap(); }
- $_SESSION[$this->ImageMapIndex][] = array($Type,$Plots,$Color,$Title,$Message);
- }
- elseif($this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE)
- {
- $Handle = fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", 'a');
- fwrite($Handle, $Type.IMAGE_MAP_DELIMITER.$Plots.IMAGE_MAP_DELIMITER.$Color.IMAGE_MAP_DELIMITER.$Title.IMAGE_MAP_DELIMITER.$Message."\r\n");
- fclose($Handle);
- }
- }
-
- /* Remove VOID values from an imagemap custom values array */
- function removeVOIDFromArray($SerieName, $Values)
- {
- if ( !isset($this->DataSet->Data["Series"][$SerieName]) ) { return(-1); }
-
- $Result = "";
- foreach($this->DataSet->Data["Series"][$SerieName]["Data"] as $Key => $Value)
- { if ( $Value != VOID && isset($Values[$Key]) ) { $Result[] = $Values[$Key]; } }
- return($Result);
- }
-
- /* Replace the title of one image map serie */
- function replaceImageMapTitle($OldTitle, $NewTitle)
- {
- if ( $this->ImageMapStorageMode == NULL ) { return(-1); }
-
- if ( is_array($NewTitle) ) { $NewTitle = $this->removeVOIDFromArray($OldTitle, $NewTitle); }
-
- if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION )
- {
- if(!isset($_SESSION)) { return(-1); }
- if ( is_array($NewTitle) )
- { $ID = 0; foreach($_SESSION[$this->ImageMapIndex] as $Key => $Settings) { if ( $Settings[3] == $OldTitle && isset($NewTitle[$ID])) { $_SESSION[$this->ImageMapIndex][$Key][3] = $NewTitle[$ID]; $ID++; } } }
- else
- { foreach($_SESSION[$this->ImageMapIndex] as $Key => $Settings) { if ( $Settings[3] == $OldTitle ) { $_SESSION[$this->ImageMapIndex][$Key][3] = $NewTitle; } } }
- }
- elseif( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE )
- {
- $TempArray = "";
- $Handle = @fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", "r");
- if ($Handle)
- {
- while (($Buffer = fgets($Handle, 4096)) !== false)
- {
- $Fields = preg_split("/".IMAGE_MAP_DELIMITER."/",str_replace(array(chr(10),chr(13)),"",$Buffer));
- $TempArray[] = array($Fields[0],$Fields[1],$Fields[2],$Fields[3],$Fields[4]);
- }
- fclose($Handle);
-
- if ( is_array($NewTitle) )
- { $ID = 0; foreach($TempArray as $Key => $Settings) { if ( $Settings[3] == $OldTitle && isset($NewTitle[$ID]) ) { $TempArray[$Key][3] = $NewTitle[$ID]; $ID++; } } }
- else
- { foreach($TempArray as $Key => $Settings) { if ( $Settings[3] == $OldTitle ) { $TempArray[$Key][3] = $NewTitle; } } }
-
- $Handle = fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", 'w');
- foreach($TempArray as $Key => $Settings)
- { fwrite($Handle, $Settings[0].IMAGE_MAP_DELIMITER.$Settings[1].IMAGE_MAP_DELIMITER.$Settings[2].IMAGE_MAP_DELIMITER.$Settings[3].IMAGE_MAP_DELIMITER.$Settings[4]."\r\n"); }
- fclose($Handle);
- }
- }
- }
-
- /* Replace the values of the image map contents */
- function replaceImageMapValues($Title, $Values)
- {
- if ( $this->ImageMapStorageMode == NULL ) { return(-1); }
-
- $Values = $this->removeVOIDFromArray($Title, $Values);
- $ID = 0;
- if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION )
- {
- if(!isset($_SESSION)) { return(-1); }
- foreach($_SESSION[$this->ImageMapIndex] as $Key => $Settings) { if ( $Settings[3] == $Title ) { if ( isset($Values[$ID]) ) { $_SESSION[$this->ImageMapIndex][$Key][4] = $Values[$ID]; } $ID++; } }
- }
- elseif( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE )
- {
- $TempArray = "";
- $Handle = @fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", "r");
- if ($Handle)
- {
- while (($Buffer = fgets($Handle, 4096)) !== false)
- {
- $Fields = preg_split("/".IMAGE_MAP_DELIMITER."/",str_replace(array(chr(10),chr(13)),"",$Buffer));
- $TempArray[] = array($Fields[0],$Fields[1],$Fields[2],$Fields[3],$Fields[4]);
- }
- fclose($Handle);
-
- foreach($TempArray as $Key => $Settings) { if ( $Settings[3] == $Title ) { if ( isset($Values[$ID]) ) { $TempArray[$Key][4] = $Values[$ID]; } $ID++; } }
-
- $Handle = fopen($this->ImageMapStorageFolder."/".$this->ImageMapFileName.".map", 'w');
- foreach($TempArray as $Key => $Settings)
- { fwrite($Handle, $Settings[0].IMAGE_MAP_DELIMITER.$Settings[1].IMAGE_MAP_DELIMITER.$Settings[2].IMAGE_MAP_DELIMITER.$Settings[3].IMAGE_MAP_DELIMITER.$Settings[4]."\r\n"); }
- fclose($Handle);
- }
- }
- }
-
- /* Dump the image map */
- function dumpImageMap($Name="pChart",$StorageMode=IMAGE_MAP_STORAGE_SESSION,$UniqueID="imageMap",$StorageFolder="tmp")
- {
- $this->ImageMapIndex = $Name;
- $this->ImageMapStorageMode = $StorageMode;
-
- if ( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_SESSION )
- {
- if(!isset($_SESSION)) { session_start(); }
- if ( $_SESSION[$Name] != NULL )
- {
- foreach($_SESSION[$Name] as $Key => $Params)
- { echo $Params[0].IMAGE_MAP_DELIMITER.$Params[1].IMAGE_MAP_DELIMITER.$Params[2].IMAGE_MAP_DELIMITER.$Params[3].IMAGE_MAP_DELIMITER.$Params[4]."\r\n"; }
- }
- }
- elseif( $this->ImageMapStorageMode == IMAGE_MAP_STORAGE_FILE )
- {
- if (file_exists($StorageFolder."/".$UniqueID.".map"))
- {
- $Handle = @fopen($StorageFolder."/".$UniqueID.".map", "r");
- if ($Handle) { while (($Buffer = fgets($Handle, 4096)) !== false) { echo $Buffer; } }
- fclose($Handle);
-
- if ( $this->ImageMapAutoDelete ) { unlink($StorageFolder."/".$UniqueID.".map"); }
- }
- }
-
- /* When the image map is returned to the client, the script ends */
- exit();
- }
-
- /* Return the HTML converted color from the RGB composite values */
- function toHTMLColor($R,$G,$B)
- {
- $R=intval($R); $G=intval($G); $B=intval($B);
- $R=dechex($R<0?0:($R>255?255:$R)); $G=dechex($G<0?0:($G>255?255:$G));$B=dechex($B<0?0:($B>255?255:$B));
- $Color="#".(strlen($R) < 2?'0':'').$R; $Color.=(strlen($G) < 2?'0':'').$G; $Color.= (strlen($B) < 2?'0':'').$B;
- return($Color);
- }
-
- /* Reverse an array of points */
- function reversePlots($Plots)
- {
- $Result = "";
- for($i=count($Plots)-2;$i>=0;$i=$i-2) { $Result[] = $Plots[$i]; $Result[] = $Plots[$i+1]; }
- return($Result);
- }
-
- /* Mirror Effect */
- function drawAreaMirror($X,$Y,$Width,$Height,$Format="")
- {
- $StartAlpha = isset($Format["StartAlpha"]) ? $Format["StartAlpha"] : 80;
- $EndAlpha = isset($Format["EndAlpha"]) ? $Format["EndAlpha"] : 0;
-
- $AlphaStep = ($StartAlpha-$EndAlpha)/$Height;
-
- $Picture = imagecreatetruecolor($this->XSize,$this->YSize);
- imagecopy($Picture,$this->Picture,0,0,0,0,$this->XSize,$this->YSize);
-
- for($i=1;$i<=$Height;$i++)
- {
- if ( $Y+($i-1) < $this->YSize && $Y-$i > 0 ) { imagecopymerge($Picture,$this->Picture,$X,$Y+($i-1),$X,$Y-$i,$Width,1,$StartAlpha-$AlphaStep*$i); }
- }
-
- imagecopy($this->Picture,$Picture,0,0,0,0,$this->XSize,$this->YSize);
- }
- }
-?> \ No newline at end of file
diff --git a/libs/pChart/class/pPie.class.php b/libs/pChart/class/pPie.class.php
deleted file mode 100755
index 845f81ca98..0000000000
--- a/libs/pChart/class/pPie.class.php
+++ /dev/null
@@ -1,1500 +0,0 @@
-<?php
- /*
- pPie - class to draw pie charts
-
- Version : 2.1.4
- Made by : Jean-Damien POGOLOTTI
- Last Update : 19/01/2014
-
- This file can be distributed under the license you can find at :
-
- http://www.pchart.net/license
-
- You can find the whole class documentation on the pChart web site.
- */
-
- /* Class return codes */
- define("PIE_NO_ABSCISSA" , 140001);
- define("PIE_NO_DATASERIE" , 140002);
- define("PIE_SUMISNULL" , 140003);
- define("PIE_RENDERED" , 140000);
-
- define("PIE_LABEL_COLOR_AUTO" , 140010);
- define("PIE_LABEL_COLOR_MANUAL", 140011);
-
- define("PIE_VALUE_NATURAL" , 140020);
- define("PIE_VALUE_PERCENTAGE" , 140021);
-
- define("PIE_VALUE_INSIDE" , 140030);
- define("PIE_VALUE_OUTSIDE" , 140031);
-
- /* pPie class definition */
- class pPie
- {
- var $pChartObject;
- var $pDataObject;
- var $LabelPos = "" ;
-
- /* Class creator */
- function __construct($Object,$pDataObject)
- {
- /* Cache the pChart object reference */
- $this->pChartObject = $Object;
-
- /* Cache the pData object reference */
- $this->pDataObject = $pDataObject;
- }
-
- /* Draw a pie chart */
- function draw2DPie($X,$Y,$Format="")
- {
- $Radius = isset($Format["Radius"]) ? $Format["Radius"] : 60;
- $Precision = isset($Format["Precision"]) ? $Format["Precision"] : 0;
- $DataGapAngle = isset($Format["DataGapAngle"]) ? $Format["DataGapAngle"] : 0;
- $DataGapRadius = isset($Format["DataGapRadius"]) ? $Format["DataGapRadius"] : 0;
- $SecondPass = isset($Format["SecondPass"]) ? $Format["SecondPass"] : TRUE;
- $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 255;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 255;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 255;
- $Shadow = isset($Format["Shadow"]) ? $Format["Shadow"] : FALSE;
- $DrawLabels = isset($Format["DrawLabels"]) ? $Format["DrawLabels"] : FALSE;
- $LabelStacked = isset($Format["LabelStacked"]) ? $Format["LabelStacked"] : FALSE;
- $LabelColor = isset($Format["LabelColor"]) ? $Format["LabelColor"] : PIE_LABEL_COLOR_MANUAL;
- $LabelR = isset($Format["LabelR"]) ? $Format["LabelR"] : 0;
- $LabelG = isset($Format["LabelG"]) ? $Format["LabelG"] : 0;
- $LabelB = isset($Format["LabelB"]) ? $Format["LabelB"] : 0;
- $LabelAlpha = isset($Format["LabelAlpha"]) ? $Format["LabelAlpha"] : 100;
- $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : NULL;
- $ValuePosition = isset($Format["ValuePosition"]) ? $Format["ValuePosition"] : PIE_VALUE_OUTSIDE;
- $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 15;
- $ValueSuffix = isset($Format["ValueSuffix"]) ? $Format["ValueSuffix"] : "";
- $ValueR = isset($Format["ValueR"]) ? $Format["ValueR"] : 255;
- $ValueG = isset($Format["ValueG"]) ? $Format["ValueG"] : 255;
- $ValueB = isset($Format["ValueB"]) ? $Format["ValueB"] : 255;
- $ValueAlpha = isset($Format["ValueAlpha"]) ? $Format["ValueAlpha"] : 100;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
-
- /* Data Processing */
- $Data = $this->pDataObject->getData();
- $Palette = $this->pDataObject->getPalette();
-
- /* Do we have an abscissa serie defined? */
- if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); }
-
- /* Try to find the data serie */
- $DataSerie = "";
- foreach ($Data["Series"] as $SerieName => $SerieData)
- { if ( $SerieName != $Data["Abscissa"]) { $DataSerie = $SerieName; } }
-
- /* Do we have data to compute? */
- if ( $DataSerie == "" ) { return(PIE_NO_DATASERIE); }
-
- /* Remove unused data */
- list($Data,$Palette) = $this->clean0Values($Data,$Palette,$DataSerie,$Data["Abscissa"]);
-
- /* Compute the pie sum */
- $SerieSum = $this->pDataObject->getSum($DataSerie);
-
- /* Do we have data to draw? */
- if ( $SerieSum == 0 ) { return(PIE_SUMISNULL); }
-
- /* Dump the real number of data to draw */
- $Values = "";
- foreach ($Data["Series"][$DataSerie]["Data"] as $Key => $Value)
- { if ($Value != 0) { $Values[] = $Value; } }
-
- /* Compute the wasted angular space between series */
- if (count($Values)==1) { $WastedAngular = 0; } else { $WastedAngular = count($Values) * $DataGapAngle; }
-
- /* Compute the scale */
- $ScaleFactor = (360 - $WastedAngular) / $SerieSum;
-
- $RestoreShadow = $this->pChartObject->Shadow;
- if ( $this->pChartObject->Shadow )
- {
- $this->pChartObject->Shadow = FALSE;
-
- $ShadowFormat = $Format; $ShadowFormat["Shadow"] = TRUE;
- $this->draw2DPie($X+$this->pChartObject->ShadowX,$Y+$this->pChartObject->ShadowY,$ShadowFormat);
- }
-
- /* Draw the polygon pie elements */
- $Step = 360 / (2 * PI * $Radius);
- $Offset = 0; $ID = 0;
- foreach($Values as $Key => $Value)
- {
- if ( $Shadow )
- $Settings = array("R"=>$this->pChartObject->ShadowR,"G"=>$this->pChartObject->ShadowG,"B"=>$this->pChartObject->ShadowB,"Alpha"=>$this->pChartObject->Shadowa);
- else
- {
- if ( !isset($Palette[$ID]["R"]) ) { $Color = $this->pChartObject->getRandomColor(); $Palette[$ID] = $Color; $this->pDataObject->savePalette($ID,$Color); }
- $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);
- }
-
- if ( !$SecondPass && !$Shadow )
- {
- if ( !$Border )
- $Settings["Surrounding"] = 10;
- else
- { $Settings["BorderR"] = $BorderR; $Settings["BorderG"] = $BorderG; $Settings["BorderB"] = $BorderB; }
- }
-
- $Plots = "";
- $EndAngle = $Offset+($Value*$ScaleFactor); if ( $EndAngle > 360 ) { $EndAngle = 360; }
-
- $Angle = ($EndAngle - $Offset)/2 + $Offset;
- if ($DataGapAngle == 0)
- { $X0 = $X; $Y0 = $Y; }
- else
- {
- $X0 = cos(($Angle-90)*PI/180) * $DataGapRadius + $X;
- $Y0 = sin(($Angle-90)*PI/180) * $DataGapRadius + $Y;
- }
-
- $Plots[] = $X0; $Plots[] = $Y0;
-
-
- for($i=$Offset;$i<=$EndAngle;$i=$i+$Step)
- {
- $Xc = cos(($i-90)*PI/180) * $Radius + $X;
- $Yc = sin(($i-90)*PI/180) * $Radius + $Y;
-
- if ( $SecondPass && ( $i<90 )) { $Yc++; }
- if ( $SecondPass && ( $i>180 && $i<270 )) { $Xc++; }
- if ( $SecondPass && ( $i>=270 )) { $Xc++; $Yc++; }
-
- $Plots[] = $Xc; $Plots[] = $Yc;
- }
-
- $this->pChartObject->drawPolygon($Plots,$Settings);
- if ( $RecordImageMap && !$Shadow ) { $this->pChartObject->addToImageMap("POLY",$this->arraySerialize($Plots),$this->pChartObject->toHTMLColor($Palette[$ID]["R"],$Palette[$ID]["G"],$Palette[$ID]["B"]),$Data["Series"][$Data["Abscissa"]]["Data"][$Key],$Value); }
-
- if ( $DrawLabels && !$Shadow && !$SecondPass )
- {
- if ( $LabelColor == PIE_LABEL_COLOR_AUTO )
- { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);}
- else
- { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); }
-
- $Angle = ($EndAngle - $Offset)/2 + $Offset;
- $Xc = cos(($Angle-90)*PI/180) * $Radius + $X;
- $Yc = sin(($Angle-90)*PI/180) * $Radius + $Y;
-
- $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$Key];
-
- if ( $LabelStacked )
- $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,TRUE,$X,$Y,$Radius);
- else
- $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,FALSE);
- }
-
- $Offset = $i + $DataGapAngle; $ID++;
- }
-
- /* Second pass to smooth the angles */
- if ( $SecondPass )
- {
- $Step = 360 / (2 * PI * $Radius);
- $Offset = 0; $ID = 0;
- foreach($Values as $Key => $Value)
- {
- $FirstPoint = TRUE;
- if ( $Shadow )
- $Settings = array("R"=>$this->pChartObject->ShadowR,"G"=>$this->pChartObject->ShadowG,"B"=>$this->pChartObject->ShadowB,"Alpha"=>$this->pChartObject->Shadowa);
- else
- {
- if ( $Border )
- $Settings = array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB);
- else
- $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);
- }
-
- $EndAngle = $Offset+($Value*$ScaleFactor); if ( $EndAngle > 360 ) { $EndAngle = 360; }
-
- if ($DataGapAngle == 0)
- { $X0 = $X; $Y0 = $Y; }
- else
- {
- $Angle = ($EndAngle - $Offset)/2 + $Offset;
- $X0 = cos(($Angle-90)*PI/180) * $DataGapRadius + $X;
- $Y0 = sin(($Angle-90)*PI/180) * $DataGapRadius + $Y;
- }
- $Plots[] = $X0; $Plots[] = $Y0;
-
- for($i=$Offset;$i<=$EndAngle;$i=$i+$Step)
- {
- $Xc = cos(($i-90)*PI/180) * $Radius + $X;
- $Yc = sin(($i-90)*PI/180) * $Radius + $Y;
-
- if ( $FirstPoint ) { $this->pChartObject->drawLine($Xc,$Yc,$X0,$Y0,$Settings); } { $FirstPoint = FALSE; }
-
- $this->pChartObject->drawAntialiasPixel($Xc,$Yc,$Settings);
- }
- $this->pChartObject->drawLine($Xc,$Yc,$X0,$Y0,$Settings);
-
- if ( $DrawLabels && !$Shadow )
- {
- if ( $LabelColor == PIE_LABEL_COLOR_AUTO )
- { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);}
- else
- { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); }
-
- $Angle = ($EndAngle - $Offset)/2 + $Offset;
- $Xc = cos(($Angle-90)*PI/180) * $Radius + $X;
- $Yc = sin(($Angle-90)*PI/180) * $Radius + $Y;
-
- $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$Key];
-
- if ( $LabelStacked )
- $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,TRUE,$X,$Y,$Radius);
- else
- $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,FALSE);
- }
-
- $Offset = $i + $DataGapAngle; $ID++;
- }
- }
-
- if ( $WriteValues != NULL && !$Shadow )
- {
- $Step = 360 / (2 * PI * $Radius);
- $Offset = 0; $ID = count($Values)-1;
- $Settings = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"R"=>$ValueR,"G"=>$ValueG,"B"=>$ValueB,"Alpha"=>$ValueAlpha);
- foreach($Values as $Key => $Value)
- {
- $EndAngle = ($Value*$ScaleFactor) + $Offset; if ( (int)$EndAngle > 360 ) { $EndAngle = 0; }
- $Angle = ($EndAngle - $Offset)/2 + $Offset;
-
- if ( $ValuePosition == PIE_VALUE_OUTSIDE )
- {
- $Xc = cos(($Angle-90)*PI/180) * ($Radius+$ValuePadding) + $X;
- $Yc = sin(($Angle-90)*PI/180) * ($Radius+$ValuePadding) + $Y;
- }
- else
- {
- $Xc = cos(($Angle-90)*PI/180) * ($Radius)/2 + $X;
- $Yc = sin(($Angle-90)*PI/180) * ($Radius)/2 + $Y;
- }
-
- if ( $WriteValues == PIE_VALUE_PERCENTAGE )
- $Display = round(( 100 / $SerieSum ) * $Value,$Precision)."%";
- elseif ( $WriteValues == PIE_VALUE_NATURAL )
- $Display = $Value.$ValueSuffix;
-
- $this->pChartObject->drawText($Xc,$Yc,$Display,$Settings);
-
- $Offset = $EndAngle + $DataGapAngle; $ID--;
- }
- }
-
- if ( $DrawLabels && $LabelStacked ) { $this->writeShiftedLabels(); }
-
- $this->pChartObject->Shadow = $RestoreShadow;
-
- return(PIE_RENDERED);
- }
-
- /* Draw a 3D pie chart */
- function draw3DPie($X,$Y,$Format="")
- {
- /* Rendering layout */
- $Radius = isset($Format["Radius"]) ? $Format["Radius"] : 80;
- $Precision = isset($Format["Precision"]) ? $Format["Precision"] : 0;
- $SkewFactor = isset($Format["SkewFactor"]) ? $Format["SkewFactor"] : .5;
- $SliceHeight = isset($Format["SliceHeight"]) ? $Format["SliceHeight"] : 20;
- $DataGapAngle = isset($Format["DataGapAngle"]) ? $Format["DataGapAngle"] : 0;
- $DataGapRadius = isset($Format["DataGapRadius"]) ? $Format["DataGapRadius"] : 0;
- $SecondPass = isset($Format["SecondPass"]) ? $Format["SecondPass"] : TRUE;
- $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE;
- $Shadow = isset($Format["Shadow"]) ? $Format["Shadow"] : FALSE;
- $DrawLabels = isset($Format["DrawLabels"]) ? $Format["DrawLabels"] : FALSE;
- $LabelStacked = isset($Format["LabelStacked"]) ? $Format["LabelStacked"] : FALSE;
- $LabelColor = isset($Format["LabelColor"]) ? $Format["LabelColor"] : PIE_LABEL_COLOR_MANUAL;
- $LabelR = isset($Format["LabelR"]) ? $Format["LabelR"] : 0;
- $LabelG = isset($Format["LabelG"]) ? $Format["LabelG"] : 0;
- $LabelB = isset($Format["LabelB"]) ? $Format["LabelB"] : 0;
- $LabelAlpha = isset($Format["LabelAlpha"]) ? $Format["LabelAlpha"] : 100;
- $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : NULL; //PIE_VALUE_PERCENTAGE
- $ValuePosition = isset($Format["ValuePosition"]) ? $Format["ValuePosition"] : PIE_VALUE_INSIDE;
- $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 15;
- $ValueSuffix = isset($Format["ValueSuffix"]) ? $Format["ValueSuffix"] : "";
- $ValueR = isset($Format["ValueR"]) ? $Format["ValueR"] : 255;
- $ValueG = isset($Format["ValueG"]) ? $Format["ValueG"] : 255;
- $ValueB = isset($Format["ValueB"]) ? $Format["ValueB"] : 255;
- $ValueAlpha = isset($Format["ValueAlpha"]) ? $Format["ValueAlpha"] : 100;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
-
- /* Error correction for overlaying rounded corners */
- if ( $SkewFactor < .5 ) { $SkewFactor = .5; }
-
- /* Data Processing */
- $Data = $this->pDataObject->getData();
- $Palette = $this->pDataObject->getPalette();
-
- /* Do we have an abscissa serie defined? */
- if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); }
-
- /* Try to find the data serie */
- $DataSerie = "";
- foreach ($Data["Series"] as $SerieName => $SerieData)
- { if ( $SerieName != $Data["Abscissa"]) { $DataSerie = $SerieName; } }
-
- /* Do we have data to compute? */
- if ( $DataSerie == "" ) { return(PIE_NO_DATASERIE); }
-
- /* Remove unused data */
- list($Data,$Palette) = $this->clean0Values($Data,$Palette,$DataSerie,$Data["Abscissa"]);
-
- /* Compute the pie sum */
- $SerieSum = $this->pDataObject->getSum($DataSerie);
-
- /* Do we have data to draw? */
- if ( $SerieSum == 0 ) { return(PIE_SUMISNULL); }
-
- /* Dump the real number of data to draw */
- $Values = "";
- foreach ($Data["Series"][$DataSerie]["Data"] as $Key => $Value)
- { if ($Value != 0) { $Values[] = $Value; } }
-
- /* Compute the wasted angular space between series */
- if (count($Values)==1) { $WastedAngular = 0; } else { $WastedAngular = count($Values) * $DataGapAngle; }
-
- /* Compute the scale */
- $ScaleFactor = (360 - $WastedAngular) / $SerieSum;
-
- $RestoreShadow = $this->pChartObject->Shadow;
- if ( $this->pChartObject->Shadow ) { $this->pChartObject->Shadow = FALSE; }
-
- /* Draw the polygon pie elements */
- $Step = 360 / (2 * PI * $Radius);
- $Offset = 360; $ID = count($Values)-1;
- $Values = array_reverse($Values);
- $Slice = 0; $Slices = ""; $SliceColors = ""; $Visible = ""; $SliceAngle = "";
- foreach($Values as $Key => $Value)
- {
- if ( !isset($Palette[$ID]["R"]) ) { $Color = $this->pChartObject->getRandomColor(); $Palette[$ID] = $Color; $this->pDataObject->savePalette($ID,$Color); }
- $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);
-
- $SliceColors[$Slice] = $Settings;
-
- $StartAngle = $Offset;
- $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; }
-
- if ( $StartAngle > 180 ) { $Visible[$Slice]["Start"] = TRUE; } else { $Visible[$Slice]["Start"] = TRUE; }
- if ( $EndAngle < 180 ) { $Visible[$Slice]["End"] = FALSE; } else { $Visible[$Slice]["End"] = TRUE; }
-
- if ($DataGapAngle == 0)
- { $X0 = $X; $Y0 = $Y; }
- else
- {
- $Angle = ($EndAngle - $Offset)/2 + $Offset;
- $X0 = cos(($Angle-90)*PI/180) * $DataGapRadius + $X;
- $Y0 = sin(($Angle-90)*PI/180) * $DataGapRadius*$SkewFactor + $Y;
- }
- $Slices[$Slice][] = $X0; $Slices[$Slice][] = $Y0; $SliceAngle[$Slice][] = 0;
-
- for($i=$Offset;$i>=$EndAngle;$i=$i-$Step)
- {
- $Xc = cos(($i-90)*PI/180) * $Radius + $X;
- $Yc = sin(($i-90)*PI/180) * $Radius*$SkewFactor + $Y;
-
- if ( ($SecondPass || $RestoreShadow ) && ( $i<90 )) { $Yc++; }
- if ( ($SecondPass || $RestoreShadow ) && ( $i>90 && $i<180 )) { $Xc++; }
- if ( ($SecondPass || $RestoreShadow ) && ( $i>180 && $i<270 )) { $Xc++; }
- if ( ($SecondPass || $RestoreShadow ) && ( $i>=270 )) { $Xc++; $Yc++; }
-
- $Slices[$Slice][] = $Xc; $Slices[$Slice][] = $Yc; $SliceAngle[$Slice][] = $i;
- }
-
- $Offset = $i - $DataGapAngle; $ID--; $Slice++;
- }
-
- /* Draw the bottom shadow if needed */
- if ( $RestoreShadow && ($this->pChartObject->ShadowX != 0 || $this->pChartObject->ShadowY !=0 ))
- {
- foreach($Slices as $SliceID => $Plots)
- {
- $ShadowPie = "";
- for($i=0;$i<count($Plots);$i=$i+2)
- { $ShadowPie[] = $Plots[$i]+$this->pChartObject->ShadowX; $ShadowPie[] = $Plots[$i+1]+$this->pChartObject->ShadowY; }
-
- $Settings = array("R"=>$this->pChartObject->ShadowR,"G"=>$this->pChartObject->ShadowG,"B"=>$this->pChartObject->ShadowB,"Alpha"=>$this->pChartObject->Shadowa,"NoBorder"=>TRUE);
- $this->pChartObject->drawPolygon($ShadowPie,$Settings);
- }
-
- $Step = 360 / (2 * PI * $Radius);
- $Offset = 360;
- foreach($Values as $Key => $Value)
- {
- $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; }
-
- for($i=$Offset;$i>=$EndAngle;$i=$i-$Step)
- {
- $Xc = cos(($i-90)*PI/180) * $Radius + $X + $this->pChartObject->ShadowX;
- $Yc = sin(($i-90)*PI/180) * $Radius*$SkewFactor + $Y + $this->pChartObject->ShadowY;
-
- $this->pChartObject->drawAntialiasPixel($Xc,$Yc,$Settings);
- }
-
- $Offset = $i - $DataGapAngle; $ID--;
- }
- }
-
- /* Draw the bottom pie splice */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
- $this->pChartObject->drawPolygon($Plots,$Settings);
-
- if ( $SecondPass )
- {
- $Settings = $SliceColors[$SliceID];
- if ( $Border )
- { $Settings["R"]+= 30; $Settings["G"]+= 30; $Settings["B"]+= 30;; }
-
- if ( isset($SliceAngle[$SliceID][1]) ) /* Empty error handling */
- {
- $Angle = $SliceAngle[$SliceID][1];
- $Xc = cos(($Angle-90)*PI/180) * $Radius + $X;
- $Yc = sin(($Angle-90)*PI/180) * $Radius*$SkewFactor + $Y;
- $this->pChartObject->drawLine($Plots[0],$Plots[1],$Xc,$Yc,$Settings);
-
- $Angle = $SliceAngle[$SliceID][count($SliceAngle[$SliceID])-1];
- $Xc = cos(($Angle-90)*PI/180) * $Radius + $X;
- $Yc = sin(($Angle-90)*PI/180) * $Radius*$SkewFactor + $Y;
- $this->pChartObject->drawLine($Plots[0],$Plots[1],$Xc,$Yc,$Settings);
- }
- }
- }
-
- /* Draw the two vertical edges */
- $Slices = array_reverse($Slices);
- $SliceColors = array_reverse($SliceColors);
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID];
- $Settings["R"]+= 10; $Settings["G"]+= 10; $Settings["B"]+= 10; $Settings["NoBorder"] = TRUE;
-
- if ( $Visible[$SliceID]["Start"] && isset($Plots[2])) /* Empty error handling */
- {
- $this->pChartObject->drawLine($Plots[2],$Plots[3],$Plots[2],$Plots[3]- $SliceHeight,array("R"=>$Settings["R"],"G"=>$Settings["G"],"B"=>$Settings["B"]));
- $Border = "";
- $Border[] = $Plots[0]; $Border[] = $Plots[1]; $Border[] = $Plots[0]; $Border[] = $Plots[1] - $SliceHeight;
- $Border[] = $Plots[2]; $Border[] = $Plots[3] - $SliceHeight; $Border[] = $Plots[2]; $Border[] = $Plots[3];
- $this->pChartObject->drawPolygon($Border,$Settings);
- }
- }
-
- $Slices = array_reverse($Slices);
- $SliceColors = array_reverse($SliceColors);
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID];
- $Settings["R"]+= 10; $Settings["G"]+= 10; $Settings["B"]+= 10; $Settings["NoBorder"] = TRUE;
- if ( $Visible[$SliceID]["End"] )
- {
- $this->pChartObject->drawLine($Plots[count($Plots)-2],$Plots[count($Plots)-1],$Plots[count($Plots)-2],$Plots[count($Plots)-1]- $SliceHeight,array("R"=>$Settings["R"],"G"=>$Settings["G"],"B"=>$Settings["B"]));
-
- $Border = "";
- $Border[] = $Plots[0]; $Border[] = $Plots[1]; $Border[] = $Plots[0]; $Border[] = $Plots[1] - $SliceHeight;
- $Border[] = $Plots[count($Plots)-2]; $Border[] = $Plots[count($Plots)-1] - $SliceHeight; $Border[] = $Plots[count($Plots)-2]; $Border[] = $Plots[count($Plots)-1];
- $this->pChartObject->drawPolygon($Border,$Settings);
- }
- }
-
- /* Draw the rounded edges */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID];
- $Settings["R"]+= 10; $Settings["G"]+= 10; $Settings["B"]+= 10; $Settings["NoBorder"] = TRUE;
-
- for ($j=2;$j<count($Plots)-2;$j=$j+2)
- {
- $Angle = $SliceAngle[$SliceID][$j/2];
- if ( $Angle < 270 && $Angle > 90 )
- {
- $Border = "";
- $Border[] = $Plots[$j]; $Border[] = $Plots[$j+1];
- $Border[] = $Plots[$j+2]; $Border[] = $Plots[$j+3];
- $Border[] = $Plots[$j+2]; $Border[] = $Plots[$j+3] - $SliceHeight;
- $Border[] = $Plots[$j]; $Border[] = $Plots[$j+1] - $SliceHeight;
- $this->pChartObject->drawPolygon($Border,$Settings);
- }
- }
-
- if ( $SecondPass )
- {
- $Settings = $SliceColors[$SliceID];
- if ( $Border )
- { $Settings["R"]+= 30; $Settings["G"]+= 30; $Settings["B"]+= 30; }
-
- if ( isset($SliceAngle[$SliceID][1]) ) /* Empty error handling */
- {
- $Angle = $SliceAngle[$SliceID][1];
- if ( $Angle < 270 && $Angle > 90 )
- {
- $Xc = cos(($Angle-90)*PI/180) * $Radius + $X;
- $Yc = sin(($Angle-90)*PI/180) * $Radius*$SkewFactor + $Y;
- $this->pChartObject->drawLine($Xc,$Yc,$Xc,$Yc-$SliceHeight,$Settings);
- }
- }
-
- $Angle = $SliceAngle[$SliceID][count($SliceAngle[$SliceID])-1];
- if ( $Angle < 270 && $Angle > 90 )
- {
- $Xc = cos(($Angle-90)*PI/180) * $Radius + $X;
- $Yc = sin(($Angle-90)*PI/180) * $Radius*$SkewFactor + $Y;
- $this->pChartObject->drawLine($Xc,$Yc,$Xc,$Yc-$SliceHeight,$Settings);
- }
-
- if ( isset($SliceAngle[$SliceID][1]) && $SliceAngle[$SliceID][1] > 270 && $SliceAngle[$SliceID][count($SliceAngle[$SliceID])-1] < 270 )
- {
- $Xc = cos((270-90)*PI/180) * $Radius + $X;
- $Yc = sin((270-90)*PI/180) * $Radius*$SkewFactor + $Y;
- $this->pChartObject->drawLine($Xc,$Yc,$Xc,$Yc-$SliceHeight,$Settings);
- }
-
- if ( isset($SliceAngle[$SliceID][1]) && $SliceAngle[$SliceID][1] > 90 && $SliceAngle[$SliceID][count($SliceAngle[$SliceID])-1] < 90 )
- {
- $Xc = cos((0)*PI/180) * $Radius + $X;
- $Yc = sin((0)*PI/180) * $Radius*$SkewFactor + $Y;
- $this->pChartObject->drawLine($Xc,$Yc,$Xc,$Yc-$SliceHeight,$Settings);
- }
-
- }
- }
-
- /* Draw the top splice */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID];
- $Settings["R"]+= 20; $Settings["G"]+= 20; $Settings["B"]+= 20;
-
- $Top = "";
- for($j=0;$j<count($Plots);$j=$j+2) { $Top[] = $Plots[$j]; $Top[] = $Plots[$j+1]- $SliceHeight; }
- $this->pChartObject->drawPolygon($Top,$Settings);
-
- if ( $RecordImageMap && !$Shadow ) { $this->pChartObject->addToImageMap("POLY",$this->arraySerialize($Top),$this->pChartObject->toHTMLColor($Settings["R"],$Settings["G"],$Settings["B"]),$Data["Series"][$Data["Abscissa"]]["Data"][count($Slices)-$SliceID-1],$Values[$SliceID]); }
- }
-
-
- /* Second pass to smooth the angles */
- if ( $SecondPass )
- {
- $Step = 360 / (2 * PI * $Radius);
- $Offset = 360; $ID = count($Values)-1;
- foreach($Values as $Key => $Value)
- {
- $FirstPoint = TRUE;
- if ( $Shadow )
- $Settings = array("R"=>$this->pChartObject->ShadowR,"G"=>$this->pChartObject->ShadowG,"B"=>$this->pChartObject->ShadowB,"Alpha"=>$this->pChartObject->Shadowa);
- else
- {
- if ( $Border )
- { $Settings = array("R"=>$Palette[$ID]["R"]+30,"G"=>$Palette[$ID]["G"]+30,"B"=>$Palette[$ID]["B"]+30,"Alpha"=>$Palette[$ID]["Alpha"]); }
- else
- $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);
- }
-
- $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; }
-
- if ($DataGapAngle == 0)
- { $X0 = $X; $Y0 = $Y- $SliceHeight; }
- else
- {
- $Angle = ($EndAngle - $Offset)/2 + $Offset;
- $X0 = cos(($Angle-90)*PI/180) * $DataGapRadius + $X;
- $Y0 = sin(($Angle-90)*PI/180) * $DataGapRadius*$SkewFactor + $Y - $SliceHeight;
- }
- $Plots[] = $X0; $Plots[] = $Y0;
-
- for($i=$Offset;$i>=$EndAngle;$i=$i-$Step)
- {
- $Xc = cos(($i-90)*PI/180) * $Radius + $X;
- $Yc = sin(($i-90)*PI/180) * $Radius*$SkewFactor + $Y - $SliceHeight;
-
- if ( $FirstPoint ) { $this->pChartObject->drawLine($Xc,$Yc,$X0,$Y0,$Settings); } { $FirstPoint = FALSE; }
-
- $this->pChartObject->drawAntialiasPixel($Xc,$Yc,$Settings);
- if ($i < 270 && $i > 90 ) { $this->pChartObject->drawAntialiasPixel($Xc,$Yc+$SliceHeight,$Settings); }
- }
- $this->pChartObject->drawLine($Xc,$Yc,$X0,$Y0,$Settings);
-
- $Offset = $i - $DataGapAngle; $ID--;
- }
- }
-
- if ( $WriteValues != NULL )
- {
- $Step = 360 / (2 * PI * $Radius);
- $Offset = 360; $ID = count($Values)-1;
- $Settings = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"R"=>$ValueR,"G"=>$ValueG,"B"=>$ValueB,"Alpha"=>$ValueAlpha);
- foreach($Values as $Key => $Value)
- {
- $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; }
-
- $Angle = ($EndAngle - $Offset)/2 + $Offset;
-
- if ( $ValuePosition == PIE_VALUE_OUTSIDE )
- {
- $Xc = cos(($Angle-90)*PI/180) * ($Radius+$ValuePadding) + $X;
- $Yc = sin(($Angle-90)*PI/180) * (($Radius*$SkewFactor)+$ValuePadding) + $Y - $SliceHeight;
- }
- else
- {
- $Xc = cos(($Angle-90)*PI/180) * ($Radius)/2 + $X;
- $Yc = sin(($Angle-90)*PI/180) * ($Radius*$SkewFactor)/2 + $Y - $SliceHeight;
- }
-
- if ( $WriteValues == PIE_VALUE_PERCENTAGE )
- $Display = round(( 100 / $SerieSum ) * $Value,$Precision)."%";
- elseif ( $WriteValues == PIE_VALUE_NATURAL )
- $Display = $Value.$ValueSuffix;
-
- $this->pChartObject->drawText($Xc,$Yc,$Display,$Settings);
-
- $Offset = $EndAngle - $DataGapAngle; $ID--;
- }
- }
-
- if ( $DrawLabels )
- {
- $Step = 360 / (2 * PI * $Radius);
- $Offset = 360; $ID = count($Values)-1;
- foreach($Values as $Key => $Value)
- {
- if ( $LabelColor == PIE_LABEL_COLOR_AUTO )
- { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);}
- else
- { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); }
-
- $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; }
-
- $Angle = ($EndAngle - $Offset)/2 + $Offset;
- $Xc = cos(($Angle-90)*PI/180) * $Radius + $X;
- $Yc = sin(($Angle-90)*PI/180) * $Radius*$SkewFactor + $Y - $SliceHeight;
-
- if ( isset($Data["Series"][$Data["Abscissa"]]["Data"][$ID]) )
- {
- $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$ID];
-
- if ( $LabelStacked )
- $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,TRUE,$X,$Y,$Radius,TRUE);
- else
- $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,FALSE);
- }
-
- $Offset = $EndAngle - $DataGapAngle; $ID--;
- }
- }
-
- if ( $DrawLabels && $LabelStacked ) { $this->writeShiftedLabels(); }
-
- $this->pChartObject->Shadow = $RestoreShadow;
-
- return(PIE_RENDERED);
- }
-
- /* Draw the legend of pie chart */
- function drawPieLegend($X,$Y,$Format="")
- {
- $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->pChartObject->FontName;
- $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->pChartObject->FontSize;
- $FontR = isset($Format["FontR"]) ? $Format["FontR"] : $this->pChartObject->FontColorR;
- $FontG = isset($Format["FontG"]) ? $Format["FontG"] : $this->pChartObject->FontColorG;
- $FontB = isset($Format["FontB"]) ? $Format["FontB"] : $this->pChartObject->FontColorB;
- $BoxSize = isset($Format["BoxSize"]) ? $Format["BoxSize"] : 5;
- $Margin = isset($Format["Margin"]) ? $Format["Margin"] : 5;
- $R = isset($Format["R"]) ? $Format["R"] : 200;
- $G = isset($Format["G"]) ? $Format["G"] : 200;
- $B = isset($Format["B"]) ? $Format["B"] : 200;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 255;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 255;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 255;
- $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
- $Style = isset($Format["Style"]) ? $Format["Style"] : LEGEND_ROUND;
- $Mode = isset($Format["Mode"]) ? $Format["Mode"] : LEGEND_VERTICAL;
-
- if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
-
- $YStep = max($this->pChartObject->FontSize,$BoxSize) + 5;
- $XStep = $BoxSize + 5;
-
- /* Data Processing */
- $Data = $this->pDataObject->getData();
- $Palette = $this->pDataObject->getPalette();
-
- /* Do we have an abscissa serie defined? */
- if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); }
-
- $Boundaries = ""; $Boundaries["L"] = $X; $Boundaries["T"] = $Y; $Boundaries["R"] = 0; $Boundaries["B"] = 0; $vY = $Y; $vX = $X;
- foreach($Data["Series"][$Data["Abscissa"]]["Data"] as $Key => $Value)
- {
- $BoxArray = $this->pChartObject->getTextBox($vX+$BoxSize+4,$vY+$BoxSize/2,$FontName,$FontSize,0,$Value);
-
- if ( $Mode == LEGEND_VERTICAL )
- {
- if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$BoxSize/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$BoxSize/2; }
- if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
- if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$BoxSize/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$BoxSize/2; }
- $vY=$vY+$YStep;
- }
- elseif ( $Mode == LEGEND_HORIZONTAL )
- {
- if ( $Boundaries["T"] > $BoxArray[2]["Y"]+$BoxSize/2 ) { $Boundaries["T"] = $BoxArray[2]["Y"]+$BoxSize/2; }
- if ( $Boundaries["R"] < $BoxArray[1]["X"]+2 ) { $Boundaries["R"] = $BoxArray[1]["X"]+2; }
- if ( $Boundaries["B"] < $BoxArray[1]["Y"]+2+$BoxSize/2 ) { $Boundaries["B"] = $BoxArray[1]["Y"]+2+$BoxSize/2; }
- $vX=$Boundaries["R"]+$XStep;
- }
- }
- $vY=$vY-$YStep; $vX=$vX-$XStep;
-
- $TopOffset = $Y - $Boundaries["T"];
- if ( $Boundaries["B"]-($vY+$BoxSize) < $TopOffset ) { $Boundaries["B"] = $vY+$BoxSize+$TopOffset; }
-
- if ( $Style == LEGEND_ROUND )
- $this->pChartObject->drawRoundedFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
- elseif ( $Style == LEGEND_BOX )
- $this->pChartObject->drawFilledRectangle($Boundaries["L"]-$Margin,$Boundaries["T"]-$Margin,$Boundaries["R"]+$Margin,$Boundaries["B"]+$Margin,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB));
-
- $RestoreShadow = $this->pChartObject->Shadow; $this->pChartObject->Shadow = FALSE;
- foreach($Data["Series"][$Data["Abscissa"]]["Data"] as $Key => $Value)
- {
- $R = $Palette[$Key]["R"]; $G = $Palette[$Key]["G"]; $B = $Palette[$Key]["B"];
-
- $this->pChartObject->drawFilledRectangle($X+1,$Y+1,$X+$BoxSize+1,$Y+$BoxSize+1,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
- $this->pChartObject->drawFilledRectangle($X,$Y,$X+$BoxSize,$Y+$BoxSize,array("R"=>$R,"G"=>$G,"B"=>$B,"Surrounding"=>20));
- if ( $Mode == LEGEND_VERTICAL )
- {
- $this->pChartObject->drawText($X+$BoxSize+4,$Y+$BoxSize/2,$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT,"FontName"=>$FontName,"FontSize"=>$FontSize));
- $Y=$Y+$YStep;
- }
- elseif ( $Mode == LEGEND_HORIZONTAL )
- {
- $BoxArray = $this->pChartObject->drawText($X+$BoxSize+4,$Y+$BoxSize/2,$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT,"FontName"=>$FontName,"FontSize"=>$FontSize));
- $X=$BoxArray[1]["X"]+2+$XStep;
- }
- }
-
- $this->Shadow = $RestoreShadow;
- }
-
- /* Set the color of the specified slice */
- function setSliceColor($SliceID,$Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : 0;
- $G = isset($Format["G"]) ? $Format["G"] : 0;
- $B = isset($Format["B"]) ? $Format["B"] : 0;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
-
- $this->pDataObject->Palette[$SliceID]["R"] = $R;
- $this->pDataObject->Palette[$SliceID]["G"] = $G;
- $this->pDataObject->Palette[$SliceID]["B"] = $B;
- $this->pDataObject->Palette[$SliceID]["Alpha"] = $Alpha;
- }
-
- /* Internally used compute the label positions */
- function writePieLabel($X,$Y,$Label,$Angle,$Settings,$Stacked,$Xc=0,$Yc=0,$Radius=0,$Reversed=FALSE)
- {
- $LabelOffset = 30;
- $FontName = $this->pChartObject->FontName;
- $FontSize = $this->pChartObject->FontSize;
-
- if ( !$Stacked )
- {
- $Settings["Angle"] = 360-$Angle;
- $Settings["Length"] = 25;
- $Settings["Size"] = 8;
-
- $this->pChartObject->drawArrowLabel($X,$Y," ".$Label." ",$Settings);
- }
- else
- {
- $X2 = cos(deg2rad($Angle-90))*20+$X;
- $Y2 = sin(deg2rad($Angle-90))*20+$Y;
-
- $TxtPos = $this->pChartObject->getTextBox($X,$Y,$FontName,$FontSize,0,$Label);
- $Height = $TxtPos[0]["Y"] - $TxtPos[2]["Y"];
- $YTop = $Y2 - $Height/2 - 2;
- $YBottom = $Y2 + $Height/2 + 2;
-
- if ( $this->LabelPos != "" )
- {
- $Done = FALSE;
- foreach($this->LabelPos as $Key => $Settings)
- {
- if ( !$Done )
- {
- if ( $Angle <= 90 && (($YTop >= $Settings["YTop"] && $YTop <= $Settings["YBottom"]) || ($YBottom >= $Settings["YTop"] && $YBottom <= $Settings["YBottom"])))
- { $this->shift(0,180,-($Height+2),$Reversed); $Done = TRUE; }
- if ( $Angle > 90 && $Angle <= 180 && (($YTop >= $Settings["YTop"] && $YTop <= $Settings["YBottom"]) || ($YBottom >= $Settings["YTop"] && $YBottom <= $Settings["YBottom"])))
- { $this->shift(0,180,-($Height+2),$Reversed); $Done = TRUE; }
- if ( $Angle > 180 && $Angle <= 270 && (($YTop >= $Settings["YTop"] && $YTop <= $Settings["YBottom"]) || ($YBottom >= $Settings["YTop"] && $YBottom <= $Settings["YBottom"])))
- { $this->shift(180,360,($Height+2),$Reversed); $Done = TRUE; }
- if ( $Angle > 270 && $Angle <= 360 && (($YTop >= $Settings["YTop"] && $YTop <= $Settings["YBottom"]) || ($YBottom >= $Settings["YTop"] && $YBottom <= $Settings["YBottom"])))
- { $this->shift(180,360,($Height+2),$Reversed); $Done = TRUE; }
- }
- }
- }
-
- $LabelSettings = array("YTop"=>$YTop,"YBottom"=>$YBottom,"Label"=>$Label,"Angle"=>$Angle,"X1"=>$X,"Y1"=>$Y,"X2"=>$X2,"Y2"=>$Y2);
- if ( $Angle <= 180 ) { $LabelSettings["X3"] = $Xc+$Radius+$LabelOffset; }
- if ( $Angle > 180 ) { $LabelSettings["X3"] = $Xc-$Radius-$LabelOffset; }
- $this->LabelPos[] = $LabelSettings;
- }
- }
-
- /* Internally used to shift label positions */
- function shift($StartAngle,$EndAngle,$Offset,$Reversed)
- {
- if ( $Reversed ) { $Offset = -$Offset; }
- foreach($this->LabelPos as $Key => $Settings)
- {
- if ( $Settings["Angle"] > $StartAngle && $Settings["Angle"] <= $EndAngle ) { $this->LabelPos[$Key]["YTop"] = $Settings["YTop"] + $Offset; $this->LabelPos[$Key]["YBottom"] = $Settings["YBottom"] + $Offset; $this->LabelPos[$Key]["Y2"] = $Settings["Y2"] + $Offset; }
- }
- }
-
- /* Internally used to write the re-computed labels */
- function writeShiftedLabels()
- {
- if ( $this->LabelPos == "" ) { return(0); }
- foreach($this->LabelPos as $Key => $Settings)
- {
- $X1 = $Settings["X1"]; $Y1 = $Settings["Y1"];
- $X2 = $Settings["X2"]; $Y2 = $Settings["Y2"];
- $X3 = $Settings["X3"];
- $Angle = $Settings["Angle"];
- $Label = $Settings["Label"];
-
- $this->pChartObject->drawArrow($X2,$Y2,$X1,$Y1,array("Size"=>8));
- if ( $Angle <= 180 )
- {
- $this->pChartObject->drawLine($X2,$Y2,$X3,$Y2);
- $this->pChartObject->drawText($X3+2,$Y2,$Label,array("Align"=>TEXT_ALIGN_MIDDLELEFT));
- }
- else
- {
- $this->pChartObject->drawLine($X2,$Y2,$X3,$Y2);
- $this->pChartObject->drawText($X3-2,$Y2,$Label,array("Align"=>TEXT_ALIGN_MIDDLERIGHT));
- }
- }
- }
-
- /* Draw a ring chart */
- function draw2DRing($X,$Y,$Format="")
- {
- $OuterRadius = isset($Format["Radius"]) ? $Format["Radius"] : 60;
- $Precision = isset($Format["Precision"]) ? $Format["Precision"] : 0;
- $InnerRadius = isset($Format["Radius"]) ? $Format["Radius"] : 30;
- $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 255;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 255;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 255;
- $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 100;
- $Shadow = isset($Format["Shadow"]) ? $Format["Shadow"] : FALSE;
- $DrawLabels = isset($Format["DrawLabels"]) ? $Format["DrawLabels"] : FALSE;
- $LabelStacked = isset($Format["LabelStacked"]) ? $Format["LabelStacked"] : FALSE;
- $LabelColor = isset($Format["LabelColor"]) ? $Format["LabelColor"] : PIE_LABEL_COLOR_MANUAL;
- $LabelR = isset($Format["LabelR"]) ? $Format["LabelR"] : 0;
- $LabelG = isset($Format["LabelG"]) ? $Format["LabelG"] : 0;
- $LabelB = isset($Format["LabelB"]) ? $Format["LabelB"] : 0;
- $LabelAlpha = isset($Format["LabelAlpha"]) ? $Format["LabelAlpha"] : 100;
- $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : NULL; //PIE_VALUE_PERCENTAGE
- $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 5;
- $ValuePosition = isset($Format["ValuePosition"]) ? $Format["ValuePosition"] : PIE_VALUE_OUTSIDE;
- $ValueSuffix = isset($Format["ValueSuffix"]) ? $Format["ValueSuffix"] : "";
- $ValueR = isset($Format["ValueR"]) ? $Format["ValueR"] : 255;
- $ValueG = isset($Format["ValueG"]) ? $Format["ValueG"] : 255;
- $ValueB = isset($Format["ValueB"]) ? $Format["ValueB"] : 255;
- $ValueAlpha = isset($Format["ValueAlpha"]) ? $Format["ValueAlpha"] : 100;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
-
- /* Data Processing */
- $Data = $this->pDataObject->getData();
- $Palette = $this->pDataObject->getPalette();
-
- /* Do we have an abscissa serie defined? */
- if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); }
-
- /* Try to find the data serie */
- $DataSerie = "";
- foreach ($Data["Series"] as $SerieName => $SerieData)
- { if ( $SerieName != $Data["Abscissa"]) { $DataSerie = $SerieName; } }
-
- /* Do we have data to compute? */
- if ( $DataSerie == "" ) { return(PIE_NO_DATASERIE); }
-
- /* Remove unused data */
- list($Data,$Palette) = $this->clean0Values($Data,$Palette,$DataSerie,$Data["Abscissa"]);
-
- /* Compute the pie sum */
- $SerieSum = $this->pDataObject->getSum($DataSerie);
-
- /* Do we have data to draw? */
- if ( $SerieSum == 0 ) { return(PIE_SUMISNULL); }
-
- /* Dump the real number of data to draw */
- $Values = "";
- foreach ($Data["Series"][$DataSerie]["Data"] as $Key => $Value)
- { if ($Value != 0) { $Values[] = $Value; } }
-
- /* Compute the wasted angular space between series */
- if (count($Values)==1) { $WastedAngular = 0; } else { $WastedAngular = 0; } // count($Values)
-
- /* Compute the scale */
- $ScaleFactor = (360 - $WastedAngular) / $SerieSum;
-
- $RestoreShadow = $this->pChartObject->Shadow;
- if ( $this->pChartObject->Shadow )
- {
- $this->pChartObject->Shadow = FALSE;
-
- $ShadowFormat = $Format; $ShadowFormat["Shadow"] = TRUE;
- $this->draw2DRing($X+$this->pChartObject->ShadowX,$Y+$this->pChartObject->ShadowY,$ShadowFormat);
- }
-
- /* Draw the polygon pie elements */
- $Step = 360 / (2 * PI * $OuterRadius);
- $Offset = 0; $ID = 0;
- foreach($Values as $Key => $Value)
- {
- if ( $Shadow )
- {
- $Settings = array("R"=>$this->pChartObject->ShadowR,"G"=>$this->pChartObject->ShadowG,"B"=>$this->pChartObject->ShadowB,"Alpha"=>$this->pChartObject->Shadowa);
- $BorderColor = $Settings;
- }
- else
- {
- if ( !isset($Palette[$ID]["R"]) ) { $Color = $this->pChartObject->getRandomColor(); $Palette[$ID] = $Color; $this->pDataObject->savePalette($ID,$Color); }
- $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);
-
- if ( $Border )
- $BorderColor = array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha);
- else
- $BorderColor = $Settings;
- }
-
- $Plots = ""; $Boundaries = ""; $AAPixels = "";
- $EndAngle = $Offset+($Value*$ScaleFactor); if ( $EndAngle > 360 ) { $EndAngle = 360; }
- for($i=$Offset;$i<=$EndAngle;$i=$i+$Step)
- {
- $Xc = cos(($i-90)*PI/180) * $OuterRadius + $X;
- $Yc = sin(($i-90)*PI/180) * $OuterRadius + $Y;
-
- if ( !isset($Boundaries[0]["X1"]) ) { $Boundaries[0]["X1"] = $Xc; $Boundaries[0]["Y1"] = $Yc; }
- $AAPixels[] = array($Xc,$Yc);
-
- if ( $i<90 ) { $Yc++; }
- if ( $i>180 && $i<270 ) { $Xc++; }
- if ( $i>=270 ) { $Xc++; $Yc++; }
-
- $Plots[] = $Xc; $Plots[] = $Yc;
- }
- $Boundaries[1]["X1"] = $Xc; $Boundaries[1]["Y1"] = $Yc;
- $Lasti = $EndAngle;
-
- for($i=$EndAngle;$i>=$Offset;$i=$i-$Step)
- {
- $Xc = cos(($i-90)*PI/180) * ($InnerRadius-1) + $X;
- $Yc = sin(($i-90)*PI/180) * ($InnerRadius-1) + $Y;
-
- if ( !isset($Boundaries[1]["X2"]) ) { $Boundaries[1]["X2"] = $Xc; $Boundaries[1]["Y2"] = $Yc; }
- $AAPixels[] = array($Xc,$Yc);
-
- $Xc = cos(($i-90)*PI/180) * $InnerRadius + $X;
- $Yc = sin(($i-90)*PI/180) * $InnerRadius + $Y;
-
- if ( $i<90 ) { $Yc++; }
- if ( $i>180 && $i<270 ) { $Xc++; }
- if ( $i>=270 ) { $Xc++; $Yc++; }
-
- $Plots[] = $Xc; $Plots[] = $Yc;
- }
- $Boundaries[0]["X2"] = $Xc; $Boundaries[0]["Y2"] = $Yc;
-
- /* Draw the polygon */
- $this->pChartObject->drawPolygon($Plots,$Settings);
- if ( $RecordImageMap && !$Shadow ) { $this->pChartObject->addToImageMap("POLY",$this->arraySerialize($Plots),$this->pChartObject->toHTMLColor($Palette[$ID]["R"],$Palette[$ID]["G"],$Palette[$ID]["B"]),$Data["Series"][$Data["Abscissa"]]["Data"][$Key],$Value); }
-
- /* Smooth the edges using AA */
- foreach($AAPixels as $iKey => $Pos ) { $this->pChartObject->drawAntialiasPixel($Pos[0],$Pos[1],$BorderColor); }
- $this->pChartObject->drawLine($Boundaries[0]["X1"],$Boundaries[0]["Y1"],$Boundaries[0]["X2"],$Boundaries[0]["Y2"],$BorderColor);
- $this->pChartObject->drawLine($Boundaries[1]["X1"],$Boundaries[1]["Y1"],$Boundaries[1]["X2"],$Boundaries[1]["Y2"],$BorderColor);
-
- if ( $DrawLabels && !$Shadow )
- {
- if ( $LabelColor == PIE_LABEL_COLOR_AUTO )
- { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);}
- else
- { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); }
-
- $Angle = ($EndAngle - $Offset)/2 + $Offset;
- $Xc = cos(($Angle-90)*PI/180) * $OuterRadius + $X;
- $Yc = sin(($Angle-90)*PI/180) * $OuterRadius + $Y;
-
- $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$Key];
-
- if ( $LabelStacked )
- $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,TRUE,$X,$Y,$OuterRadius);
- else
- $this->writePieLabel($Xc,$Yc,$Label,$Angle,$Settings,FALSE);
- }
-
- $Offset = $Lasti; $ID++;
- }
-
- if ( $DrawLabels && $LabelStacked ) { $this->writeShiftedLabels(); }
-
- if ( $WriteValues && !$Shadow )
- {
- $Step = 360 / (2 * PI * $OuterRadius);
- $Offset = 0;
- foreach($Values as $Key => $Value)
- {
- $EndAngle = $Offset+($Value*$ScaleFactor);
- if ( $EndAngle > 360 ) { $EndAngle = 360; }
-
- $Angle = $Offset+($Value*$ScaleFactor)/2;
- if ( $ValuePosition == PIE_VALUE_OUTSIDE )
- {
- $Xc = cos(($Angle-90)*PI/180) * ($OuterRadius+$ValuePadding) + $X;
- $Yc = sin(($Angle-90)*PI/180) * ($OuterRadius+$ValuePadding) + $Y;
- if ( $Angle >=0 && $Angle <= 90 ) { $Align = TEXT_ALIGN_BOTTOMLEFT; }
- if ( $Angle > 90 && $Angle <= 180 ) { $Align = TEXT_ALIGN_TOPLEFT; }
- if ( $Angle > 180 && $Angle <= 270 ) { $Align = TEXT_ALIGN_TOPRIGHT; }
- if ( $Angle > 270 ) { $Align = TEXT_ALIGN_BOTTOMRIGHT; }
- }
- else
- {
- $Xc = cos(($Angle-90)*PI/180) * (($OuterRadius-$InnerRadius)/2+$InnerRadius) + $X;
- $Yc = sin(($Angle-90)*PI/180) * (($OuterRadius-$InnerRadius)/2+$InnerRadius) + $Y;
- $Align = TEXT_ALIGN_MIDDLEMIDDLE;
- }
-
- if ( $WriteValues == PIE_VALUE_PERCENTAGE )
- $Display = round(( 100 / $SerieSum ) * $Value,$Precision)."%";
- elseif ( $WriteValues == PIE_VALUE_NATURAL )
- $Display = $Value.$ValueSuffix;
- else
- $Label = "";
-
- $this->pChartObject->drawText($Xc,$Yc,$Display,array("Align"=>$Align,"R"=>$ValueR,"G"=>$ValueG,"B"=>$ValueB));
- $Offset = $EndAngle;
- }
- }
-
- $this->pChartObject->Shadow = $RestoreShadow;
-
- return(PIE_RENDERED);
- }
-
- /* Draw a 3D ring chart */
- function draw3DRing($X,$Y,$Format="")
- {
- $OuterRadius = isset($Format["OuterRadius"]) ? $Format["OuterRadius"] : 100;
- $Precision = isset($Format["Precision"]) ? $Format["Precision"] : 0;
- $InnerRadius = isset($Format["InnerRadius"]) ? $Format["InnerRadius"] : 30;
- $SkewFactor = isset($Format["SkewFactor"]) ? $Format["SkewFactor"] : .6;
- $SliceHeight = isset($Format["SliceHeight"]) ? $Format["SliceHeight"] : 10;
- $DataGapAngle = isset($Format["DataGapAngle"]) ? $Format["DataGapAngle"] : 10;
- $DataGapRadius = isset($Format["DataGapRadius"]) ? $Format["DataGapRadius"] : 10;
- $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE;
- $Shadow = isset($Format["Shadow"]) ? $Format["Shadow"] : FALSE;
- $DrawLabels = isset($Format["DrawLabels"]) ? $Format["DrawLabels"] : FALSE;
- $LabelStacked = isset($Format["LabelStacked"]) ? $Format["LabelStacked"] : FALSE;
- $LabelColor = isset($Format["LabelColor"]) ? $Format["LabelColor"] : PIE_LABEL_COLOR_MANUAL;
- $LabelR = isset($Format["LabelR"]) ? $Format["LabelR"] : 0;
- $LabelG = isset($Format["LabelG"]) ? $Format["LabelG"] : 0;
- $LabelB = isset($Format["LabelB"]) ? $Format["LabelB"] : 0;
- $LabelAlpha = isset($Format["LabelAlpha"]) ? $Format["LabelAlpha"] : 100;
- $Cf = isset($Format["Cf"]) ? $Format["Cf"] : 20;
- $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : PIE_VALUE_NATURAL;
- $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : $SliceHeight + 15;
- $ValuePosition = isset($Format["ValuePosition"]) ? $Format["ValuePosition"] : PIE_VALUE_OUTSIDE;
- $ValueSuffix = isset($Format["ValueSuffix"]) ? $Format["ValueSuffix"] : "";
- $ValueR = isset($Format["ValueR"]) ? $Format["ValueR"] : 255;
- $ValueG = isset($Format["ValueG"]) ? $Format["ValueG"] : 255;
- $ValueB = isset($Format["ValueB"]) ? $Format["ValueB"] : 255;
- $ValueAlpha = isset($Format["ValueAlpha"]) ? $Format["ValueAlpha"] : 100;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
-
- /* Error correction for overlaying rounded corners */
- if ( $SkewFactor < .5 ) { $SkewFactor = .5; }
-
- /* Data Processing */
- $Data = $this->pDataObject->getData();
- $Palette = $this->pDataObject->getPalette();
-
- /* Do we have an abscissa serie defined? */
- if ( $Data["Abscissa"] == "" ) { return(PIE_NO_ABSCISSA); }
-
- /* Try to find the data serie */
- $DataSerie = "";
- foreach ($Data["Series"] as $SerieName => $SerieData)
- { if ( $SerieName != $Data["Abscissa"]) { $DataSerie = $SerieName; } }
-
- /* Do we have data to compute? */
- if ( $DataSerie == "" ) { return(PIE_NO_DATASERIE); }
-
- /* Remove unused data */
- list($Data,$Palette) = $this->clean0Values($Data,$Palette,$DataSerie,$Data["Abscissa"]);
-
- /* Compute the pie sum */
- $SerieSum = $this->pDataObject->getSum($DataSerie);
-
- /* Do we have data to draw? */
- if ( $SerieSum == 0 ) { return(PIE_SUMISNULL); }
-
- /* Dump the real number of data to draw */
- $Values = "";
- foreach ($Data["Series"][$DataSerie]["Data"] as $Key => $Value)
- { if ($Value != 0) { $Values[] = $Value; } }
-
- /* Compute the wasted angular space between series */
- if (count($Values)==1) { $WastedAngular = 0; } else { $WastedAngular = count($Values) * $DataGapAngle; }
-
- /* Compute the scale */
- $ScaleFactor = (360 - $WastedAngular) / $SerieSum;
-
- $RestoreShadow = $this->pChartObject->Shadow;
- if ( $this->pChartObject->Shadow ) { $this->pChartObject->Shadow = FALSE; }
-
- /* Draw the polygon ring elements */
- $Offset = 360; $ID = count($Values)-1;
- $Values = array_reverse($Values);
- $Slice = 0; $Slices = ""; $SliceColors = ""; $Visible = ""; $SliceAngle = "";
- foreach($Values as $Key => $Value)
- {
- if ( !isset($Palette[$ID]["R"]) ) { $Color = $this->pChartObject->getRandomColor(); $Palette[$ID] = $Color; $this->pDataObject->savePalette($ID,$Color); }
- $Settings = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);
-
- $SliceColors[$Slice] = $Settings;
-
- $StartAngle = $Offset;
- $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; }
-
- if ( $StartAngle > 180 ) { $Visible[$Slice]["Start"] = TRUE; } else { $Visible[$Slice]["Start"] = TRUE; }
- if ( $EndAngle < 180 ) { $Visible[$Slice]["End"] = FALSE; } else { $Visible[$Slice]["End"] = TRUE; }
-
- $Step = (360 / (2 * PI * $OuterRadius))/2;
- $OutX1 = VOID; $OutY1 = VOID;
- for($i=$Offset;$i>=$EndAngle;$i=$i-$Step)
- {
- $Xc = cos(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius-2) + $X;
- $Yc = sin(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius-2)*$SkewFactor + $Y;
- $Slices[$Slice]["AA"][] = array($Xc,$Yc);
-
- $Xc = cos(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius-1) + $X;
- $Yc = sin(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius-1)*$SkewFactor + $Y;
- $Slices[$Slice]["AA"][] = array($Xc,$Yc);
-
- $Xc = cos(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius) + $X;
- $Yc = sin(($i-90)*PI/180) * ($OuterRadius+$DataGapRadius)*$SkewFactor + $Y;
- $this->pChartObject->drawAntialiasPixel($Xc,$Yc,$Settings);
-
- if ( $OutX1 == VOID ) { $OutX1 = $Xc; $OutY1 = $Yc; }
-
- if ( $i<90 ) { $Yc++; }
- if ( $i>90 && $i<180 ) { $Xc++; }
- if ( $i>180 && $i<270 ) { $Xc++; }
- if ( $i>=270 ) { $Xc++; $Yc++; }
-
- $Slices[$Slice]["BottomPoly"][] = floor($Xc); $Slices[$Slice]["BottomPoly"][] = floor($Yc);
- $Slices[$Slice]["TopPoly"][] = floor($Xc); $Slices[$Slice]["TopPoly"][] = floor($Yc)-$SliceHeight;
- $Slices[$Slice]["Angle"][] = $i;
- }
- $OutX2 = $Xc; $OutY2 = $Yc;
-
- $Slices[$Slice]["Angle"][] = VOID;
- $Lasti = $i;
-
- $Step = (360 / (2 * PI * $InnerRadius))/2;
- $InX1 = VOID; $InY1 = VOID;
- for($i=$EndAngle;$i<=$Offset;$i=$i+$Step)
- {
- $Xc = cos(($i-90)*PI/180) * ($InnerRadius+$DataGapRadius-1) + $X;
- $Yc = sin(($i-90)*PI/180) * ($InnerRadius+$DataGapRadius-1)*$SkewFactor + $Y;
- $Slices[$Slice]["AA"][] = array($Xc,$Yc);
-
- $Xc = cos(($i-90)*PI/180) * ($InnerRadius+$DataGapRadius) + $X;
- $Yc = sin(($i-90)*PI/180) * ($InnerRadius+$DataGapRadius)*$SkewFactor + $Y;
- $Slices[$Slice]["AA"][] = array($Xc,$Yc);
-
- if ( $InX1 == VOID ) { $InX1 = $Xc; $InY1 = $Yc; }
-
- if ( $i<90 ) { $Yc++; }
- if ( $i>90 && $i<180 ) { $Xc++; }
- if ( $i>180 && $i<270 ) { $Xc++; }
- if ( $i>=270 ) { $Xc++; $Yc++; }
-
- $Slices[$Slice]["BottomPoly"][] = floor($Xc); $Slices[$Slice]["BottomPoly"][] = floor($Yc);
- $Slices[$Slice]["TopPoly"][] = floor($Xc); $Slices[$Slice]["TopPoly"][] = floor($Yc)-$SliceHeight;
- $Slices[$Slice]["Angle"][] = $i;
- }
- $InX2 = $Xc; $InY2 = $Yc;
-
- $Slices[$Slice]["InX1"] = $InX1; $Slices[$Slice]["InY1"] = $InY1;
- $Slices[$Slice]["InX2"] = $InX2; $Slices[$Slice]["InY2"] = $InY2;
- $Slices[$Slice]["OutX1"] = $OutX1; $Slices[$Slice]["OutY1"] = $OutY1;
- $Slices[$Slice]["OutX2"] = $OutX2; $Slices[$Slice]["OutY2"] = $OutY2;
-
- $Offset = $Lasti - $DataGapAngle; $ID--; $Slice++;
- }
-
- /* Draw the bottom pie splice */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
- $this->pChartObject->drawPolygon($Plots["BottomPoly"],$Settings);
-
- foreach($Plots["AA"] as $Key => $Pos)
- $this->pChartObject->drawAntialiasPixel($Pos[0],$Pos[1],$Settings);
-
- $this->pChartObject->drawLine($Plots["InX1"],$Plots["InY1"],$Plots["OutX2"],$Plots["OutY2"],$Settings);
- $this->pChartObject->drawLine($Plots["InX2"],$Plots["InY2"],$Plots["OutX1"],$Plots["OutY1"],$Settings);
- }
-
- $Slices = array_reverse($Slices);
- $SliceColors = array_reverse($SliceColors);
-
- /* Draw the vertical edges (semi-visible) */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
- $Settings["R"] = $Settings["R"]+$Cf; $Settings["G"] = $Settings["G"]+$Cf; $Settings["B"] = $Settings["B"]+$Cf;
-
- $StartAngle = $Plots["Angle"][0];
- foreach($Plots["Angle"] as $Key =>$Angle) { if ($Angle == VOID) { $EndAngle = $Plots["Angle"][$Key-1]; } }
-
- if ( $StartAngle >= 270 || $StartAngle <= 90 )
- $this->pChartObject->drawLine($Plots["OutX1"],$Plots["OutY1"],$Plots["OutX1"],$Plots["OutY1"]-$SliceHeight,$Settings);
- if ( $StartAngle >= 270 || $StartAngle <= 90 )
- $this->pChartObject->drawLine($Plots["OutX2"],$Plots["OutY2"],$Plots["OutX2"],$Plots["OutY2"]-$SliceHeight,$Settings);
-
- $this->pChartObject->drawLine($Plots["InX1"],$Plots["InY1"],$Plots["InX1"],$Plots["InY1"]-$SliceHeight,$Settings);
- $this->pChartObject->drawLine($Plots["InX2"],$Plots["InY2"],$Plots["InX2"],$Plots["InY2"]-$SliceHeight,$Settings);
- }
-
- /* Draw the inner vertical slices */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
- $Settings["R"] = $Settings["R"]+$Cf; $Settings["G"] = $Settings["G"]+$Cf; $Settings["B"] = $Settings["B"]+$Cf;
-
- $Outer = TRUE; $Inner = FALSE;
- $InnerPlotsA = ""; $InnerPlotsB = "";
- foreach($Plots["Angle"] as $ID => $Angle)
- {
- if ( $Angle == VOID )
- { $Outer = FALSE; $Inner = TRUE; }
- elseif( $Inner )
- {
- if (( $Angle < 90 || $Angle > 270 ) && isset($Plots["BottomPoly"][$ID*2]) )
- {
- $Xo = $Plots["BottomPoly"][$ID*2];
- $Yo = $Plots["BottomPoly"][$ID*2+1];
-
- $InnerPlotsA[] = $Xo; $InnerPlotsA[] = $Yo;
- $InnerPlotsB[] = $Xo; $InnerPlotsB[] = $Yo-$SliceHeight;
- }
- }
- }
-
- if ( $InnerPlotsA != "" )
- { $InnerPlots = array_merge($InnerPlotsA,$this->arrayReverse($InnerPlotsB)); $this->pChartObject->drawPolygon($InnerPlots,$Settings); }
- }
-
- /* Draw the splice top and left poly */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
- $Settings["R"] = $Settings["R"]+$Cf*1.5; $Settings["G"] = $Settings["G"]+$Cf*1.5; $Settings["B"] = $Settings["B"]+$Cf*1.5;
-
- $StartAngle = $Plots["Angle"][0];
- foreach($Plots["Angle"] as $Key =>$Angle) { if ($Angle == VOID) { $EndAngle = $Plots["Angle"][$Key-1]; } }
-
- if ( $StartAngle < 180 )
- {
- $Points = "";
- $Points[] = $Plots["InX2"];
- $Points[] = $Plots["InY2"];
- $Points[] = $Plots["InX2"];
- $Points[] = $Plots["InY2"]-$SliceHeight;
- $Points[] = $Plots["OutX1"];
- $Points[] = $Plots["OutY1"]-$SliceHeight;
- $Points[] = $Plots["OutX1"];
- $Points[] = $Plots["OutY1"];
-
- $this->pChartObject->drawPolygon($Points,$Settings);
- }
-
- if ( $EndAngle > 180 )
- {
- $Points = "";
- $Points[] = $Plots["InX1"];
- $Points[] = $Plots["InY1"];
- $Points[] = $Plots["InX1"];
- $Points[] = $Plots["InY1"]-$SliceHeight;
- $Points[] = $Plots["OutX2"];
- $Points[] = $Plots["OutY2"]-$SliceHeight;
- $Points[] = $Plots["OutX2"];
- $Points[] = $Plots["OutY2"];
-
- $this->pChartObject->drawPolygon($Points,$Settings);
- }
- }
-
-
- /* Draw the vertical edges (visible) */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
- $Settings["R"] = $Settings["R"]+$Cf; $Settings["G"] = $Settings["G"]+$Cf; $Settings["B"] = $Settings["B"]+$Cf;
-
- $StartAngle = $Plots["Angle"][0];
- foreach($Plots["Angle"] as $Key =>$Angle) { if ($Angle == VOID) { $EndAngle = $Plots["Angle"][$Key-1]; } }
-
- if ( $StartAngle <= 270 && $StartAngle >= 90 )
- $this->pChartObject->drawLine($Plots["OutX1"],$Plots["OutY1"],$Plots["OutX1"],$Plots["OutY1"]-$SliceHeight,$Settings);
- if ( $EndAngle <= 270 && $EndAngle >= 90 )
- $this->pChartObject->drawLine($Plots["OutX2"],$Plots["OutY2"],$Plots["OutX2"],$Plots["OutY2"]-$SliceHeight,$Settings);
- }
-
-
- /* Draw the outer vertical slices */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
- $Settings["R"] = $Settings["R"]+$Cf; $Settings["G"] = $Settings["G"]+$Cf; $Settings["B"] = $Settings["B"]+$Cf;
-
- $Outer = TRUE; $Inner = FALSE;
- $OuterPlotsA = ""; $OuterPlotsB = ""; $InnerPlotsA = ""; $InnerPlotsB = "";
- foreach($Plots["Angle"] as $ID => $Angle)
- {
- if ( $Angle == VOID )
- { $Outer = FALSE; $Inner = TRUE; }
- elseif( $Outer )
- {
- if ( ( $Angle > 90 && $Angle < 270 ) && isset($Plots["BottomPoly"][$ID*2]) )
- {
- $Xo = $Plots["BottomPoly"][$ID*2];
- $Yo = $Plots["BottomPoly"][$ID*2+1];
-
- $OuterPlotsA[] = $Xo; $OuterPlotsA[] = $Yo;
- $OuterPlotsB[] = $Xo; $OuterPlotsB[] = $Yo-$SliceHeight;
- }
- }
- }
- if ( $OuterPlotsA != "" )
- { $OuterPlots = array_merge($OuterPlotsA,$this->arrayReverse($OuterPlotsB)); $this->pChartObject->drawPolygon($OuterPlots,$Settings); }
- }
-
- $Slices = array_reverse($Slices);
- $SliceColors = array_reverse($SliceColors);
-
-
- /* Draw the top pie splice */
- foreach($Slices as $SliceID => $Plots)
- {
- $Settings = $SliceColors[$SliceID]; $Settings["NoBorder"] = TRUE;
- $Settings["R"] = $Settings["R"]+$Cf*2; $Settings["G"] = $Settings["G"]+$Cf*2; $Settings["B"] = $Settings["B"]+$Cf*2;
-
- $this->pChartObject->drawPolygon($Plots["TopPoly"],$Settings);
-
- if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("POLY",$this->arraySerialize($Plots["TopPoly"]),$this->pChartObject->toHTMLColor($Settings["R"],$Settings["G"],$Settings["B"]),$Data["Series"][$Data["Abscissa"]]["Data"][$SliceID],$Data["Series"][$DataSerie]["Data"][count($Slices)-$SliceID-1]); }
-
- foreach($Plots["AA"] as $Key => $Pos)
- $this->pChartObject->drawAntialiasPixel($Pos[0],$Pos[1]-$SliceHeight,$Settings);
-
- $this->pChartObject->drawLine($Plots["InX1"],$Plots["InY1"]-$SliceHeight,$Plots["OutX2"],$Plots["OutY2"]-$SliceHeight,$Settings);
- $this->pChartObject->drawLine($Plots["InX2"],$Plots["InY2"]-$SliceHeight,$Plots["OutX1"],$Plots["OutY1"]-$SliceHeight,$Settings);
- }
-
- if ( $DrawLabels )
- {
- $Offset = 360;
- foreach($Values as $Key => $Value)
- {
- $StartAngle = $Offset;
- $EndAngle = $Offset-($Value*$ScaleFactor); if ( $EndAngle < 0 ) { $EndAngle = 0; }
-
- if ( $LabelColor == PIE_LABEL_COLOR_AUTO )
- { $Settings = array("FillR"=>$Palette[$ID]["R"],"FillG"=>$Palette[$ID]["G"],"FillB"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"]);}
- else
- { $Settings = array("FillR"=>$LabelR,"FillG"=>$LabelG,"FillB"=>$LabelB,"Alpha"=>$LabelAlpha); }
-
- $Angle = ($EndAngle - $Offset)/2 + $Offset;
- $Xc = cos(($Angle-90)*PI/180) * ($OuterRadius+$DataGapRadius) + $X;
- $Yc = sin(($Angle-90)*PI/180) * ($OuterRadius+$DataGapRadius)*$SkewFactor + $Y;
-
- if ( $WriteValues == PIE_VALUE_PERCENTAGE )
- $Label = $Display = round(( 100 / $SerieSum ) * $Value,$Precision)."%";
- elseif ( $WriteValues == PIE_VALUE_NATURAL )
- $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$Key];
- else
- $Label = "";
-
- if ( $LabelStacked )
- $this->writePieLabel($Xc,$Yc-$SliceHeight,$Label,$Angle,$Settings,TRUE,$X,$Y,$OuterRadius);
- else
- $this->writePieLabel($Xc,$Yc-$SliceHeight,$Label,$Angle,$Settings,FALSE);
-
- $Offset = $EndAngle - $DataGapAngle; $ID--; $Slice++;
- }
- }
- if ( $DrawLabels && $LabelStacked ) { $this->writeShiftedLabels(); }
-
- $this->pChartObject->Shadow = $RestoreShadow;
-
- return(PIE_RENDERED);
- }
-
- /* Serialize an array */
- function arraySerialize($Data)
- {
- $Result = "";
- foreach($Data as $Key => $Value)
- { if ($Result == "") { $Result = floor($Value); } else { $Result = $Result.",".floor($Value); } }
-
- return($Result);
- }
-
- /* Reverse an array */
- function arrayReverse($Plots)
- {
- $Result = "";
-
- for($i=count($Plots)-1;$i>=0;$i=$i-2)
- { $Result[] = $Plots[$i-1]; $Result[] = $Plots[$i]; }
-
- return($Result);
- }
-
- /* Remove unused series & values */
- function clean0Values($Data,$Palette,$DataSerie,$AbscissaSerie)
- {
- $NewPalette = ""; $NewData = ""; $NewAbscissa = "";
-
- /* Remove unused series */
- foreach($Data["Series"] as $SerieName => $SerieSettings)
- { if ( $SerieName != $DataSerie && $SerieName != $AbscissaSerie ) { unset($Data["Series"][$SerieName]); } }
-
- /* Remove NULL values */
- foreach($Data["Series"][$DataSerie]["Data"] as $Key => $Value)
- {
- if ($Value != 0 )
- {
- $NewData[] = $Value;
- $NewAbscissa[] = $Data["Series"][$AbscissaSerie]["Data"][$Key];
- if ( isset($Palette[$Key]) ) { $NewPalette[] = $Palette[$Key]; }
- }
- }
- $Data["Series"][$DataSerie]["Data"] = $NewData;
- $Data["Series"][$AbscissaSerie]["Data"] = $NewAbscissa;
-
- return(array($Data,$NewPalette));
- }
- }
-?> \ No newline at end of file
diff --git a/libs/pChart/readme.txt b/libs/pChart/readme.txt
deleted file mode 100644
index 6004ea52e6..0000000000
--- a/libs/pChart/readme.txt
+++ /dev/null
@@ -1,143 +0,0 @@
-
- ╔════════════════════════════════════════════════════════════════════════════╗
- ║ ║
- ║ pChart - a PHP Charting library ║
- ║ ║
- ║ Version : 2.1.4 ║
- ║ Made by : Jean-Damien POGOLOTTI ║
- ║ Last Update : 19/01/2014 ║
- ║ ║
- ╚════════════════════════════════════════════════════════════════════════════╝
-
- ≡ WHAT CAN pCHART DO FOR YOU? ────────────────────────────────────────────────
-
- pChart is a PHP framework that will help you to create anti-aliased charts or
- pictures directly from your web server. You can then display the result in
- the client browser, sent it by mail or insert it into PDFs.
-
- This library has now reached an important point in its development cycle
- going out of the beta step. pChart 2.0 is a completly rewritten library based
- on what I've learned doing the first version.
-
-
- ≡ PACKAGE CONTENTS ───────────────────────────────────────────────────────────
-
- ┬
- │
- ├─ /cache This folder is used by the pCache module.
- │
- ├─ /class This folder contains the library core classes.
- │ │
- │ ├─ pBarcode39.class Class to draw Code 39 barcodes.
- │ ├─ pBarcode128.class Class to draw Code 128 barcodes.
- │ ├─ pBubble.class Class to draw bubble charts.
- │ ├─ pCache.class Class enabling chart caching functionalities.
- │ ├─ pData.class Class to manipulate chart data.
- │ ├─ pDraw.class Extended drawing functions.
- │ ├─ pIndicator.class Class to draw indicators.
- │ ├─ pImage.class Core drawing functions.
- │ ├─ pPie.class Class to draw pie charts.
- │ ├─ pSplit.class Class to draw split path charts.
- │ ├─ pSpring.class Class to draw spring charts.
- │ ├─ pScatter.class Class to draw scatter charts.
- │ ├─ pStock.class Class to draw stock charts.
- │ └─ pSurface.class Class to draw surface charts.
- │
- ├─ /data This folder contains extended data.
- │ │
- │ ├─ 39.db Code 39 barcodes static database.
- │ └─ 128.db Code 128 barcodes static database.
- │
- ├─ /examples This folder contains some PHP examples.
- │ │
- │ ├─ delayedLoader Delayed loader script example.
- │ ├─ imageMap Image map script example.
- │ └─ sandbox Powerful dev. tool to design your charts.
- │
- ├─ /fonts This folder contains a bunch of TTF fonts.
- │
- ├─ /palettes Sample palettes files.
- │
- ├─ change.log History of all the changes since the 2.0
- ├─ GPLv3.txt GPLv3 official text.
- └─ readme.txt This file.
-
-
- ≡ PREREQUiSiTES ──────────────────────────────────────────────────────────────
-
- This library has been written to work with PHP 5+ versions. It will also work
- with PHP 4 but the rendering quality maybe downgraded and the rendering speed
- seriously impacted.
-
- pChart require the GD and FreeType PHP extensions to be installed on your
- web server. This is an important prerequiste that can't be overrided.
-
-
- ≡ RUNNiNG THE EXAMPLES ───────────────────────────────────────────────────────
-
- pChart is shipped with examples (located in the /examples folder) that you
- can either render from a web page using your http and pointing to this folder
- or from the command line invoking the php interpreter.
-
- On windows OS, assuming that your PHP binaries are correctly configured in
- the PATH environment variable you can also execute the BuildAll.cmd batch
- file.
-
-
- ≡ LiCENSE ────────────────────────────────────────────────────────────────────
-
- The pChart library is released under two different licenses. If your
- application is not a commercial one (eg: you make no money by redistributing
- it) then the GNU GPLv3 license (General Public License) applies. This license
- allows you to freely integrate this library in your applications, modify the
- code and redistribute it in bundled packages as long as your application is
- also distributed with the GPL license.
-
- The GPLv3 license description can be found in GPLv3.txt.
-
- If your application can't meet the GPL license or is a commercial one (eg:
- the library is integrated in a software or an appliance you're selling) then
- you'll have to buy a commercial license. With this license you don't need to
- make publicly available your application code under the GPL license terms.
-
- Commercial license price are depending of your needs.
-
- Please consult the web page : http://www.pchart.net/license
-
-
- ≡ EXTERNAL COPYRiGHTS ────────────────────────────────────────────────────────
-
- Those external components are only provided as a base to run examples. The
- pChart library does not depends on any of them to be used.
-
- Famfamfam icons has been made by Mark James, Rounded corners lite has been
- coded by Cameron Cooke and Tim Hutchison, Javascript Color Picker has been
- written by Honza Odvarko.
-
- The provided font files are licensed under their own terms :
-
- │
- ├─ advent_light.ttf Copyright Andreas K. inde
- ├─ Bedizen.ttf Copyright Tepid Monkey Fonts
- ├─ calibri.ttf Copyright Microsoft
- ├─ Forgotte.ttf Copyright Ray Larabie
- ├─ GeosansLight.ttf Copyright Manfred Klein
- ├─ MankSans.ttf Copyright Manfred Klein
- ├─ pf_arma_five.ttf Copyright Yusuke Kamiyamane
- ├─ Silkscreen.ttf Copyright Jason Aleksandr Kottke
- └─ verdana.ttf Copyright Microsoft
-
-
- ≡ SUPPORT ────────────────────────────────────────────────────────────────────
-
- Since the beginning, pChart is a community driven project. You're missing
- feature then ask! We'll try to get it implemented in the future version or
- you'll be guided to create a class extension for your own needs.
-
- pChart portal : http://www.pchart.net
- Documentation wiki : http://wiki.pchart.net
- Support forum : http://wiki.pchart.net/forum
-
-
- ---
- (c)2014 Jean-Damien POGOLOTTI - 13k lines of codes
diff --git a/plugins/Contents/lang/tr.json b/plugins/Contents/lang/tr.json
index e444b82427..0a9f304036 100644
--- a/plugins/Contents/lang/tr.json
+++ b/plugins/Contents/lang/tr.json
@@ -2,6 +2,8 @@
"Contents": {
"PluginDescription": "İçerik ve reklam izleme, sayfalarınızdaki herhangi bir içeriğin (reklam, görsel, herhangi bir öge) başarımının (görülme, tıklanma, CTR) izlenmesini sağlar.",
"Impressions": "Görülme",
+ "ContentInteraction": "İçerik Etkileşimi",
+ "ContentInteractions": "İçerik Etkileşimleri",
"InteractionRate": "Etkileşim Oranı",
"ContentName": "İçerik Adı",
"ContentPiece": "İçerik Parçası",
diff --git a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml
index 436975fff5..b16427cf44 100644
--- a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml
+++ b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml
@@ -76,7 +76,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -188,7 +188,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
diff --git a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml
index 436975fff5..b16427cf44 100644
--- a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml
+++ b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml
@@ -76,7 +76,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -188,7 +188,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
diff --git a/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml
index 436975fff5..b16427cf44 100644
--- a/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml
+++ b/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml
@@ -76,7 +76,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -188,7 +188,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
diff --git a/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml
index 436975fff5..b16427cf44 100644
--- a/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml
+++ b/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml
@@ -76,7 +76,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -188,7 +188,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
diff --git a/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml
index 436975fff5..b16427cf44 100644
--- a/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml
+++ b/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml
@@ -76,7 +76,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -188,7 +188,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
diff --git a/plugins/CoreAdminHome/CustomLogo.php b/plugins/CoreAdminHome/CustomLogo.php
index 75948fdc12..62856d1977 100644
--- a/plugins/CoreAdminHome/CustomLogo.php
+++ b/plugins/CoreAdminHome/CustomLogo.php
@@ -30,7 +30,7 @@ class CustomLogo
public function getHeaderLogoUrl($pathOnly = false)
{
- $defaultLogo = 'plugins/Morpheus/images/logo-header.png';
+ $defaultLogo = 'plugins/Morpheus/images/logo.svg';
$themeLogo = 'plugins/%s/images/logo-header.png';
$customLogo = static::getPathUserLogoSmall();
return $this->getPathToLogo($pathOnly, $defaultLogo, $themeLogo, $customLogo);
diff --git a/plugins/CoreAdminHome/lang/de.json b/plugins/CoreAdminHome/lang/de.json
index c29bcdc690..6fbf8a17e0 100644
--- a/plugins/CoreAdminHome/lang/de.json
+++ b/plugins/CoreAdminHome/lang/de.json
@@ -45,6 +45,7 @@
"JSTracking_TrackNoScript": "Benutzer mit deaktiviertem JavaScript tracken",
"JSTracking_VisitorCustomVars": "Benutzerdefinierte Variable für diesen Besucher aufzeichnen",
"JSTracking_VisitorCustomVarsDesc": "Zum Beispiel mit dem Variablennamen \"Typ\" und dem Wert \"Kunde\".",
+ "JSTracking_EndNote": "Hinweis: Sie können sich einen angepassten Tracking Code unter Einstellungen > %1$sTracking Code%2$s erzeugen.",
"JSTrackingIntro1": "Es gibt viele verschiedene Möglichkeiten Besucher Ihrer Website zu tracken. Die empfohlene Art und Weise dies zu tun, ist die Verwendung von JavaScript. Um diese Methode zu nutzen müssen Sie sicher stellen, dass auf jeder Seite Ihrer Website ein JavaScript-Code eingebunden ist. Diesen können Sie hier generieren.",
"JSTrackingIntro2": "Sobald Sie den JavaScript Tracking Code für Ihre Website haben, fügen Sie ihn auf allen Seiten ein, die Sie mit Piwik überwachen möchten.",
"JSTrackingIntro3b": "Bei den meisten Webseiten, Blogs und CMS, etc. können Sie ein existierendes Plugin benutzen, das Ihnen die technische Arbeit abnimmt. (Schauen Sie hierzu in die %1$sListe der Plugins um Piwik zu integrieren%2$s.) Falls kein passendes Plugin besteht können Sie die Templates Ihrer Webseite bearbeiten und diesen Quellcode in den %lt;\/head&gt;-Tag einfügen. Dieser ist häufig in einer 'header.php' oder header.tpl' oder ähnlich benannten Template-Datei definiert.",
diff --git a/plugins/CoreAdminHome/lang/el.json b/plugins/CoreAdminHome/lang/el.json
index 57ac255474..e24ee25c6e 100644
--- a/plugins/CoreAdminHome/lang/el.json
+++ b/plugins/CoreAdminHome/lang/el.json
@@ -45,6 +45,7 @@
"JSTracking_TrackNoScript": "Παρακολούθηση χρηστών με απενεργοποιημένη τη JavaScript",
"JSTracking_VisitorCustomVars": "Παρακολούθηση προσαρμοσμένων μεταβλητών για αυτό τον επισκέπτη",
"JSTracking_VisitorCustomVarsDesc": "Για παράδειγμα, με όνομα της μεταβλητής \"Τύπος\" και τιμή \"Πελάτης\".",
+ "JSTracking_EndNote": "Σημείωση: Μπορείτε να δημιουργήσετε προσαρμοσμένο κώδικα παρακολούθησης στο τμήμα διαχείρισης του %1$sΚώδικα Παρακολούθησης%2$s.",
"JSTrackingIntro1": "Μπορείτε να παρακολουθείτε τους επισκέπτες στον ιστοτόπο σας με πολλούς διαφορετικούς τρόπους. Ο συνιστώμενος τρόπος είναι μέσω της JavaScript. Για να χρησιμοποιήσετε αυτή τη μέθοδο θα πρέπει να βεβαιωθείτε ότι κάθε σελίδα του ιστοτόπου σας έχει κάποιο κώδικα JavaScript, τον οποίο μπορείτε να δημιουργήσετε εδώ.",
"JSTrackingIntro2": "Μόλις έχετε το JavaScript κώδικα παρακολούθησης για την ιστοσελίδα σας, αντιγράψετε και επικολλήστε τον σε όλες τις σελίδες που θέλετε να παρακολουθήσετε με το Piwik.",
"JSTrackingIntro3b": "Στους περισσότερους ιστοτόπους, ιστολόγια, CMS, κτλ. μπορείτε να χρησιμοποιήσετε ένα προ-κατασκευασμένο πρόσθετο που θα εκτελεί την τεχνική εργασία για εσάς. (Δείτε τη %1$sλίστα των πρόσθετων για ενσωμάτωση με το Piwik%2$s.) Αν δεν υπάρχει πρόσθετο μπορείτε να επεξεργαστείτε τα αρχεία προτύπου του ιστοτόπου σας και να προσθέσετε τον κώδικα στη σήμανση &lt;\/head&gt; που συχνά ορίζεται στο αρχείο 'header.php', 'header.tpl' ή παρόμοιο αρχείο προτύπου.",
diff --git a/plugins/CoreAdminHome/lang/en.json b/plugins/CoreAdminHome/lang/en.json
index bc045654e7..4c718121f0 100644
--- a/plugins/CoreAdminHome/lang/en.json
+++ b/plugins/CoreAdminHome/lang/en.json
@@ -45,6 +45,7 @@
"JSTracking_TrackNoScript": "Track users with JavaScript disabled",
"JSTracking_VisitorCustomVars": "Track custom variables for this visitor",
"JSTracking_VisitorCustomVarsDesc": "For example, with variable name \"Type\" and value \"Customer\".",
+ "JSTracking_EndNote": "Note: You can generate a customized tracking code in the %1$sTracking Code%2$s admin section.",
"JSTrackingIntro1": "You can track visitors to your website many different ways. The recommended way to do it is through JavaScript. To use this method you must make sure every webpage of your website has some JavaScript code, which you can generate here.",
"JSTrackingIntro2": "Once you have the JavaScript tracking code for your website, copy and paste it to all the pages you want to track with Piwik.",
"JSTrackingIntro3b": "In most websites, blogs, CMS, etc. you can use a pre-made plugin to do the technical work for you. (See our %1$slist of plugins used to integrate Piwik%2$s.) If no plugin exists you can edit your website templates and add this code to the &lt;/head&gt; tag which is often defined in a 'header.php', 'header.tpl' or similar template file.",
diff --git a/plugins/CoreAdminHome/lang/pt-br.json b/plugins/CoreAdminHome/lang/pt-br.json
index 1829bfe5bc..9ed3e637da 100644
--- a/plugins/CoreAdminHome/lang/pt-br.json
+++ b/plugins/CoreAdminHome/lang/pt-br.json
@@ -40,6 +40,7 @@
"JSTracking_MergeSubdomainsDesc": "Portanto se um visitante acessar %1$s e %2$s, ele será contado como visitante único.",
"JSTracking_PageCustomVars": "Setar uma variável personalizada para cada exibição de página",
"JSTracking_PageCustomVarsDesc": "Por exemplo, com variável de nome \"Categoria\" e valor \"White Papers\".",
+ "JSTracking_TrackNoScript": "Rastreia usuários com JavaScript desabilitado",
"JSTracking_VisitorCustomVars": "Setar variáveis personalizadas para este visitante",
"JSTracking_VisitorCustomVarsDesc": "Por exemplo, com nome da variável \"Tipo\" e valor \"Cliente\".",
"JSTrackingIntro1": "Você pode rastrear os visitantes de seu site muitas maneiras diferentes. A maneira recomendada de fazer isso é através de JavaScript. Para usar este método, você deve se certificar de que cada página do seu site possui o código JavaScript que você pode gerar aqui.",
diff --git a/plugins/CoreAdminHome/lang/sq.json b/plugins/CoreAdminHome/lang/sq.json
index 8ac03ea920..a0cf52f8ea 100644
--- a/plugins/CoreAdminHome/lang/sq.json
+++ b/plugins/CoreAdminHome/lang/sq.json
@@ -45,6 +45,7 @@
"JSTracking_TrackNoScript": "Ndiqi përdoruesit me JavaScript të çaktivizuar",
"JSTracking_VisitorCustomVars": "Ndiqni ndryshore vetjake për këtë vizitor",
"JSTracking_VisitorCustomVarsDesc": "Për shembull, me emër ndryshoreje \"Lloj\" dhe vlerë \"Klient\".",
+ "JSTracking_EndNote": "Shënim: Te ndarja %1$sKod Ndjekjeje%2$s e përgjegjësit mund të prodhoni kod vetjak ndjekjesh.",
"JSTrackingIntro1": "Vizitorët në sajtin tuaj mund t’i ndiqni në mjaft rrugë të ndryshme. Rruga e këshilluar për ta bërë është përmes JavaScript-it. Për të përdorur këtë metodë, duhet të garantoni që çdo faqe e sajtit tuaj të përmbajë një copëz kodi JavaScript, të cilin mund ta prodhoni nga këtu.",
"JSTrackingIntro2": "Pasi të keni kodin JavaScript të ndjekjes për sajtin tuaj, kopjojeni dhe hidheni te krejt faqet që dëshironi të ndiqni me Piwik.",
"JSTrackingIntro3b": "Në shumicën e sajteve, blogjeve, CMS-ve, etj. mund të përdorni shtojca të gatshme që do të bënin për ju punën teknike. (Shihni %1$slistën tonë të shtojcave të përdorura për të integruar Piwik-un%2$s.) Nëse nuk ka shtojcë të tillë, mund të përpunoni gjedhet e sajtit tuaj dhe të shtoni këtë kod te etiketa &lt;\/head&gt;, e cila shpesh përkufizohet brenda një kartele gjedhe 'header.php', 'header.tpl' ose të ngjashme.",
diff --git a/plugins/CoreAdminHome/lang/zh-tw.json b/plugins/CoreAdminHome/lang/zh-tw.json
index 3430c9a49a..86c3649ffc 100644
--- a/plugins/CoreAdminHome/lang/zh-tw.json
+++ b/plugins/CoreAdminHome/lang/zh-tw.json
@@ -45,6 +45,7 @@
"JSTracking_TrackNoScript": "追蹤已禁用 JavaScript 的訪客",
"JSTracking_VisitorCustomVars": "為此訪客追蹤自訂變數",
"JSTracking_VisitorCustomVarsDesc": "例如變數名稱為「類型」,值為「顧客」。",
+ "JSTracking_EndNote": "注意:你可以在管理中心的%1$s追蹤程式碼%2$s頁面中產生自訂的追蹤程式碼。",
"JSTrackingIntro1": "你可以透過多種不同的方式追蹤你的網站訪客。推薦使用 JavaScript 的追蹤方式。要使用此方法必須先確定你網站中的每一頁都有一樣的 JavaScript 程式碼,你可以在這裡產生。",
"JSTrackingIntro2": "當你有了網站的 JavaScript 追蹤程式碼,請複製並貼上到所有你想透過 Piwik 追蹤的頁面上。",
"JSTrackingIntro3b": "多數的網站、部落格、CMS 等等。你可以使用一個預製的外掛來幫你做技術性的工作。(查看%1$s用來整合 Piwik 的外掛列表%2$s。)如果沒有看到你想要的外掛,你可以直接編輯網站的模板,並將程式碼貼到 &lt;\/head&gt; 標籤之前,通常出現在「header.php」、「header.tpl」等類似的模板檔案中。",
diff --git a/plugins/CoreHome/DataTableRowAction/RowEvolution.php b/plugins/CoreHome/DataTableRowAction/RowEvolution.php
index e7e46820f5..5a6a83c46a 100644
--- a/plugins/CoreHome/DataTableRowAction/RowEvolution.php
+++ b/plugins/CoreHome/DataTableRowAction/RowEvolution.php
@@ -130,7 +130,7 @@ class RowEvolution
$metricsText = Piwik::translate('RowEvolution_AvailableMetrics');
$popoverTitle = '';
if ($this->rowLabel) {
- $icon = $this->rowIcon ? '<img width="16px" height="16px" src="' . $this->rowIcon . '" alt="">' : '';
+ $icon = $this->rowIcon ? '<img height="16px" src="' . $this->rowIcon . '" alt="">' : '';
$metricsText = sprintf(Piwik::translate('RowEvolution_MetricsFor'), $this->dimension . ': ' . $icon . ' ' . $this->rowLabel);
$popoverTitle = $icon . ' ' . $this->rowLabel;
}
diff --git a/plugins/CoreHome/lang/pt-br.json b/plugins/CoreHome/lang/pt-br.json
index 35060bd57a..84a4df9462 100644
--- a/plugins/CoreHome/lang/pt-br.json
+++ b/plugins/CoreHome/lang/pt-br.json
@@ -5,6 +5,7 @@
"CheckForUpdates": "Verificar atualizações",
"CheckPiwikOut": "Verificar saída do Piwik",
"ClickToEditX": "Clique para editar %s",
+ "ClickToSeeFullInformation": "Clique para ver toda a informação",
"CloseSearch": "Fechar busca",
"CloseWidgetDirections": "Você pode fechar esta ferramenta clicando no ícone \"X\" na parte superior do widget.",
"DataForThisReportHasBeenPurged": "Os dados para este relatório possuem mais de %s meses e foram excluídos.",
@@ -49,6 +50,7 @@
"YouAreUsingTheLatestVersion": "Você está usando a última versão do Piwik!",
"ClickRowToExpandOrContract": "Clique nesta linha para expandir ou contrair a subtabela.",
"UndoPivotBySubtable": "Este relatório foi articulado %s desfazer articulação",
+ "NoSuchPage": "Esta página não existe",
"PivotBySubtable": "Este relatório não foi articulado %1$s Articular por %2$s",
"SystemSummaryWidget": "Resumo do Sistema",
"SystemSummaryNWebsites": "%d websites",
diff --git a/plugins/CoreHome/lang/zh-tw.json b/plugins/CoreHome/lang/zh-tw.json
index fb56b7839d..848918f85f 100644
--- a/plugins/CoreHome/lang/zh-tw.json
+++ b/plugins/CoreHome/lang/zh-tw.json
@@ -14,7 +14,7 @@
"DataTableIncludeAggregateRows": "合計列已隱藏 %s 點擊顯示",
"DataTableHowToSearch": "按下 Enter 鍵或點擊搜尋圖示來搜尋",
"Default": "預設",
- "DonateCall1": "使用 Piwik 永遠不花你任何一毛錢,但那不表示我們開發沒有花到錢。",
+ "DonateCall1": "使用 Piwik 永遠不花你任何一毛錢,但那不表示我們開發不需要花到半毛錢。",
"DonateCall2": "Piwik 需要你的持續支持以成長茁壯。",
"DonateCall3": "如果你覺得 Piwik 為你的事業或是奮鬥過程中增添了非凡的價值,%1$s請考慮捐助%2$s或是%3$s購買高級功能%4$s。每一分錢都是幫助。",
"DonateFormInstructions": "使用滑桿來選擇數量,接著點擊 Subscribe 來捐助。",
diff --git a/plugins/CoreHome/stylesheets/dataTable/_dataTable.less b/plugins/CoreHome/stylesheets/dataTable/_dataTable.less
index 5c321005ad..2015f6ea2e 100644
--- a/plugins/CoreHome/stylesheets/dataTable/_dataTable.less
+++ b/plugins/CoreHome/stylesheets/dataTable/_dataTable.less
@@ -480,7 +480,6 @@ tr.level12 td.label {
table.dataTable td.label img {
margin-top: -3px;
- max-width: 16px;
max-height: 16px;
}
diff --git a/plugins/CoreHome/templates/ReportRenderer/_htmlReportBody.twig b/plugins/CoreHome/templates/ReportRenderer/_htmlReportBody.twig
index d331175edd..87364415df 100644
--- a/plugins/CoreHome/templates/ReportRenderer/_htmlReportBody.twig
+++ b/plugins/CoreHome/templates/ReportRenderer/_htmlReportBody.twig
@@ -53,7 +53,9 @@
{% if columnId == 'label' %}
{% if rowMetrics[columnId] is defined %}
{% if rowMetadata.logo is defined %}
- <img width="16px" height="16px" src='{{ currentPath }}{{ rowMetadata.logo }}'>
+ <img height="16px" src='{{ currentPath }}{{ rowMetadata.logo }}'
+ {%- if 'plugins/Morpheus/icons/dist/flags' in rowMetadata.logo %} style="border: 1px solid lightgray; "{% endif -%}
+ >
&nbsp;
{% endif %}
{% if rowMetadata.url is defined %}
diff --git a/plugins/CorePluginsAdmin/lang/de.json b/plugins/CorePluginsAdmin/lang/de.json
index 09b1f1cb1e..a1e0c9c9d5 100644
--- a/plugins/CorePluginsAdmin/lang/de.json
+++ b/plugins/CorePluginsAdmin/lang/de.json
@@ -37,6 +37,7 @@
"NoPluginSettings": "Es gibt keine Einstellungen dieser Erweiterung, die konfiguriert werden können",
"Origin": "Quelle",
"OriginCore": "Core",
+ "OriginOfficial": "Offiziell",
"OriginThirdParty": "Dritt-Anbieter",
"PluginHomepage": "Plugin-Website",
"PluginNotCompatibleWith": "Das Plugin %1$s ist nicht kompatibel mit %2$s.",
diff --git a/plugins/CorePluginsAdmin/lang/el.json b/plugins/CorePluginsAdmin/lang/el.json
index 15bbccc1c1..84d4792a2f 100644
--- a/plugins/CorePluginsAdmin/lang/el.json
+++ b/plugins/CorePluginsAdmin/lang/el.json
@@ -37,6 +37,7 @@
"NoPluginSettings": "Δεν υπάρχουν ρυθμίσεις που μπορούν να παραμετροποιηθούν",
"Origin": "Προέλευση",
"OriginCore": "Πυρήνας",
+ "OriginOfficial": "Επίσημο",
"OriginThirdParty": "Από τρίτες πηγές",
"PluginHomepage": "Ιστοσελίδα πρόσθετου",
"PluginNotCompatibleWith": "Το πρόσθετο %1$s δεν είναι συμβατό με το %2$s.",
diff --git a/plugins/CorePluginsAdmin/lang/fr.json b/plugins/CorePluginsAdmin/lang/fr.json
index a4683c5d31..c0957b7bbb 100644
--- a/plugins/CorePluginsAdmin/lang/fr.json
+++ b/plugins/CorePluginsAdmin/lang/fr.json
@@ -37,6 +37,7 @@
"NoPluginSettings": "Aucun paramètre de plugin ne peut être configuré",
"Origin": "Origine",
"OriginCore": "Principal",
+ "OriginOfficial": "Officiel",
"OriginThirdParty": "Tierce-Partie",
"PluginHomepage": "Page d'accueil du plugin",
"PluginNotCompatibleWith": "Le composant %1$s n'est pas compatible avec %2$s.",
diff --git a/plugins/CorePluginsAdmin/lang/sq.json b/plugins/CorePluginsAdmin/lang/sq.json
index 3bc6306e4e..375bac5796 100644
--- a/plugins/CorePluginsAdmin/lang/sq.json
+++ b/plugins/CorePluginsAdmin/lang/sq.json
@@ -37,6 +37,7 @@
"NoPluginSettings": "S’ka rregullime shtojce që mund të formësohen",
"Origin": "Origjina",
"OriginCore": "Bazë",
+ "OriginOfficial": "Zyrtare",
"OriginThirdParty": "Prej palësh të treta",
"PluginHomepage": "Faqe Hyrëse e Shtojcës",
"PluginNotCompatibleWith": "Shtojca %1$s s’është e përputhshme me %2$s.",
diff --git a/plugins/CorePluginsAdmin/lang/zh-tw.json b/plugins/CorePluginsAdmin/lang/zh-tw.json
index 7f6151bba2..6b475ed777 100644
--- a/plugins/CorePluginsAdmin/lang/zh-tw.json
+++ b/plugins/CorePluginsAdmin/lang/zh-tw.json
@@ -37,6 +37,7 @@
"NoPluginSettings": "沒有可以可以變更設定的外掛",
"Origin": "來源",
"OriginCore": "核心",
+ "OriginOfficial": "官方",
"OriginThirdParty": "第三方",
"PluginHomepage": "外掛首頁",
"PluginNotCompatibleWith": "%1$s 個外掛和 %2$s 不相容。",
diff --git a/plugins/CoreUpdater/Test/Integration/UpdateCommunicationTest.php b/plugins/CoreUpdater/Test/Integration/UpdateCommunicationTest.php
index 5b4a03cb37..8533e5675c 100644
--- a/plugins/CoreUpdater/Test/Integration/UpdateCommunicationTest.php
+++ b/plugins/CoreUpdater/Test/Integration/UpdateCommunicationTest.php
@@ -79,6 +79,8 @@ CoreUpdater_YouCanUpgradeAutomaticallyOrDownloadPackage
CoreUpdater_ViewVersionChangelog
http://piwik.org/changelog/piwik-33-0-0/
+CoreUpdater_ReceiveEmailBecauseIsSuperUser
+
CoreUpdater_FeedbackRequest
http://piwik.org/contact/";
@@ -95,6 +97,8 @@ CoreUpdater_ThereIsNewVersionAvailableForUpdate
CoreUpdater_YouCanUpgradeAutomaticallyOrDownloadPackage
{$rootUrl}index.php?module=CoreUpdater&action=newVersionAvailable
+CoreUpdater_ReceiveEmailBecauseIsSuperUser
+
CoreUpdater_FeedbackRequest
http://piwik.org/contact/";
diff --git a/plugins/CoreUpdater/UpdateCommunication.php b/plugins/CoreUpdater/UpdateCommunication.php
index d39f44c111..971bd16fa0 100644
--- a/plugins/CoreUpdater/UpdateCommunication.php
+++ b/plugins/CoreUpdater/UpdateCommunication.php
@@ -79,6 +79,8 @@ class UpdateCommunication
$message .= "\n\n";
}
+ $message .= Piwik::translate('CoreUpdater_ReceiveEmailBecauseIsSuperUser', $host);
+ $message .= "\n\n";
$message .= Piwik::translate('CoreUpdater_FeedbackRequest');
$message .= "\n";
$message .= 'http://piwik.org/contact/';
diff --git a/plugins/CoreUpdater/lang/el.json b/plugins/CoreUpdater/lang/el.json
index ce020be4c8..771bfea8b1 100644
--- a/plugins/CoreUpdater/lang/el.json
+++ b/plugins/CoreUpdater/lang/el.json
@@ -77,6 +77,7 @@
"YouCanUpgradeAutomaticallyOrDownloadPackage": "Μπορείτε να αναβαθμίσετε στην έκδοση %s αυτόματα ή λάβετε το πακέτο και εγκαταστήστε τη χειροκίνητα:",
"YouMustDownloadPackageOrFixPermissions": "Το Piwik δεν μπορεί να αντικαταστήσει την υπάρχουσα εγκατάσταση. Μπορείτε να διορθώσετε τα δικαιώματα πρόσβασης των φακέλων\/αρχείων ή κατεβάστε το πακέτο και εγκαταστήστε την έκδοση %s χειροκίνητα.",
"YourDatabaseIsOutOfDate": "Η βάση δεδομένων του Piwik είναι παλιά και πρέπει να αναβαθμιστεί προτού συνεχίσετε.",
- "ViewVersionChangelog": "Δείτε τις αλλαγές για αυτή την έκδοση:"
+ "ViewVersionChangelog": "Δείτε τις αλλαγές για αυτή την έκδοση:",
+ "ReceiveEmailBecauseIsSuperUser": "Λαμβάνετε το e-mail επειδή είστε Υπερ-Χρήστης του Piwik στο: %s"
}
} \ No newline at end of file
diff --git a/plugins/CoreUpdater/lang/en.json b/plugins/CoreUpdater/lang/en.json
index cd517e0d31..16d2d91aed 100644
--- a/plugins/CoreUpdater/lang/en.json
+++ b/plugins/CoreUpdater/lang/en.json
@@ -77,6 +77,7 @@
"YouCanUpgradeAutomaticallyOrDownloadPackage": "You can update to version %s automatically or download the package and install it manually:",
"YouMustDownloadPackageOrFixPermissions": "Piwik is unable to overwrite your current installation. You can either fix the directory\/file permissions, or download the package and install version %s manually:",
"YourDatabaseIsOutOfDate": "Your Piwik database is out-of-date, and must be upgraded before you can continue.",
- "ViewVersionChangelog": "View the changelog for this version:"
+ "ViewVersionChangelog": "View the changelog for this version:",
+ "ReceiveEmailBecauseIsSuperUser": "You receive this email because you are a Super User on the Piwik at: %s"
}
} \ No newline at end of file
diff --git a/plugins/CoreUpdater/lang/fr.json b/plugins/CoreUpdater/lang/fr.json
index ac9cf688cb..8adec2ba2f 100644
--- a/plugins/CoreUpdater/lang/fr.json
+++ b/plugins/CoreUpdater/lang/fr.json
@@ -77,6 +77,7 @@
"YouCanUpgradeAutomaticallyOrDownloadPackage": "Vous pouvez mettre à jour vers la version %s automatiquement ou télécharger l'archive et l'installer manuellement :",
"YouMustDownloadPackageOrFixPermissions": "Piwik ne peut pas écraser votre installation courante. Vous pouvez soit corriger les permissions du répertoire\/fichier, soit télécharger le package et installer la version %s manuellement:",
"YourDatabaseIsOutOfDate": "Votre base de données est expirée et doit être mise à jour avant de pouvoir continuer.",
- "ViewVersionChangelog": "Voir les changements pour cette version :"
+ "ViewVersionChangelog": "Voir les changements pour cette version :",
+ "ReceiveEmailBecauseIsSuperUser": "Vous recevez ce courriel car vous êtes un super utilisateur de l'installation Piwik à l'adresse: %s"
}
} \ No newline at end of file
diff --git a/plugins/CoreUpdater/lang/sq.json b/plugins/CoreUpdater/lang/sq.json
index 2783cc9115..715382f57a 100644
--- a/plugins/CoreUpdater/lang/sq.json
+++ b/plugins/CoreUpdater/lang/sq.json
@@ -77,6 +77,7 @@
"YouCanUpgradeAutomaticallyOrDownloadPackage": "Mund ta përmirësoni automatikisht me versionin %s, ose të shkarkoni paketën dhe ta instaloni atë dorazi:",
"YouMustDownloadPackageOrFixPermissions": "Piwik-u s’është në gjendje të mbishkruajë instalimin tuaj të tanishëm. Mundeni ose të ndreqni lejet mbi drejtorira\/kartela, ose të shkarkoni paketën dhe instaloni versionin %s dorazi:",
"YourDatabaseIsOutOfDate": "Baza juaj e të dhënave për Piwik-un është e vjetruar, dhe duhet përmirësuar përpara se të mund të vazhdoni.",
- "ViewVersionChangelog": "Shihni regjistër ndryshimesh për këtë version:"
+ "ViewVersionChangelog": "Shihni regjistër ndryshimesh për këtë version:",
+ "ReceiveEmailBecauseIsSuperUser": "E morët këtë email ngaqë jeni një Superpërdorues Piwik-u te: %s"
}
} \ No newline at end of file
diff --git a/plugins/CoreUpdater/lang/zh-tw.json b/plugins/CoreUpdater/lang/zh-tw.json
index e4aa286fd4..5c2599d25d 100644
--- a/plugins/CoreUpdater/lang/zh-tw.json
+++ b/plugins/CoreUpdater/lang/zh-tw.json
@@ -77,6 +77,7 @@
"YouCanUpgradeAutomaticallyOrDownloadPackage": "你可以自動更新至版本 %s ,或是下載壓縮檔並手動安裝它:",
"YouMustDownloadPackageOrFixPermissions": "Piwik 無法覆寫你當前的安裝。你可以修改資料夾\/檔案權限,或是下載安裝包然後手動安裝版本 %s:",
"YourDatabaseIsOutOfDate": "你的 Piwik 資料庫已經過期了,所以在繼續前必須先升級。",
- "ViewVersionChangelog": "查看此版本的更新紀錄:"
+ "ViewVersionChangelog": "查看此版本的更新紀錄:",
+ "ReceiveEmailBecauseIsSuperUser": "你會收到這封信件是因為你在 %s 的 Piwik 上是超級使用者。"
}
} \ No newline at end of file
diff --git a/plugins/CoreUpdater/templates/layout.twig b/plugins/CoreUpdater/templates/layout.twig
index e49d4bdd3e..4114ff463a 100644
--- a/plugins/CoreUpdater/templates/layout.twig
+++ b/plugins/CoreUpdater/templates/layout.twig
@@ -17,10 +17,15 @@
</head>
<body id="simple" ng-app="app">
+
<div class="logo">
- <img title="Piwik" alt="Piwik" src="{{ logoHeader }}"/>
- <br/>
- {{ 'General_OpenSourceWebAnalytics'|translate }}
+ {% if hasSVGLogo %}
+ <img src='{{ logoSVG }}' tabindex="3"
+ alt="{% if isCustomLogo %}{{ 'General_PoweredBy'|translate }} {% endif %}Piwik"
+ class="{% if not isCustomLogo %}default-piwik-logo{% endif %}" />
+ {% else %}
+ <img src='{{ logoHeader }}' alt="{% if isCustomLogo %}{{ 'General_PoweredBy'|translate }} {% endif %}Piwik" />
+ {% endif %}
</div>
<div class="box">
diff --git a/plugins/CoreVisualizations/javascripts/jqplot.js b/plugins/CoreVisualizations/javascripts/jqplot.js
index 13c91a568c..984f8b4484 100644
--- a/plugins/CoreVisualizations/javascripts/jqplot.js
+++ b/plugins/CoreVisualizations/javascripts/jqplot.js
@@ -407,9 +407,10 @@
/** Export the chart as an image */
exportAsImage: function (container, lang) {
+ var pixelRatio = window.devicePixelRatio || 1;
var exportCanvas = document.createElement('canvas');
- exportCanvas.width = container.width();
- exportCanvas.height = container.height();
+ exportCanvas.width = Math.round(container.width() * pixelRatio);
+ exportCanvas.height = Math.round(container.height() * pixelRatio);
if (!exportCanvas.getContext) {
alert("Sorry, not supported in your browser. Please upgrade your browser :)");
@@ -428,7 +429,7 @@
position.left += addPosition.left;
position.top += addPosition.top + parseInt(parent.css('marginTop'), 10);
}
- exportCtx.drawImage(canvas[0], Math.round(position.left), Math.round(position.top));
+ exportCtx.drawImage(canvas[0], Math.round(position.left * pixelRatio), Math.round(position.top * pixelRatio));
}
var exported = exportCanvas.toDataURL("image/png");
@@ -437,8 +438,8 @@
img.src = exported;
img = $(img).css({
- width: exportCanvas.width + 'px',
- height: exportCanvas.height + 'px'
+ width: Math.round(exportCanvas.width / pixelRatio) + 'px',
+ height: Math.round(exportCanvas.height / pixelRatio) + 'px'
});
var popover = $(document.createElement('div'));
diff --git a/plugins/CustomDimensions b/plugins/CustomDimensions
-Subproject 6c39cfbb2189178aa10705e1a4fb5dd3212729c
+Subproject ebc37665207419a365d74d7d595b038715de20b
diff --git a/plugins/CustomPiwikJs/lang/el.json b/plugins/CustomPiwikJs/lang/el.json
index 7a3c1c1aaa..8e1eee2ce5 100644
--- a/plugins/CustomPiwikJs/lang/el.json
+++ b/plugins/CustomPiwikJs/lang/el.json
@@ -1,5 +1,6 @@
{
"CustomPiwikJs": {
+ "PluginDescription": "Δίνει τη δυνατότητα σε κάθε πρόσθετο να επεκτείνει το αρχείο παρακολούθησης JavaScript (piwik.js) και παρέχει νέα λειτουργικότητα και δυνατότητες μετρήσεων στον ιστοτόπο.",
"DiagnosticPiwikJsWritable": "Αρχείο παρακολούθησης JavaScript (\"\/piwik.js\")",
"DiagnosticPiwikJsNotWritable": "Το αρχείο παρακολούθησης JavaScript \"\/piwik.js\" δεν είναι εγγράψιμο που σημαίνει ότι άλλα πρόσθετα δεν μπορούν να επεκτείνουν την κλάση παρακολούθησης. Στο μέλλον ορισμένα χαρακτηριστικά του πυρήνα δε θα δουλεύουν όπως πρέπει.",
"DiagnosticPiwikJsMakeWritable": "Προτείνεται να κάνετε το αρχείο Piwik.js εγγράψιμο εκτελώντας αυτή την εντολή: %s"
diff --git a/plugins/CustomPiwikJs/lang/fr.json b/plugins/CustomPiwikJs/lang/fr.json
index 84853489f6..5d473f96a9 100644
--- a/plugins/CustomPiwikJs/lang/fr.json
+++ b/plugins/CustomPiwikJs/lang/fr.json
@@ -1,5 +1,6 @@
{
"CustomPiwikJs": {
+ "PluginDescription": "Autorise n'importe quel composant à mettre à jour le fichier de suivit Piwik (Piwik.js) et à ajouter de nouvelles fonctionnalités ainsi que des capacités de suivit de site web.",
"DiagnosticPiwikJsWritable": "Traceur JavaScript inscriptible (\"\/piwik.js\")",
"DiagnosticPiwikJsNotWritable": "Le fichier du traceur JavaScript Piwik \"\/piwik.js\" ne peut pas être modifié ce qui signifie que les autres composants ne peuvent pas l'enrichir. A l'avenir même certaines fonctionnalités natives pourraient ne pas fonctionner comme prévu.",
"DiagnosticPiwikJsMakeWritable": "Nous vous recommandons de permettre l'écriture de Piwik.js en exécutant la commande suivante : %s"
diff --git a/plugins/CustomPiwikJs/lang/sq.json b/plugins/CustomPiwikJs/lang/sq.json
index 018fd9dd7a..ecbaac3c89 100644
--- a/plugins/CustomPiwikJs/lang/sq.json
+++ b/plugins/CustomPiwikJs/lang/sq.json
@@ -1,5 +1,6 @@
{
"CustomPiwikJs": {
+ "PluginDescription": "I lejon cilësdo shtojcë të zgjerojë kartelën Piwik JavaScript Tracking (piwik.js) dhe të shtojë aftësi të reja funksionimi dhe matjesh në sajt.",
"DiagnosticPiwikJsWritable": "Ndjekës JavaScript i Shkrueshëm (\"\/piwik.js\")",
"DiagnosticPiwikJsNotWritable": "Kartela e ndjekësit JavaScript të Piwik-ut, \"\/piwik.js\" s’është e shkrueshme, çka do të thotë se shtojcat e tjera s’mund ta zgjerojnë ndjekësin JavaScript. Në të ardhmen mund të mos punojnë siç pritet madje edhe disa veçori bazë.",
"DiagnosticPiwikJsMakeWritable": "Këshillojmë bërjen e Piwik.js të shkrueshme, duke xhiruar urdhrin: %s"
diff --git a/plugins/CustomPiwikJs/lang/zh-tw.json b/plugins/CustomPiwikJs/lang/zh-tw.json
index 8771e2974e..ae73130274 100644
--- a/plugins/CustomPiwikJs/lang/zh-tw.json
+++ b/plugins/CustomPiwikJs/lang/zh-tw.json
@@ -1,5 +1,6 @@
{
"CustomPiwikJs": {
+ "PluginDescription": "允許任何外掛擴展 Piwik JavaScript 追蹤檔案(piwik.js)來增加新功能和網站衡量能力。",
"DiagnosticPiwikJsWritable": "可寫的 JavaScript 追蹤(\/piwik.js)",
"DiagnosticPiwikJsNotWritable": "Piwik 的 JavaScript 追蹤檔案「\/piwik.js」不可寫入,這代表其他外掛無法擴展 JavaScript 追蹤。未來甚至有些核心功能會無法正常運作。",
"DiagnosticPiwikJsMakeWritable": "我們推薦讓 Piwik.js 可寫入,請執行此指令:%s"
diff --git a/plugins/CustomVariables/tests/System/expected/test_CustomVariablesSystemTest__Live.getLastVisitsDetails_day.xml b/plugins/CustomVariables/tests/System/expected/test_CustomVariablesSystemTest__Live.getLastVisitsDetails_day.xml
index aee0c3d3da..4a884ae177 100644
--- a/plugins/CustomVariables/tests/System/expected/test_CustomVariablesSystemTest__Live.getLastVisitsDetails_day.xml
+++ b/plugins/CustomVariables/tests/System/expected/test_CustomVariablesSystemTest__Live.getLastVisitsDetails_day.xml
@@ -117,7 +117,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
diff --git a/plugins/DevicesDetection/Archiver.php b/plugins/DevicesDetection/Archiver.php
index ea63485017..9f268f85a0 100644
--- a/plugins/DevicesDetection/Archiver.php
+++ b/plugins/DevicesDetection/Archiver.php
@@ -87,8 +87,7 @@ class Archiver extends \Piwik\Plugin\Archiver
}
while ($conversionRow = $query->fetch()) {
-
- $metrics->sumMetricsGoals($conversionRow[$labelSQL], $conversionRow);
+ $metrics->sumMetricsGoals(isset($conversionRow[$labelSQL]) ? $conversionRow[$labelSQL] : null, $conversionRow);
}
$metrics->enrichMetricsWithConversions();
}
diff --git a/plugins/Goals/stylesheets/goals.css b/plugins/Goals/stylesheets/goals.css
index 220f57e3d2..7fbb35d2b0 100644
--- a/plugins/Goals/stylesheets/goals.css
+++ b/plugins/Goals/stylesheets/goals.css
@@ -32,6 +32,11 @@ ul.ulGoalTopElements li {
list-style-type: circle;
}
+ul.ulGoalTopElements img {
+ border: 1px solid lightgray;
+ box-sizing: content-box;
+}
+
.ulGoalTopElements a {
text-decoration: none;
color: #0033CC;
diff --git a/plugins/ImageGraph/API.php b/plugins/ImageGraph/API.php
index b596fe6d37..e9f15d0b04 100644
--- a/plugins/ImageGraph/API.php
+++ b/plugins/ImageGraph/API.php
@@ -263,7 +263,7 @@ class API extends \Piwik\Plugin\API
case StaticGraph::GRAPH_TYPE_BASIC_PIE:
if (count($ordinateColumns) > 1) {
- // pChart doesn't support multiple series on pie charts
+ // CpChart doesn't support multiple series on pie charts
throw new Exception("Pie charts do not currently support multiple series");
}
diff --git a/plugins/ImageGraph/StaticGraph.php b/plugins/ImageGraph/StaticGraph.php
index 3cd7b738ee..1f74457e7d 100644
--- a/plugins/ImageGraph/StaticGraph.php
+++ b/plugins/ImageGraph/StaticGraph.php
@@ -9,17 +9,13 @@
namespace Piwik\Plugins\ImageGraph;
-use pData;
-use pImage;
+use CpChart\Chart\Data;
+use CpChart\Chart\Image;
use Piwik\Container\StaticContainer;
use Piwik\NumberFormatter;
use Piwik\Piwik;
use Piwik\BaseFactory;
-require_once PIWIK_INCLUDE_PATH . "/libs/pChart/class/pDraw.class.php";
-require_once PIWIK_INCLUDE_PATH . "/libs/pChart/class/pImage.class.php";
-require_once PIWIK_INCLUDE_PATH . "/libs/pChart/class/pData.class.php";
-
/**
* The StaticGraph abstract class is used as a base class for different types of static graphs.
*
@@ -45,11 +41,11 @@ abstract class StaticGraph extends BaseFactory
private $aliasedGraph;
/**
- * @var pImage
+ * @var Image
*/
protected $pImage;
/**
- * @var pData
+ * @var Data
*/
protected $pData;
protected $ordinateLabels;
@@ -102,7 +98,7 @@ abstract class StaticGraph extends BaseFactory
public function sendToDisk($filename)
{
$filePath = self::getOutputPath($filename);
- $this->pImage->Render($filePath);
+ $this->pImage->render($filePath);
return $filePath;
}
@@ -238,7 +234,7 @@ abstract class StaticGraph extends BaseFactory
protected function initpData()
{
- $this->pData = new pData();
+ $this->pData = new Data();
foreach ($this->ordinateSeries as $column => $data) {
$this->pData->addPoints($data, $column);
@@ -257,7 +253,7 @@ abstract class StaticGraph extends BaseFactory
protected function initpImage()
{
- $this->pImage = new pImage($this->width, $this->height, $this->pData);
+ $this->pImage = new Image($this->width, $this->height, $this->pData);
$this->pImage->Antialias = $this->aliasedGraph;
$this->pImage->setFontProperties(
@@ -347,7 +343,7 @@ abstract class StaticGraph extends BaseFactory
/**
* Global format method
*
- * required to format y axis values using pcharts internal format callbacks
+ * required to format y axis values using CpChart internal format callbacks
* @param $value
* @return mixed
*/
diff --git a/plugins/ImageGraph/StaticGraph/Exception.php b/plugins/ImageGraph/StaticGraph/Exception.php
index eca980e3b2..dd10193365 100644
--- a/plugins/ImageGraph/StaticGraph/Exception.php
+++ b/plugins/ImageGraph/StaticGraph/Exception.php
@@ -8,7 +8,7 @@
*/
namespace Piwik\Plugins\ImageGraph\StaticGraph;
-use pData;
+use CpChart\Chart\Data;
use Piwik\Plugins\ImageGraph\StaticGraph;
/**
@@ -51,7 +51,7 @@ class Exception extends StaticGraph
public function renderGraph()
{
- $this->pData = new pData();
+ $this->pData = new Data();
$message = $this->exception->getMessage();
list($textWidth, $textHeight) = $this->getTextWidthHeight($message);
diff --git a/plugins/ImageGraph/StaticGraph/PieGraph.php b/plugins/ImageGraph/StaticGraph/PieGraph.php
index d3e88b52f4..a43a6ff631 100644
--- a/plugins/ImageGraph/StaticGraph/PieGraph.php
+++ b/plugins/ImageGraph/StaticGraph/PieGraph.php
@@ -9,10 +9,8 @@
namespace Piwik\Plugins\ImageGraph\StaticGraph;
+use CpChart\Chart\Pie;
use Piwik\Plugins\ImageGraph\StaticGraph;
-use pPie;
-
-require_once PIWIK_INCLUDE_PATH . "/libs/pChart/class/pPie.class.php";
/**
*
@@ -26,7 +24,7 @@ abstract class PieGraph extends StaticGraph
const SLICE_COLOR_KEY = "SLICE_COLOR";
/**
- * @var pPie
+ * @var Pie
*/
protected $pieChart;
protected $xPosition;
@@ -57,7 +55,7 @@ abstract class PieGraph extends StaticGraph
$radius = ($this->height / 2) - self::RADIUS_MARGIN;
}
- $this->pieChart = new pPie($this->pImage, $this->pData);
+ $this->pieChart = new Pie($this->pImage, $this->pData);
$numberOfSlices = count($this->abscissaSeries);
$numberOfAvailableColors = count($this->colors);
@@ -89,7 +87,7 @@ abstract class PieGraph extends StaticGraph
* it uses a threshold to determine if an abscissa value should be drawn on the PIE
* discarded abscissa values are summed in the 'other' abscissa value
*
- * if this process is not perform, pChart will draw pie slices that are too small to see
+ * if this process is not perform, CpChart will draw pie slices that are too small to see
*/
private function truncateSmallValues()
{
diff --git a/plugins/Installation/Controller.php b/plugins/Installation/Controller.php
index 5fa34da734..47b33fe9d4 100644
--- a/plugins/Installation/Controller.php
+++ b/plugins/Installation/Controller.php
@@ -376,6 +376,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
$viewTrackingHelp->jsTag = $javascriptGenerator->generate($idSite, Url::getCurrentUrlWithoutFileName());
$viewTrackingHelp->idSite = $idSite;
$viewTrackingHelp->piwikUrl = Url::getCurrentUrlWithoutFileName();
+ $viewTrackingHelp->isInstall = true;
$view->trackingHelp = $viewTrackingHelp->render();
$view->displaySiteName = $siteName;
diff --git a/plugins/Installation/lang/el.json b/plugins/Installation/lang/el.json
index ddc14ca4ff..ff1d3e93d0 100644
--- a/plugins/Installation/lang/el.json
+++ b/plugins/Installation/lang/el.json
@@ -84,6 +84,7 @@
"SystemCheckGlobHelp": "Η εσωτερική συνάρτηση έχει απενεργοποιηθεί στον διακομιστή σας. Το Piwik θα προσπαθήσει να εξομοιώσει τη συνάρτηση αλλά ίσως να υπάρχουν επιπλέον περιορισμοί ασφαλείας. Η λειτουργικότητα μπορεί να επηρεαστεί.",
"SystemCheckGzcompressHelp": "Πρέπει να ενεργοποιήσετε την επέκταση zlib και την συνάρτηση gzcompress.",
"SystemCheckGzuncompressHelp": "Πρέπει να ενεργοποιήσετε την επέκταση zlib και την συνάρτηση gzuncompress.",
+ "SystemCheckHashHelp": "Θα πρέπει να παραμετροποιήσετε και να μεταγλωττίσετε πάλι την PHP με ενεργοποιημένη την υποστήριξη hash() παραλείποντας την επιλογή --disable-hash.",
"SystemCheckIconvHelp": "Πρέπει να ρυθμίσετε και ξαναεγκαταστήσετε την PHP με ενεργοποιημένη την υποστήριξη «iconv», --with-iconv.",
"SystemCheckJsonHelp": "Η επέκταση php5-json απαιτείται προκειμένου το Piwik να διαβάζει και γράφει δεδομένα σε μορφή JSON.",
"SystemCheckMailHelp": "Τα μηνύματα με τις παρατηρήσεις σας και για τους Ξεχασμένους Κωδικούς δεν θα στέλνονται αν δεν είναι ενεργοποιημένη η συνάρτηση mail().",
diff --git a/plugins/Installation/lang/fr.json b/plugins/Installation/lang/fr.json
index 061b843ed6..43cd1b81d8 100644
--- a/plugins/Installation/lang/fr.json
+++ b/plugins/Installation/lang/fr.json
@@ -84,6 +84,7 @@
"SystemCheckGlobHelp": "Cette fonction native a été désactivée sur votre hôte. Piwik va tenter de l'émuler mais il pourra rencontrer des restrictions de sécurité. Les fonctionnalités pourront en être impactées.",
"SystemCheckGzcompressHelp": "Vous devez activer l'extension zlib et la fonction gzcompress",
"SystemCheckGzuncompressHelp": "Vous devez activer l'extension zlib et la fonction gzuncompress",
+ "SystemCheckHashHelp": "Vous devez reconfigurer et re-compiler PHP en avec le support de hash() activé en enlevant l'option --disable-hash.",
"SystemCheckIconvHelp": "Vous devez configurer PHP et le recompiler avec le support \"iconv\" activé, --with-iconv.",
"SystemCheckJsonHelp": "L'extension php5-json est nécéssaire pour lire et écrire des données au format JSON.",
"SystemCheckMailHelp": "Les Feedback (commentaires) et mots de passe perdus ne pourront être envoyés sans la fonciton mail().",
diff --git a/plugins/Installation/lang/sq.json b/plugins/Installation/lang/sq.json
index 8a6eaae077..ba5e166ded 100644
--- a/plugins/Installation/lang/sq.json
+++ b/plugins/Installation/lang/sq.json
@@ -84,6 +84,7 @@
"SystemCheckGlobHelp": "Ky funksion i trupëzuar është i çaktivizuar te streha juaj. Piwik-u do të përpiqet ta emulojë këtë funksion por mund të hasë kufizime të mëtejshme sigurie. Kjo mund të ketë ndikim te funksionimi.",
"SystemCheckGzcompressHelp": "Lypset të aktivizoni zgjerimin zlib dhe funksionin gzcompress.",
"SystemCheckGzuncompressHelp": "Lypset të aktivizoni zgjerimin zlib dhe funksionin gzuncompress.",
+ "SystemCheckHashHelp": "Lypset të formësoni dhe rikrijoni PHP-në me mbulim të hash() të aktivizuar duke përjashtuar mundësinë --disable-hash.",
"SystemCheckIconvHelp": "Lypset të formësoni dhe rindërtoni PHP-në me aktivizim të mbulimit të \"iconv\", --with-iconv.",
"SystemCheckJsonHelp": "Zgjerimi php5-json është i domosdoshëm që Piwik-u të lexojë dhe shkruajë të dhëna JSON.",
"SystemCheckMailHelp": "Mesazhet mbi Përshtypjet dhe Fjalëkalim të Humbur nuk kanë për t’u dërguar pa mail().",
diff --git a/plugins/Installation/lang/zh-tw.json b/plugins/Installation/lang/zh-tw.json
index bfd4089358..952c4cf2c4 100644
--- a/plugins/Installation/lang/zh-tw.json
+++ b/plugins/Installation/lang/zh-tw.json
@@ -84,6 +84,7 @@
"SystemCheckGlobHelp": "這個內建的功能已被你的主機商停用。Piwik 將嘗試模擬這個功能,但可能會遇到安全限制。功能可能受到影響。",
"SystemCheckGzcompressHelp": "你必須啟用 zlib 擴充功能和 gzcompress 功能。",
"SystemCheckGzuncompressHelp": "你必須啟用 zlib 擴充功能和 gzuncompress 功能。",
+ "SystemCheckHashHelp": "你必須配置並重建 PHP 經由執行 --disable-hash 選項來啟用 hash() 支援。",
"SystemCheckIconvHelp": "你需要設定及重建 PHP,然後啟用 iconv 支援,--with-iconv。",
"SystemCheckJsonHelp": "Piwik 要讀寫 JSON 檔案必須使用 php5-json 擴充功能。",
"SystemCheckMailHelp": "意見回饋及忘記密碼的訊息若沒有 mail() 將無法寄送。",
diff --git a/plugins/Live/javascripts/visitorLog.js b/plugins/Live/javascripts/visitorLog.js
index 07cdd313f2..74393f7ff7 100644
--- a/plugins/Live/javascripts/visitorLog.js
+++ b/plugins/Live/javascripts/visitorLog.js
@@ -77,7 +77,7 @@
var prevelement;
var prevhtml;
var counter = 0;
- $(this).find("li").each(function () {
+ $(this).find("> li").each(function () {
counter++;
$(this).val(counter);
var current = $(this).html();
diff --git a/plugins/Live/stylesheets/live.less b/plugins/Live/stylesheets/live.less
index c471009e50..309b93cecc 100644
--- a/plugins/Live/stylesheets/live.less
+++ b/plugins/Live/stylesheets/live.less
@@ -297,6 +297,11 @@ a.visitor-log-visitor-profile-link {
height: 16px;
}
+.visitorLogIconWithDetails.flag>img {
+ border: 1px solid lightgray;
+ box-sizing: content-box;
+}
+
.visitorLogIcons>span.visitorRank>img {
margin: auto 0;
}
diff --git a/plugins/Live/stylesheets/visitor_profile.less b/plugins/Live/stylesheets/visitor_profile.less
index 79ab10222c..5622e42f1a 100644
--- a/plugins/Live/stylesheets/visitor_profile.less
+++ b/plugins/Live/stylesheets/visitor_profile.less
@@ -279,6 +279,10 @@
margin-right: 1em;
}
}
+.visitor-profile-location img {
+ border: 1px solid lightgray;
+ box-sizing: content-box;
+}
.visitor-profile-important-visits {
diff --git a/plugins/Live/templates/_dataTableViz_visitorLog.twig b/plugins/Live/templates/_dataTableViz_visitorLog.twig
index 99fd4488e5..5281f9974f 100644
--- a/plugins/Live/templates/_dataTableViz_visitorLog.twig
+++ b/plugins/Live/templates/_dataTableViz_visitorLog.twig
@@ -158,9 +158,9 @@ GPS (lat/long): {{ visitor.getColumn('latitude') }},{{ visitor.getColumn('longit
</span>
{% endif %}
{% if visitor.getColumn('countryFlag') %}
- <span class="visitorLogIconWithDetails">
+ <span class="visitorLogIconWithDetails flag">
- <img src="{{ visitor.getColumn('countryFlag') }}"/>
+ <img height="16px" src="{{ visitor.getColumn('countryFlag') }}"/>
{% if visitor.getColumn('city') %}{{ visitor.getColumn('city')|rawSafeDecoded }}{% endif -%}
{%- if visitor.getColumn('region') %}{% if visitor.getColumn('city') %}, {% endif %}{{ visitor.getColumn('region')|rawSafeDecoded }}{% endif %}
diff --git a/plugins/Live/templates/getLastVisitsStart.twig b/plugins/Live/templates/getLastVisitsStart.twig
index ac1ce17e06..4e44f75427 100644
--- a/plugins/Live/templates/getLastVisitsStart.twig
+++ b/plugins/Live/templates/getLastVisitsStart.twig
@@ -19,7 +19,7 @@
{% endif %}
<br />
- {% if visitor.countryFlag is defined %}&nbsp;<img src="{{ visitor.countryFlag }}" title="{{ visitor.location|e('html_attr') }}, {{ 'Provider_ColumnProvider'|translate }} {% if visitor.providerName is defined %}{{ visitor.providerName }}{% endif %}"/>{% endif %}
+ {% if visitor.countryFlag is defined %}&nbsp;<img height="16px" src="{{ visitor.countryFlag }}" title="{{ visitor.location|e('html_attr') }}, {{ 'Provider_ColumnProvider'|translate }} {% if visitor.providerName is defined %}{{ visitor.providerName }}{% endif %}"/>{% endif %}
{% if visitor.browserIcon is defined %}&nbsp;<img width="16px" height="16px" src="{{ visitor.browserIcon }}" title="{{ visitor.browser|e('html_attr') }}{% if visitor.plugins is defined %}, {{ 'General_Plugins'|translate }}: {{ visitor.plugins }}{% endif %}"/>{% endif %}
{% if visitor.operatingSystemIcon is defined %}&nbsp;<img width="16px" height="16px" src="{{ visitor.operatingSystemIcon }}" title="{{ visitor.operatingSystem }}{% if visitor.resolution is defined %}, {{ visitor.resolution }}{% endif %}"/>{% endif %}
&nbsp;
diff --git a/plugins/Live/templates/getVisitorProfilePopup.twig b/plugins/Live/templates/getVisitorProfilePopup.twig
index 673fc82b8b..c0b3141892 100644
--- a/plugins/Live/templates/getVisitorProfilePopup.twig
+++ b/plugins/Live/templates/getVisitorProfilePopup.twig
@@ -138,7 +138,7 @@
{{ entry.prettyName }}
{%- endif -%}
- &nbsp;<img src="{{ entry.flag }}" title="{{ entry.prettyName }}"/>
+ &nbsp;<img height="16px" src="{{ entry.flag }}" title="{{ entry.prettyName }}"/>
{%- endset %}
{{- 'General_XFromY'|translate(entryVisits, entryCountry)|raw -}}{% if not loop.last %}, {% endif %}
@@ -169,4 +169,4 @@
<script type="text/javascript">
$(function() { require('piwik/UI').VisitorProfileControl.initElements(); });
</script>
-{% endif %}
+{% endif %} \ No newline at end of file
diff --git a/plugins/Live/tests/System/expected/test___Live.getVisitorProfile.xml b/plugins/Live/tests/System/expected/test___Live.getVisitorProfile.xml
index ebb9d33283..6d2f99e5d5 100644
--- a/plugins/Live/tests/System/expected/test___Live.getVisitorProfile.xml
+++ b/plugins/Live/tests/System/expected/test___Live.getVisitorProfile.xml
@@ -31,13 +31,13 @@
<row>
<country>fr</country>
<nb_visits>1</nb_visits>
- <flag>plugins/UserCountry/images/flags/fr.png</flag>
+ <flag>plugins/Morpheus/icons/dist/flags/fr.png</flag>
<prettyName>France</prettyName>
</row>
<row>
<country>xx</country>
<nb_visits>30</nb_visits>
- <flag>plugins/UserCountry/images/flags/xx.png</flag>
+ <flag>plugins/Morpheus/icons/dist/flags/xx.png</flag>
<prettyName>Unknown</prettyName>
</row>
</countries>
@@ -130,7 +130,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -238,7 +238,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -346,7 +346,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -454,7 +454,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -562,7 +562,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -670,7 +670,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -778,7 +778,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -886,7 +886,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -994,7 +994,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1102,7 +1102,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
diff --git a/plugins/Live/tests/System/expected/test_higherLimit__Live.getVisitorProfile.xml b/plugins/Live/tests/System/expected/test_higherLimit__Live.getVisitorProfile.xml
index 816f5a2df7..1e3914be4c 100644
--- a/plugins/Live/tests/System/expected/test_higherLimit__Live.getVisitorProfile.xml
+++ b/plugins/Live/tests/System/expected/test_higherLimit__Live.getVisitorProfile.xml
@@ -31,13 +31,13 @@
<row>
<country>fr</country>
<nb_visits>1</nb_visits>
- <flag>plugins/UserCountry/images/flags/fr.png</flag>
+ <flag>plugins/Morpheus/icons/dist/flags/fr.png</flag>
<prettyName>France</prettyName>
</row>
<row>
<country>xx</country>
<nb_visits>30</nb_visits>
- <flag>plugins/UserCountry/images/flags/xx.png</flag>
+ <flag>plugins/Morpheus/icons/dist/flags/xx.png</flag>
<prettyName>Unknown</prettyName>
</row>
</countries>
@@ -130,7 +130,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -238,7 +238,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -346,7 +346,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -454,7 +454,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -562,7 +562,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -670,7 +670,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -778,7 +778,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -886,7 +886,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -994,7 +994,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1102,7 +1102,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1210,7 +1210,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1318,7 +1318,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1426,7 +1426,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1534,7 +1534,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1642,7 +1642,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1750,7 +1750,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1858,7 +1858,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1966,7 +1966,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -2074,7 +2074,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -2182,7 +2182,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
diff --git a/plugins/Marketplace/lang/el.json b/plugins/Marketplace/lang/el.json
index affd65e572..e47634c476 100644
--- a/plugins/Marketplace/lang/el.json
+++ b/plugins/Marketplace/lang/el.json
@@ -103,6 +103,7 @@
"Updated": "Ενημερώθηκε",
"UpdatingPlugin": "Γίνεται ενημέρωση του %1$s",
"UploadZipFile": "Ανέβασμα του αρχείου ZIP",
+ "PluginUploadDisabled": "Η υποβολή πρόσθετου είναι απενεργοποιημένη στο αρχείο ρυθμίσεων. Προκειμένου να ενεργοποιήσετε το χαρακτηριστικό αυτό τροποποιήστε τις ρυθμίσεις σας ή επικοινωνήστε με τον διαχειριστή σας",
"LicenseKeyExpiresSoon": "Η άδειά σας λήγει σύντομα, επικοινωνήστε με %1$s.",
"LicenseKeyIsExpired": "Η άδειά σας έληξε, επικοινωνήστε με %1$s.",
"MultiServerEnvironmentWarning": "Δεν μπορείτε να εγκαταστήσετε το πρόσθετο κατευθείαν, καθώς χρησιμοποιείτε το Piwik σε πολλαπλούς διακομιστές. Το πρόσθετο εγκαθίσταται σε ένα μόνο διακομιστή. Εναλλακτικά κατεβάστε το και εγκαταστήστε το χειροκίνητα σε όλους τους διακομιστές σας.",
diff --git a/plugins/Marketplace/lang/fr.json b/plugins/Marketplace/lang/fr.json
index a4bc8cf24e..3d467b9308 100644
--- a/plugins/Marketplace/lang/fr.json
+++ b/plugins/Marketplace/lang/fr.json
@@ -103,6 +103,7 @@
"Updated": "Mis à jour",
"UpdatingPlugin": "Mise à jour de %1$s",
"UploadZipFile": "Télécharger fichier ZIP",
+ "PluginUploadDisabled": "Le téléversement de composant est désactivé dans le fichier de configuration. Afin d'activer cette fonctionnalité, veuillez mettre à jour votre configuration ou contacter votre administrateur.",
"LicenseKeyExpiresSoon": "Votre clef de licence expire bientôt, veuillez contacter %1$s.",
"LicenseKeyIsExpired": "Votre clef de licence est expirée, veuillez contacter %1$s.",
"MultiServerEnvironmentWarning": "Vous ne pouvez pas installer ou mettre à jour le composant directement car vous utilisez Piwik sur plusieurs serveurs. Ce composant serait installé sur un seul serveur. A la place téléchargez et déployez le composant manuellement sur tous les serveurs.",
diff --git a/plugins/Marketplace/lang/sq.json b/plugins/Marketplace/lang/sq.json
index cb1efb6021..61921f8a08 100644
--- a/plugins/Marketplace/lang/sq.json
+++ b/plugins/Marketplace/lang/sq.json
@@ -103,6 +103,7 @@
"Updated": "U përditësua",
"UpdatingPlugin": "Po përditësohet %1$s",
"UploadZipFile": "Ngarkoni kartelë ZIP",
+ "PluginUploadDisabled": "Ngarkimi i shtojcës është i çaktivizuar te kartela e formësimit. Që të mund të aktivizoni këtë veçori, ju lutemi, përditësoni formësimin tuaj ose lidhuni me përgjegjësin tuaj",
"LicenseKeyExpiresSoon": "Kyçi juaj i licencës skadon së shpejti, ju lutemi, lidhuni me %1$s.",
"LicenseKeyIsExpired": "Kyçi juaj i licencës ka skaduar, Ju lutemi, lidhuni me %1$s.",
"MultiServerEnvironmentWarning": "S’mundeni ta instaloni apo përditësoni shtojcën drejtpërsëdrejti, ngaqë po përdorni Piwik-un në disa shërbyes. Shtojca do të duhej të instalohej vetëm në një shërbyes. Në vend të kësaj, shkarkojeni shtojcën dhe instalojeni dorazi te krejt shërbyesit tuaj.",
diff --git a/plugins/Marketplace/lang/zh-tw.json b/plugins/Marketplace/lang/zh-tw.json
index 9da6bfda08..e77a9bf605 100644
--- a/plugins/Marketplace/lang/zh-tw.json
+++ b/plugins/Marketplace/lang/zh-tw.json
@@ -103,6 +103,7 @@
"Updated": "已更新",
"UpdatingPlugin": "更新 %1$s 中",
"UploadZipFile": "上傳 ZIP 檔案",
+ "PluginUploadDisabled": "外掛上傳已在設定檔案中停用。要啟用這項功能請更新你的配置或聯絡你的管理員。",
"LicenseKeyExpiresSoon": "你的註冊碼即將過期,請聯絡 %1$s。",
"LicenseKeyIsExpired": "你的註冊碼已過期,請聯絡 %1$s。",
"MultiServerEnvironmentWarning": "你在多伺服器中使用 Piwik,因此無法直接安裝或更新外掛。外掛只能在單一伺服器中安裝。請手動下載外掛並部屬到所有伺服器中。",
diff --git a/plugins/Morpheus/icons b/plugins/Morpheus/icons
-Subproject 73ceb86e07fa0d963a791aac8337736901a9f54
+Subproject 10891baaf590cc0026bb7caefc2edf597d79a7e
diff --git a/plugins/Morpheus/stylesheets/simple_structure.css b/plugins/Morpheus/stylesheets/simple_structure.css
index b55fed8ab7..4e204a4218 100644
--- a/plugins/Morpheus/stylesheets/simple_structure.css
+++ b/plugins/Morpheus/stylesheets/simple_structure.css
@@ -4,12 +4,14 @@ body {
}
body#simple {
background: #fff;
+ margin: 0;
}
#simple .logo {
color: #888;
text-align: center;
font-size: 12px;
- margin-top: 30px;
+ background-color: #37474f !important;
+ padding: 15px 0;
}
#simple .logo a {
color: #888;
diff --git a/plugins/Morpheus/stylesheets/ui/_popups.less b/plugins/Morpheus/stylesheets/ui/_popups.less
index 4ffa175a59..0e328f37a7 100644
--- a/plugins/Morpheus/stylesheets/ui/_popups.less
+++ b/plugins/Morpheus/stylesheets/ui/_popups.less
@@ -2,7 +2,6 @@
color: @theme-color-text;
font-weight: normal;
img {
- width: 16px;
height: 16px;
}
}
diff --git a/plugins/Morpheus/templates/simpleLayoutHeader.tpl b/plugins/Morpheus/templates/simpleLayoutHeader.tpl
index 8c8ac2a5ff..28db4dd27e 100644
--- a/plugins/Morpheus/templates/simpleLayoutHeader.tpl
+++ b/plugins/Morpheus/templates/simpleLayoutHeader.tpl
@@ -11,8 +11,6 @@
<div class="logo">
<img title="Piwik" alt="Piwik" src="%logoUrl%"/>
- <br/>
- <a href='http://piwik.org/'>free/libre analytics platform</a>
</div>
<div class="box">
diff --git a/plugins/Referrers/Reports/GetReferrerType.php b/plugins/Referrers/Reports/GetReferrerType.php
index 16a11d295b..dea44ccb5a 100644
--- a/plugins/Referrers/Reports/GetReferrerType.php
+++ b/plugins/Referrers/Reports/GetReferrerType.php
@@ -37,6 +37,7 @@ class GetReferrerType extends Base
$this->hasGoalMetrics = true;
$this->order = 1;
$this->subcategoryId = 'Referrers_WidgetGetAll';
+ $this->supportsFlatten = false;
}
public function getDefaultTypeViewDataTable()
diff --git a/plugins/SitesManager/lang/cs.json b/plugins/SitesManager/lang/cs.json
index a5d61bfdbf..49aa48194f 100644
--- a/plugins/SitesManager/lang/cs.json
+++ b/plugins/SitesManager/lang/cs.json
@@ -69,9 +69,7 @@
"SiteSearchUse": "Piwik můžete použít ke sledování a hlášení toho, co návštěvníci hledají pomocí interního vyhledávače.",
"SiteWithoutDataTitle": "Zatím nebyla zaznamenána žádná data",
"SiteWithoutDataDescription": "Pro tuto stránku nebyla zatím zaznamenána žádná analytická data.",
- "SiteWithoutDataSetupTracking": "Nastavte prosím %1$sJavaScript sledovací kód%2$s na svém webu, pokud jste tak již neučinili.",
"SiteWithoutDataMessageDisappears": "Tato zpráva zmizí jakmile dojde k nahrání nějakých dat pro tento web.",
- "SiteWithoutDataSetupGoals": "Mezitím byste možná chtěli %1$snastavit nějaké cíle%2$s.",
"SuperUserAccessCan": "Uživatel se super-uživatelským přístupem může také %1$sspecifikovat globální nastavení%2$s pro nové weby.",
"Timezone": "Časová zóna",
"TrackingSiteSearch": "Sledování interního vyhledávání na stránkách",
diff --git a/plugins/SitesManager/lang/de.json b/plugins/SitesManager/lang/de.json
index 86de40f710..2cf854456e 100644
--- a/plugins/SitesManager/lang/de.json
+++ b/plugins/SitesManager/lang/de.json
@@ -44,8 +44,10 @@
"ListOfIpsToBeExcludedOnAllWebsites": "Die untenstehenden IPs werden auf allen Websites ignoriert.",
"ListOfQueryParametersToBeExcludedOnAllWebsites": "Die untenstehenden GET-Parameter werden von allen URLs aller Websites ignoriert.",
"ListOfQueryParametersToExclude": "Geben Sie die Liste der URL Query Parameter an, einen pro Zeile, um sie von der URL Berichtsseite auszuschliessen. Reguläre Ausdrücke so wie %s werden unterstützt.",
+ "LogAnalytics": "Log-Analyse",
"MainDescription": "Ihre Webanalyse benötigt Websites! Websites können hinzugefügt, aktualisiert und gelöscht werden. Hier wird auch der JavaScript-Code gezeigt, der in Ihre Websites eingefügt werden muss.",
"MenuManage": "Verwalten",
+ "MobileAppsAndSDKs": "Mobile Anwendungen und SDKs",
"NotAnEcommerceSite": "Dies ist keine Ecommerce Seite",
"NotFound": "Keine Websites gefunden für",
"NoWebsites": "Es ist noch keine Website zum administrieren vorhanden.",
@@ -69,9 +71,8 @@
"SiteSearchUse": "Piwik kann auswerten, wonach Besucher in der internen Suche der Website suchen.",
"SiteWithoutDataTitle": "Bisher wurden keine Daten aufgezeichnet",
"SiteWithoutDataDescription": "Für diese Website wurden bisher noch keine Analysedaten aufgezeichnet.",
- "SiteWithoutDataSetupTracking": "Bitte fügen Sie den %1$sJavaScript Tracking Code%2$s auf ihrer Website ein, insofern Sie dies noch nicht getan haben.",
+ "SiteWithoutDataSetupTracking": "Bitte fügen Sie den folgenden %1$sTracking Code%2$s auf ihrer Website ein, insofern Sie dies noch nicht getan haben.",
"SiteWithoutDataMessageDisappears": "Diese Nachricht wird verschwinden sobald die ersten Daten für diese Website aufgezeichnet wurden.",
- "SiteWithoutDataSetupGoals": "In den Zwischenzeit können Sie bereits %1$sZiele aufsetzen%2$s.",
"SuperUserAccessCan": "Ein Nutzer mit Hauptadministrator-Berechtigung kann ebenfalls %1$sglobale Einstellungen%2$s für neue Websites vornehmen.",
"Timezone": "Zeitzone",
"TrackingSiteSearch": "Die interne Suche auswerten",
diff --git a/plugins/SitesManager/lang/el.json b/plugins/SitesManager/lang/el.json
index 79e1564ce7..ac0012afa4 100644
--- a/plugins/SitesManager/lang/el.json
+++ b/plugins/SitesManager/lang/el.json
@@ -44,8 +44,12 @@
"ListOfIpsToBeExcludedOnAllWebsites": "Οι παρακάτω διευθύνσεις IP θα αποκλειστούν από την ανίχνευση σε όλες τις ιστοσελίδες.",
"ListOfQueryParametersToBeExcludedOnAllWebsites": "Οι παράμετροι Ερωτήματος URLs παρακάτω θα αποκλειστούν από URLs σε όλες τις ιστοσελίδες.",
"ListOfQueryParametersToExclude": "Εισάγετε τη λίστα των παραμέτρων ερωτήματος στη διεύθυνση URL, μία ανά γραμμή, για να μη συμπεριληφθούν στις Αναφορές Σελίδων Διευθύνσεων URL. Κανονικές εκφράσεις όπως %s υποστηρίζονται.",
+ "LogAnalytics": "Ημερολόγιο Αναλυτικών",
+ "LogAnalyticsDescription": "Αν η μέθοδος με Javascript δεν είναι δυνατή, μπορείτε να %1$sχρησιμοποιήσετε το ημερολόγιο αναλυτικών του διακομιστή%2$s ως εναλλακτική μέθοδο για την παρακολούθηση των χρηστών του ιστοτόπου σας.",
"MainDescription": "Το σύστημα αναλυτικών αναφορών χρειάζεται ιστοσελίδες! Προσθέστε, ενημερώστε, διαγράψτε ιστοσελίδες και εμφανίστε τον κώδικα Javascript που θα εισαχθεί στις ιστοσελίδες σας.",
"MenuManage": "Διαχείριση",
+ "MobileAppsAndSDKs": "Εφαρμογές και SDK για κινητά",
+ "MobileAppsAndSDKsDescription": "Δεν παρακολουθείτε ένα ιστοτόπο; Μπορείτε εναλλακτικά να παρακολουθείτε μια εφαρμογή για κινητά ή οποιοδήποτε άλλο τύπο εφαρμογής με χρήση ενός από τα %1$sδιαθέσιμα SDK%2$s.",
"NotAnEcommerceSite": "Δεν είναι ιστοσελίδα Ηλεκτρονικού Εμπορίου",
"NotFound": "Δεν βρέθηκαν ιστοσελίδες για",
"NoWebsites": "Δεν έχετε κάποια ιστοσελίδα για να διαχειριστείτε.",
@@ -69,9 +73,9 @@
"SiteSearchUse": "Μπορείτε να χρησιμοποιήσετε το Piwik για να παρακολουθείτε και να έχετε αναφορές για το τι ψάχνουν οι επισκέπτες στην εσωτερική μηχανή αναζήτησης της ιστοσελίδας σας.",
"SiteWithoutDataTitle": "Δεν έχουν καταγραφεί ακόμη δεδομένα",
"SiteWithoutDataDescription": "Δεν έχουν ακόμη καταγραφεί δεδομένα αναλυτικών για τον ιστοτόπο αυτόν ακόμη.",
- "SiteWithoutDataSetupTracking": "Παρακαλώ εισάγετε τον %1$sκώδικα παρακολούθησης JavaScript%2$s για τον ιστοτόπο σας αν δεν το έχετε ήδη κάνει.",
+ "SiteWithoutDataSetupTracking": "Κάντε ορισμό του %1$sκώδικα παρακολούθησης%2$s στον ιστοτόπο σας ή στην εφαρμογή για κινητά αν δεν το έχετε ήδη κάνει.",
"SiteWithoutDataMessageDisappears": "Το μήνυμα θα εξαφανιστεί με το που θα καταχωρηθούν δεδομένα παρακολούθησης για τον ιστοτόπο αυτό.",
- "SiteWithoutDataSetupGoals": "Στο μεταξύ, μπορεί να θέλετε να %1$sορίσετε μερικούς στόχους%2$s.",
+ "SiteWithoutDataSetupGoals": "Εν τω μεταξύ, μπορείτε να %1$sορίσετε ορισμένους στόχους%2$s ή να μάθετε περισσότερα σχετικά με τα %3$sχαρακτηριστικά%4$s του Piwik σε ένα από τους %5$sοδηγούς%6$s μας ή τις %7$sσυχνές ερωτήσεις-απαντήσεις%8$s.",
"SuperUserAccessCan": "Ένας χρήστης με πρόσβαση Υπερ Χρήστη μπορεί επίσης να %1$s ορίσει τις καθολικές παραμέτρους%2$s για νέους ιστοτόπους.",
"Timezone": "Ζώνη ώρας",
"TrackingSiteSearch": "Καταγραφή Εσωτερικής Αναζήτησης Ιστοσελίδας",
diff --git a/plugins/SitesManager/lang/en.json b/plugins/SitesManager/lang/en.json
index 898b257a82..1375674e1c 100644
--- a/plugins/SitesManager/lang/en.json
+++ b/plugins/SitesManager/lang/en.json
@@ -44,8 +44,12 @@
"ListOfIpsToBeExcludedOnAllWebsites": "The IPs below will be excluded from being tracked on all websites.",
"ListOfQueryParametersToBeExcludedOnAllWebsites": "The Query URLs parameters below will be excluded from URLs on all websites.",
"ListOfQueryParametersToExclude": "Enter the list of URL Query Parameters, one per line, to exclude from the Page URLs reports. Regular expressions such as %s are suported.",
+ "LogAnalytics": "Log Analytics",
+ "LogAnalyticsDescription": "If the Javascript tracking method isn’t feasible, you can %1$suse server log analytics%2$s as an alternative method for tracking your website’s users.",
"MainDescription": "Your Web Analytics reports need Websites! Add, update, delete Websites, and show the JavaScript to insert in your pages.",
"MenuManage": "Manage",
+ "MobileAppsAndSDKs": "Mobile apps and SDKs",
+ "MobileAppsAndSDKsDescription": "Not tracking a website? You can alternatively track a mobile app or any other type of application using one of the %1$savailable SDKs%2$s.",
"NotAnEcommerceSite": "Not an Ecommerce site",
"NotFound": "No websites found for",
"NoWebsites": "You don't have any website to administrate.",
@@ -69,9 +73,9 @@
"SiteSearchUse": "You can use Piwik to track and report what visitors are searching in your website's internal search engine.",
"SiteWithoutDataTitle": "No data has been recorded yet",
"SiteWithoutDataDescription": "No analytics data has been tracked for this website yet.",
- "SiteWithoutDataSetupTracking": "Please set up the %1$sJavaScript tracking code%2$s on your website if you haven't done that already.",
+ "SiteWithoutDataSetupTracking": "Please set up the %1$stracking code%2$s below into your website or mobile app if you haven't done already.",
"SiteWithoutDataMessageDisappears": "This message will disappear as soon as some data was tracked for this website.",
- "SiteWithoutDataSetupGoals": "In the meantime, maybe you would like to %1$sset up some goals%2$s.",
+ "SiteWithoutDataSetupGoals": "In the meantime, maybe you would like to %1$sset up some goals%2$s or learn more about the %3$sfeatures%4$s of Piwik in one of our %5$sguides%6$s or %7$sFAQs%8$s.",
"SuperUserAccessCan": "A user with Super User access can also %1$s specify global settings%2$s for new websites.",
"Timezone": "Time zone",
"TrackingSiteSearch": "Tracking Internal Site Search",
diff --git a/plugins/SitesManager/lang/es.json b/plugins/SitesManager/lang/es.json
index 287bc19613..a3876f7c29 100644
--- a/plugins/SitesManager/lang/es.json
+++ b/plugins/SitesManager/lang/es.json
@@ -69,9 +69,7 @@
"SiteSearchUse": "Puede utilizar Piwik para rastrear y obtener un informe que es lo que están buscando sus visitantes en el motor de búsqueda interno de su sitio de internet.",
"SiteWithoutDataTitle": "Aun no se han grabado datos",
"SiteWithoutDataDescription": "Aun no se han registrado datos analíticos para este sitio de internet.",
- "SiteWithoutDataSetupTracking": "Por favor configure el %1$scódigo de rastreo Javascript%2$s en su sitio de internet si ya no lo ha hecho.",
"SiteWithoutDataMessageDisappears": "Este mensaje desaparecerá tan pronto como algún dato sea rastreado en este sitio de internet.",
- "SiteWithoutDataSetupGoals": "Mientras tanto, tal vez le gustaría %1$sestablecer algunas metas%2$s.",
"SuperUserAccessCan": "Un usuario con acceso Super Usuario también puede %1$s especificar la configuración global%2$s para nuevos sitios web.",
"Timezone": "Zona Horaria",
"TrackingSiteSearch": "Seguimiento en el Buscador interno del sitio",
diff --git a/plugins/SitesManager/lang/fr.json b/plugins/SitesManager/lang/fr.json
index c96c2105c8..fba6d2784c 100644
--- a/plugins/SitesManager/lang/fr.json
+++ b/plugins/SitesManager/lang/fr.json
@@ -46,6 +46,7 @@
"ListOfQueryParametersToExclude": "Entrez la liste de vos paramètres d'URL à exclure des rapports d'URL de page, un par ligne. Les expressions régulières comme %s sont supportées.",
"MainDescription": "Piwik a besoin de sites pour générer des rapports ! Ajoutez, éditez et supprimez des sites, et voyez le code JavaScript à inclure dans vos pages.",
"MenuManage": "Gérer",
+ "MobileAppsAndSDKs": "Applications mobiles et SDKs",
"NotAnEcommerceSite": "N'est pas un site d'e-commerce",
"NotFound": "Aucun site trouvé pour",
"NoWebsites": "Vous n'avez aucun site Internet à administrer.",
@@ -69,9 +70,7 @@
"SiteSearchUse": "Vous pouvez utiliser Piwik pour suivre et effectuer un rapport sur ce que vos visiteurs cherchent sur le moteur de recherche interne de votre site web.",
"SiteWithoutDataTitle": "Aucune donnée enregistrée pour le moment",
"SiteWithoutDataDescription": "Aucune donnée d'analyse n'a été enregistrée pour ce site pour le moment.",
- "SiteWithoutDataSetupTracking": "Veuillez configurer le %1$scode de suivit JavaScript%2$s sur votre site web si vous ne l'avez pas déjà fait.",
"SiteWithoutDataMessageDisappears": "Ce message disparaitra dès lors que certaines données auront été enregistrées pour ce site web.",
- "SiteWithoutDataSetupGoals": "Pendant ce temps, peut-être voudriez-vous %1$sdéfinir des objectifs%2$s.",
"SuperUserAccessCan": "Un utilisateur avec un accès super utilisateur peut aussi %1$sconfigurer les paramètres globaux%2$s pour les nouveaux sites web.",
"Timezone": "Fuseau horaire",
"TrackingSiteSearch": "Suivi de la recherche interne sur le site",
diff --git a/plugins/SitesManager/lang/it.json b/plugins/SitesManager/lang/it.json
index a74de97bd2..f2b46bc947 100644
--- a/plugins/SitesManager/lang/it.json
+++ b/plugins/SitesManager/lang/it.json
@@ -69,9 +69,7 @@
"SiteSearchUse": "È possibile utilizzare Piwik per monitorare e creare dei report su ciò che i visitatori stanno cercando nel motore di ricerca interno del tuo sito web.",
"SiteWithoutDataTitle": "Non è stato ancora registrato alcun dato",
"SiteWithoutDataDescription": "Per questo sito non sono ancora stati tracciati dati statistici.",
- "SiteWithoutDataSetupTracking": "Si prega di impostare il %1$sCodice di Tracciamento JavaScript%2$s sul tuo sito, se già non lo hai fatto.",
"SiteWithoutDataMessageDisappears": "Questo messaggio scomparirà non appena dei dati di questo sito saranno raccolti.",
- "SiteWithoutDataSetupGoals": "Nel frattempo, può essere che tu voglia %1$simpostare alcuni goal%2$s.",
"SuperUserAccessCan": "Un utente con accesso Super User può anche %1$sspecificare le impostazioni globali%2$s per i nuovi siti.",
"Timezone": "Fuso orario",
"TrackingSiteSearch": "Tracciamento Ricerca Interna Sito",
diff --git a/plugins/SitesManager/lang/ja.json b/plugins/SitesManager/lang/ja.json
index 031deb101c..a0e13a643c 100644
--- a/plugins/SitesManager/lang/ja.json
+++ b/plugins/SitesManager/lang/ja.json
@@ -69,9 +69,7 @@
"SiteSearchUse": "Piwik を利用して、ビジターがウェブサイトの内部検索エンジンで検索しているものを追跡およびレポートすることができます。",
"SiteWithoutDataTitle": "まだデータは記録されていません",
"SiteWithoutDataDescription": "まだこのウエブサイトの分析データは追跡されていません。",
- "SiteWithoutDataSetupTracking": "まだ行っていない場合は、ウェブサイトで %1$sJavaScriptトラッキングコード%2$s を設定してください。",
"SiteWithoutDataMessageDisappears": "このメッセージは、このウェブサイトの一部のデータが追跡されるとすぐに消えます。",
- "SiteWithoutDataSetupGoals": "一方で、おそらくいくつかの%1$s目標を設定したい%2$sと思われるでしょう。",
"SuperUserAccessCan": "スーパーユーザーアクセス権限を持つユーザーは、新しいウェブサイトに対し %1$s グローバルリストを指定 %2$s することもできます。",
"Timezone": "タイムゾーン",
"TrackingSiteSearch": "サイト内検索のトラッキング",
diff --git a/plugins/SitesManager/lang/ko.json b/plugins/SitesManager/lang/ko.json
index 669131a57a..87821e980c 100644
--- a/plugins/SitesManager/lang/ko.json
+++ b/plugins/SitesManager/lang/ko.json
@@ -68,9 +68,7 @@
"SiteSearchUse": "당신은 Piwik를 사용하여 웹사이트의 내부검색 엔진에서 방문자가 어떤 검색을 했는지 추적하고 보고받을 수 있습니다.",
"SiteWithoutDataTitle": "아직 아무런 데이터가 기록되지 않았습니다.",
"SiteWithoutDataDescription": "아직 해당 사이트를 추적하여 분석한 데이터가 없습니다.",
- "SiteWithoutDataSetupTracking": "만약 %1$s자바스크립트 추적 코드%2$s를 당신의 웹사이트에 설정하지 않았다면 이를 수행해주세요.",
"SiteWithoutDataMessageDisappears": "이 글귀는 해당 웹사이트에서 데이터가 추적되어지는 즉시 사라질 것이다.",
- "SiteWithoutDataSetupGoals": "한편, 당신은 %1$s목표 설정%2$s을 하고 싶을 것이다.",
"SuperUserAccessCan": "슈퍼 유저는 새로운 사이트에 대해서 %1$s일반 웹사이트 설정%2$s을 통해 관리할 수 있습니다.",
"Timezone": "시간대",
"TrackingSiteSearch": "사이트 내부 검색 추적",
diff --git a/plugins/SitesManager/lang/nb.json b/plugins/SitesManager/lang/nb.json
index 834816e971..29c2f2a133 100644
--- a/plugins/SitesManager/lang/nb.json
+++ b/plugins/SitesManager/lang/nb.json
@@ -67,9 +67,7 @@
"SiteSearchUse": "Du kan bruke Piwik for å spore og rapportere hva besøkere søker etter i ditt nettsteds interne søkemotor.",
"SiteWithoutDataTitle": "Ingen data har blitt samlet inn ennå",
"SiteWithoutDataDescription": "Ingen analysedata har blitt sporet for dette nettstedet ennå.",
- "SiteWithoutDataSetupTracking": "Vennligst sett opp %1$sJavaScript-sporingskoden%2$s på ditt nettsted hvis du ikke har gjort det allerede.",
"SiteWithoutDataMessageDisappears": "Denne meldingen vil forsvinne så snart noe data har blitt registrert for dette nettstedet.",
- "SiteWithoutDataSetupGoals": "I mellomtiden vil du kanskje %1$ssette opp noen mål%2$s.",
"SuperUserAccessCan": "En bruker med superbrukertilgang kan også %1$s spesifisere globale innstillinger%2$s for nye nettsteder.",
"Timezone": "Tidssone",
"TrackingSiteSearch": "Sporer interne nettstedssøk",
diff --git a/plugins/SitesManager/lang/nl.json b/plugins/SitesManager/lang/nl.json
index 6828ce5ef9..855f878c4b 100644
--- a/plugins/SitesManager/lang/nl.json
+++ b/plugins/SitesManager/lang/nl.json
@@ -65,9 +65,7 @@
"SiteSearchUse": "Je kan Piwik gebruiken om te volgen en te rapporteren wat bezoekers via de interne zoekmachine op je website zoeken.",
"SiteWithoutDataTitle": "Er zijn nog geen gegevens geregistreerd",
"SiteWithoutDataDescription": "Er is nog geen analytics data voor deze website bijgehouden.",
- "SiteWithoutDataSetupTracking": "Voeg %1$sJavaScript tracking code%2$s toe aan je website, wanneer je dit nog niet hebt gedaan.",
"SiteWithoutDataMessageDisappears": "Deze melding zal verdwijnen wanneer er wat data voor deze website is ontvangen.",
- "SiteWithoutDataSetupGoals": "In de tussen tijd, mischien wil je een aantal doelen%2$s opzettens%1$s.",
"SuperUserAccessCan": "Een gebruiker met Super User rechten kan ook %1$s de globale instellingen specificeren%2$s voor nieuwe websites.",
"Timezone": "Tijdzone",
"TrackingSiteSearch": "Interne site zoekmachine bijhouden.",
diff --git a/plugins/SitesManager/lang/pt-br.json b/plugins/SitesManager/lang/pt-br.json
index 3401df4a6e..31e6cd5e56 100644
--- a/plugins/SitesManager/lang/pt-br.json
+++ b/plugins/SitesManager/lang/pt-br.json
@@ -68,9 +68,7 @@
"SiteSearchUse": "Você pode utilizar o Piwik para acompanhar e informar o que os visitantes estão procurando no motor de pesquisa interna do seu site.",
"SiteWithoutDataTitle": "Ainda não há dados gravados",
"SiteWithoutDataDescription": "Ainda não há dados de análises de rastreamentos para este website",
- "SiteWithoutDataSetupTracking": "Por favor, configure o %1$scódigo de rastreamento JavaScript%2$s em seu website, caso ainda não tenha feito.",
"SiteWithoutDataMessageDisappears": "Esta mensagem vai desaparecer assim que alguns dados foram rastreados para este site.",
- "SiteWithoutDataSetupGoals": "Por enquanto, talvez você queira %1$sdefinir algumas metas%2$s.",
"SuperUserAccessCan": "Um usuário com privilégio de Super Usuário também pode %1$s especificar configurações globais%2$s para novos sites.",
"Timezone": "Fuso horário",
"TrackingSiteSearch": "Acompanhamento de pesquisa interna do site",
diff --git a/plugins/SitesManager/lang/sq.json b/plugins/SitesManager/lang/sq.json
index 118ca7a9ef..172bd50d14 100644
--- a/plugins/SitesManager/lang/sq.json
+++ b/plugins/SitesManager/lang/sq.json
@@ -44,8 +44,12 @@
"ListOfIpsToBeExcludedOnAllWebsites": "IP-të më poshtë do të përjashtohen nga ndjekja në krejt sajtet.",
"ListOfQueryParametersToBeExcludedOnAllWebsites": "Parametrat për URL-ra Kërkesash më poshtë do të përjashtohen nga URL-të për krejt sajtet.",
"ListOfQueryParametersToExclude": "Jepni listën e Parametrave URL Query, një për rresht, që duhen përjashtuar nga raportet URL Faqesh. Mbulohen shprehje të rregullta si %s.",
+ "LogAnalytics": "Analiza Regjistri",
+ "LogAnalyticsDescription": "Nëse metoda Javascript e gjurmimeve s’është e mundur, si metodë alternative për gjurmimin e përdoruesve të sajtit tuaj mund të %1$spërdorni analizat e regjistrit të shërbyesit%2$s.",
"MainDescription": "Raportet tuaja Analizash Web lypin sajte! Shtoni, përditësoni, hiqni sajte, dhe shfaqni JavaScript-in për futje në faqet tuaja.",
"MenuManage": "Administroni",
+ "MobileAppsAndSDKs": "Aplikacione dhe SDK-ra për celular",
+ "MobileAppsAndSDKsDescription": "S’ndiqni ndonjë sajt? Mundeni të ndiqni një aplikacion për celular, ose çfarëdo lloj tjetër aplikacioni që përdor një nga %1$sSDK-të e gatshme%2$s.",
"NotAnEcommerceSite": "Jo sajt E-tregtie",
"NotFound": "S’u gjetën sajte për",
"NoWebsites": "S’keni ndonjë sajt për ta administruar.",
@@ -69,9 +73,9 @@
"SiteSearchUse": "Mund ta përdorni Piwik-un për të ndjekur dhe raportuar se çfarë kërkojnë vizitorët me motorin e kërkimeve të brendshme në sajtin tuaj .",
"SiteWithoutDataTitle": "Ende s’ka të dhëna të regjistruara",
"SiteWithoutDataDescription": "Për këtë sajt s’janë ndjekur ende të dhëna analitike.",
- "SiteWithoutDataSetupTracking": "Ju lutemi, rregulloni te sajti juaj %1$skodin e ndjekjeve JavaScript%2$s, nëse s’e keni bërë tashmë.",
+ "SiteWithoutDataSetupTracking": "Ju lutemi, rregulloni më poshtë %1$skodin e gjurmimit%2$s për sajtin apo aplikacionin tuaj për celular, po qe se s’e keni bërë ende.",
"SiteWithoutDataMessageDisappears": "Ky mesazh do të zhduket sapo të ketë ndoca të dhëna të ndjekura për këtë sajt.",
- "SiteWithoutDataSetupGoals": "Ndoshta mund të donit, ndërkohë, të %1$scaktoni ndonjë objektiv%2$s.",
+ "SiteWithoutDataSetupGoals": "Ndërkohë, mund të donit ndoshta të %1$scaktoni ndonjë objektiv global%2$s ose të mësoni më tepër rreth %3$sveçorive%4$s të Piwik-ut, në një nga %5$sudhërrëgyesit%6$s tanë apo %7$sFAQ%8$s.",
"SuperUserAccessCan": "Një përdorues me hyrje Superpërdoruesi mundet gjithashtu %1$s të caktojë rregullime të përgjithshme%2$s për sajte të rinj.",
"Timezone": "Zonë kohore",
"TrackingSiteSearch": "Ndjekje Kërkimesh Brenda Sajti",
diff --git a/plugins/SitesManager/lang/sr.json b/plugins/SitesManager/lang/sr.json
index cbeb9a658e..07bf1d1ffe 100644
--- a/plugins/SitesManager/lang/sr.json
+++ b/plugins/SitesManager/lang/sr.json
@@ -68,9 +68,7 @@
"SiteSearchUse": "Možete koristiti Piwik za praćenje i kreiranje izveštaja o tome šta posetioci traže na vašem sajtu koristeći polje za pretragu.",
"SiteWithoutDataTitle": "Nikakvi podaci do sad nisu zabeleženi",
"SiteWithoutDataDescription": "Još uvek nema analitičkih podataka za ova sajt.",
- "SiteWithoutDataSetupTracking": "Molimo vas da postavite %1$sJavaScript kod za praćenje%2$s na vaš sajt ukoliko to već niste učinili.",
"SiteWithoutDataMessageDisappears": "Ova poruka će nestati čim se zabeleži neki saobraćaj na sajtu.",
- "SiteWithoutDataSetupGoals": "U međuvremenu možete da %1$spostavite neke ciljeve %2$s.",
"SuperUserAccessCan": "Korisnik sa superkorisničkim nivoom pristupa može i da %1$spostavi globalna podešavanja%2$s za nove sajtove.",
"Timezone": "Vremenska zona",
"TrackingSiteSearch": "Praćenje pretraživanja sajta",
diff --git a/plugins/SitesManager/lang/sv.json b/plugins/SitesManager/lang/sv.json
index c32bf9cc29..64ab73b9aa 100644
--- a/plugins/SitesManager/lang/sv.json
+++ b/plugins/SitesManager/lang/sv.json
@@ -66,9 +66,7 @@
"SiteSearchUse": "Du kan använda Piwik för att spåra och rapportera om vad besökarna söker efter med din webbplats interna sökmotor.",
"SiteWithoutDataTitle": "Inga data har samlats in än",
"SiteWithoutDataDescription": "Inga data har samlats in för denna webbplats än.",
- "SiteWithoutDataSetupTracking": "Vänligen konfigurera %1$sJavaScript spårningskoden%2$s på din webbplats om du inte redan har gjort det.",
"SiteWithoutDataMessageDisappears": "Detta meddelande kommer visas tills data samlats in för denna webbsida.",
- "SiteWithoutDataSetupGoals": "Under tiden kanske du vill %1$ssätta upp några mål%2$s.",
"SuperUserAccessCan": "En användare med Superbehörighet kan också %1$s specificera globala inställningar%2$s för nya webbsidor.",
"Timezone": "Tidszon",
"TrackingSiteSearch": "Spåra webbplatsens interna sökfunktion",
diff --git a/plugins/SitesManager/lang/uk.json b/plugins/SitesManager/lang/uk.json
index 7d7073dbed..3b7d862150 100644
--- a/plugins/SitesManager/lang/uk.json
+++ b/plugins/SitesManager/lang/uk.json
@@ -69,9 +69,7 @@
"SiteSearchUse": "Ви можете використовувати Piwik для відстеження та відображення аналітики по тому, що шукають відвідувачі на вашому сайті використовуючи функціонал для внутрішнього пошуку по сайту.",
"SiteWithoutDataTitle": "Ще ніякі дані не були записані",
"SiteWithoutDataDescription": "Немає даних аналітики що відстежувалися на цьому сайті.",
- "SiteWithoutDataSetupTracking": "Будь ласка, налаштуйте %1$sJavaScript код відстеження%2$s на вашому сайті, якщо ви цього не зробили раніше.",
"SiteWithoutDataMessageDisappears": "Це повідомлення зникне, як тільки перші дані отримаються на цей сайт.",
- "SiteWithoutDataSetupGoals": "У той же час, може бути, ви хотіли б %1$sвстановити деякі цілі%2$s.",
"SuperUserAccessCan": "Користувач з правами суперкористувача може також %1$sвказати загальні налаштування%2$s для нових веб-сайтів.",
"Timezone": "Часовий пояс",
"TrackingSiteSearch": "Відстежувати внутрішній пошук по сайту",
diff --git a/plugins/SitesManager/lang/zh-tw.json b/plugins/SitesManager/lang/zh-tw.json
index 7ddbbcb304..837f3f2508 100644
--- a/plugins/SitesManager/lang/zh-tw.json
+++ b/plugins/SitesManager/lang/zh-tw.json
@@ -44,8 +44,12 @@
"ListOfIpsToBeExcludedOnAllWebsites": "以下的 IP 位址將會被所有網站排除。",
"ListOfQueryParametersToBeExcludedOnAllWebsites": "以下的網址查詢參數將會被所有網站排除。",
"ListOfQueryParametersToExclude": "輸入網址查詢參數列表,一行一個,將從網頁網址報表中被排除。支援正規表示式如 %s。",
+ "LogAnalytics": "紀錄檔分析",
+ "LogAnalyticsDescription": "如果無法使用 Javascript 來追蹤,你可以改用%1$s伺服器紀錄檔追蹤%2$s的方式來追蹤你的網站使用者。",
"MainDescription": "你的網站分析報告需要網站!新增、更新或刪除網站,並顯示 JavaScript 追蹤程式碼插入在你的網頁之中。",
"MenuManage": "管理",
+ "MobileAppsAndSDKs": "行動應用程式和 SDK",
+ "MobileAppsAndSDKsDescription": "不是追蹤網站?你也可以使用%1$s可用的 SDK%2$s 來追蹤行動應用程式或任何應用程式。",
"NotAnEcommerceSite": "非電子商務網站",
"NotFound": "找不到網站",
"NoWebsites": "你沒有任何網站可以管理。",
@@ -69,9 +73,9 @@
"SiteSearchUse": "你可以使用 Piwik 來追蹤並報告訪客在你網站內的搜尋引擎中搜尋了什麼。",
"SiteWithoutDataTitle": "還沒有紀錄到資料",
"SiteWithoutDataDescription": "這個網站還沒有追蹤分析資料。",
- "SiteWithoutDataSetupTracking": "請在你的網站中放置 %1$sJavaScript 追蹤程式碼%2$s。",
+ "SiteWithoutDataSetupTracking": "請在你的網站或行動應用程式中設定%1$s追蹤程式碼%2$s(如果你還沒完成的話)。",
"SiteWithoutDataMessageDisappears": "此訊息將會在這個網站開始收集到追蹤資料時隱藏。",
- "SiteWithoutDataSetupGoals": "同時,你也可能想要%1$s設定一些目標%2$s。",
+ "SiteWithoutDataSetupGoals": "同時,你或許會想要%1$s設定一些目標%2$s,或在我們的%5$s指南%6$s和 %7$sFAQs%8$s 中了解更多關於 Piwik 的%3$s功能%4$s。",
"SuperUserAccessCan": "一個擁有超級使用者權限的使用者也可以為新網站%1$s指定全域設定%2$s。",
"Timezone": "時區",
"TrackingSiteSearch": "追蹤站內搜尋",
diff --git a/plugins/SitesManager/stylesheets/SitesManager.less b/plugins/SitesManager/stylesheets/SitesManager.less
index dc3b4e48b0..2452a806ae 100644
--- a/plugins/SitesManager/stylesheets/SitesManager.less
+++ b/plugins/SitesManager/stylesheets/SitesManager.less
@@ -113,6 +113,10 @@ td.editable-site-field:hover {
font-weight: normal;
color: black;
}
+
+ p + p {
+ margin-top: 10px;
+ }
}
#js-visitor-cv-extra th {
diff --git a/plugins/SitesManager/templates/_displayJavascriptCode.twig b/plugins/SitesManager/templates/_displayJavascriptCode.twig
index b5c4671c7e..a400c316ad 100644
--- a/plugins/SitesManager/templates/_displayJavascriptCode.twig
+++ b/plugins/SitesManager/templates/_displayJavascriptCode.twig
@@ -13,5 +13,19 @@
<p>{{ 'CoreAdminHome_JSTrackingIntro5'|translate('<a rel="noreferrer" target="_blank" href="http://piwik.org/docs/javascript-tracking/">','</a>')|raw }}</p>
- <p>{{ 'Installation_JSTracking_EndNote'|translate('','')|raw }}</p>
+ {% if isInstall is defined %}
+ <p>{{ 'Installation_JSTracking_EndNote'|translate('', '')|raw }}</p>
+ {% else %}
+ <p>{{ 'CoreAdminHome_JSTracking_EndNote'|translate('<a href="' ~ linkTo({'module': 'CoreAdminHome', 'action': 'trackingCodeGenerator'}) ~'">','</a>')|raw }}</p>
+ {% endif %}
+
+ <h3>{{ 'SitesManager_LogAnalytics'|translate }}</h3>
+
+ <p>{{ 'SitesManager_LogAnalyticsDescription'|translate('<a href="https://piwik.org/log-analytics/" rel="noreferrer" target="_blank">', '</a>')|raw }}</p>
+
+ <h3>{{ 'SitesManager_MobileAppsAndSDKs'|translate }}</h3>
+
+ <p>{{ 'SitesManager_MobileAppsAndSDKsDescription'|translate('<a href="https://piwik.org/integrate/#programming-language-platforms-and-frameworks" rel="noreferrer" target="_blank">','</a>')|raw }}</p>
+ <p></p>
+
</div> \ No newline at end of file
diff --git a/plugins/SitesManager/templates/siteWithoutData.twig b/plugins/SitesManager/templates/siteWithoutData.twig
index d8596cf0fd..bf0db36a39 100644
--- a/plugins/SitesManager/templates/siteWithoutData.twig
+++ b/plugins/SitesManager/templates/siteWithoutData.twig
@@ -41,7 +41,10 @@
{{ 'SitesManager_SiteWithoutDataSetupGoals'|translate('<a href="' ~ linkTo({
'module': 'Goals',
'action': 'manage',
- }) ~ '">', "</a>")|raw }}
+ }) ~ '">', "</a>",
+ '<a href="https://piwik.org/features/" rel="noreferrer" target="_blank">', "</a>",
+ '<a href="https://piwik.org/docs/" rel="noreferrer" target="_blank">', "</a>",
+ '<a href="https://piwik.org/faq/" rel="noreferrer" target="_blank">', "</a>")|raw }}
</p>
{{ trackingHelp|raw }}
diff --git a/plugins/UserCountry/API.php b/plugins/UserCountry/API.php
index 176030ec31..c4e12b550a 100644
--- a/plugins/UserCountry/API.php
+++ b/plugins/UserCountry/API.php
@@ -38,8 +38,7 @@ class API extends \Piwik\Plugin\API
$dataTable->filter('ColumnCallbackAddMetadata', array('label', 'logo', __NAMESPACE__ . '\getFlagFromCode'));
$dataTable->filter('ColumnCallbackReplace', array('label', __NAMESPACE__ . '\countryTranslate'));
- $dataTable->queueFilter('ColumnCallbackAddMetadata', array(array(), 'logoWidth', function () { return 16; }));
- $dataTable->queueFilter('ColumnCallbackAddMetadata', array(array(), 'logoHeight', function () { return 11; }));
+ $dataTable->queueFilter('ColumnCallbackAddMetadata', array(array(), 'logoHeight', function () { return 16; }));
return $dataTable;
}
diff --git a/plugins/UserCountry/functions.php b/plugins/UserCountry/functions.php
index 33a95600bb..008e4786a5 100644
--- a/plugins/UserCountry/functions.php
+++ b/plugins/UserCountry/functions.php
@@ -22,7 +22,7 @@ use Piwik\Tracker\Visit;
*/
function getFlagFromCode($code)
{
- $pathInPiwik = 'plugins/UserCountry/images/flags/%s.png';
+ $pathInPiwik = 'plugins/Morpheus/icons/dist/flags/%s.png';
$pathWithCode = sprintf($pathInPiwik, $code);
$absolutePath = PIWIK_INCLUDE_PATH . '/' . $pathWithCode;
if (file_exists($absolutePath)) {
diff --git a/plugins/UserCountry/images/flags/a1.png b/plugins/UserCountry/images/flags/a1.png
deleted file mode 100644
index da6e1bbe89..0000000000
--- a/plugins/UserCountry/images/flags/a1.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/a2.png b/plugins/UserCountry/images/flags/a2.png
deleted file mode 100644
index da6e1bbe89..0000000000
--- a/plugins/UserCountry/images/flags/a2.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ac.png b/plugins/UserCountry/images/flags/ac.png
deleted file mode 100644
index 405e897c52..0000000000
--- a/plugins/UserCountry/images/flags/ac.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ad.png b/plugins/UserCountry/images/flags/ad.png
deleted file mode 100644
index 385fa1d7ea..0000000000
--- a/plugins/UserCountry/images/flags/ad.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ae.png b/plugins/UserCountry/images/flags/ae.png
deleted file mode 100644
index cf10beb4a3..0000000000
--- a/plugins/UserCountry/images/flags/ae.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/af.png b/plugins/UserCountry/images/flags/af.png
deleted file mode 100644
index 1b24b434fa..0000000000
--- a/plugins/UserCountry/images/flags/af.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ag.png b/plugins/UserCountry/images/flags/ag.png
deleted file mode 100644
index 3ca9b1763c..0000000000
--- a/plugins/UserCountry/images/flags/ag.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ai.png b/plugins/UserCountry/images/flags/ai.png
deleted file mode 100644
index 9bde3ce709..0000000000
--- a/plugins/UserCountry/images/flags/ai.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/al.png b/plugins/UserCountry/images/flags/al.png
deleted file mode 100644
index e5f7b0647c..0000000000
--- a/plugins/UserCountry/images/flags/al.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/am.png b/plugins/UserCountry/images/flags/am.png
deleted file mode 100644
index 6d0a22383b..0000000000
--- a/plugins/UserCountry/images/flags/am.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/an.png b/plugins/UserCountry/images/flags/an.png
deleted file mode 100644
index c5165608ce..0000000000
--- a/plugins/UserCountry/images/flags/an.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ao.png b/plugins/UserCountry/images/flags/ao.png
deleted file mode 100644
index c0872c46f8..0000000000
--- a/plugins/UserCountry/images/flags/ao.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ap.png b/plugins/UserCountry/images/flags/ap.png
deleted file mode 100644
index da6e1bbe89..0000000000
--- a/plugins/UserCountry/images/flags/ap.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/aq.png b/plugins/UserCountry/images/flags/aq.png
deleted file mode 100644
index 217eaba391..0000000000
--- a/plugins/UserCountry/images/flags/aq.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ar.png b/plugins/UserCountry/images/flags/ar.png
deleted file mode 100644
index 0f09ebdd8e..0000000000
--- a/plugins/UserCountry/images/flags/ar.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/as.png b/plugins/UserCountry/images/flags/as.png
deleted file mode 100644
index 774776150a..0000000000
--- a/plugins/UserCountry/images/flags/as.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/at.png b/plugins/UserCountry/images/flags/at.png
deleted file mode 100644
index 700a656671..0000000000
--- a/plugins/UserCountry/images/flags/at.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/au.png b/plugins/UserCountry/images/flags/au.png
deleted file mode 100644
index 709eac00de..0000000000
--- a/plugins/UserCountry/images/flags/au.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/aw.png b/plugins/UserCountry/images/flags/aw.png
deleted file mode 100644
index 7b7d01c10f..0000000000
--- a/plugins/UserCountry/images/flags/aw.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ax.png b/plugins/UserCountry/images/flags/ax.png
deleted file mode 100644
index ff51987a16..0000000000
--- a/plugins/UserCountry/images/flags/ax.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/az.png b/plugins/UserCountry/images/flags/az.png
deleted file mode 100644
index 2f189667f6..0000000000
--- a/plugins/UserCountry/images/flags/az.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ba.png b/plugins/UserCountry/images/flags/ba.png
deleted file mode 100644
index c996c301cb..0000000000
--- a/plugins/UserCountry/images/flags/ba.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bb.png b/plugins/UserCountry/images/flags/bb.png
deleted file mode 100644
index 50992817cf..0000000000
--- a/plugins/UserCountry/images/flags/bb.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bd.png b/plugins/UserCountry/images/flags/bd.png
deleted file mode 100644
index 685325475a..0000000000
--- a/plugins/UserCountry/images/flags/bd.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/be.png b/plugins/UserCountry/images/flags/be.png
deleted file mode 100644
index 12c10f46e0..0000000000
--- a/plugins/UserCountry/images/flags/be.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bf.png b/plugins/UserCountry/images/flags/bf.png
deleted file mode 100644
index 22b42bcc98..0000000000
--- a/plugins/UserCountry/images/flags/bf.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bg.png b/plugins/UserCountry/images/flags/bg.png
deleted file mode 100644
index 41f34d8562..0000000000
--- a/plugins/UserCountry/images/flags/bg.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bh.png b/plugins/UserCountry/images/flags/bh.png
deleted file mode 100644
index 32ca603f30..0000000000
--- a/plugins/UserCountry/images/flags/bh.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bi.png b/plugins/UserCountry/images/flags/bi.png
deleted file mode 100644
index 1f03e129ad..0000000000
--- a/plugins/UserCountry/images/flags/bi.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bj.png b/plugins/UserCountry/images/flags/bj.png
deleted file mode 100644
index 53d4eb1e99..0000000000
--- a/plugins/UserCountry/images/flags/bj.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bl.png b/plugins/UserCountry/images/flags/bl.png
deleted file mode 100644
index 744ede391d..0000000000
--- a/plugins/UserCountry/images/flags/bl.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bm.png b/plugins/UserCountry/images/flags/bm.png
deleted file mode 100644
index 3cb8803156..0000000000
--- a/plugins/UserCountry/images/flags/bm.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bn.png b/plugins/UserCountry/images/flags/bn.png
deleted file mode 100644
index 9aafbb389c..0000000000
--- a/plugins/UserCountry/images/flags/bn.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bo.png b/plugins/UserCountry/images/flags/bo.png
deleted file mode 100644
index 46b519eae6..0000000000
--- a/plugins/UserCountry/images/flags/bo.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bq.png b/plugins/UserCountry/images/flags/bq.png
deleted file mode 100644
index 77f75f6ffa..0000000000
--- a/plugins/UserCountry/images/flags/bq.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/br.png b/plugins/UserCountry/images/flags/br.png
deleted file mode 100644
index 5cdff06a4a..0000000000
--- a/plugins/UserCountry/images/flags/br.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bs.png b/plugins/UserCountry/images/flags/bs.png
deleted file mode 100644
index bc5333e0b9..0000000000
--- a/plugins/UserCountry/images/flags/bs.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bt.png b/plugins/UserCountry/images/flags/bt.png
deleted file mode 100644
index 0abb9130c7..0000000000
--- a/plugins/UserCountry/images/flags/bt.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bu.png b/plugins/UserCountry/images/flags/bu.png
deleted file mode 100644
index d96c2f30f7..0000000000
--- a/plugins/UserCountry/images/flags/bu.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bv.png b/plugins/UserCountry/images/flags/bv.png
deleted file mode 100644
index 74264c5866..0000000000
--- a/plugins/UserCountry/images/flags/bv.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bw.png b/plugins/UserCountry/images/flags/bw.png
deleted file mode 100644
index 463a97775a..0000000000
--- a/plugins/UserCountry/images/flags/bw.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/by.png b/plugins/UserCountry/images/flags/by.png
deleted file mode 100644
index 81c5086ca6..0000000000
--- a/plugins/UserCountry/images/flags/by.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/bz.png b/plugins/UserCountry/images/flags/bz.png
deleted file mode 100644
index f653173d4f..0000000000
--- a/plugins/UserCountry/images/flags/bz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ca.png b/plugins/UserCountry/images/flags/ca.png
deleted file mode 100644
index b7c48f6341..0000000000
--- a/plugins/UserCountry/images/flags/ca.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cat.png b/plugins/UserCountry/images/flags/cat.png
deleted file mode 100644
index 58faea35b8..0000000000
--- a/plugins/UserCountry/images/flags/cat.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cc.png b/plugins/UserCountry/images/flags/cc.png
deleted file mode 100644
index 0791bad575..0000000000
--- a/plugins/UserCountry/images/flags/cc.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cd.png b/plugins/UserCountry/images/flags/cd.png
deleted file mode 100644
index 6cdfe5c08b..0000000000
--- a/plugins/UserCountry/images/flags/cd.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cf.png b/plugins/UserCountry/images/flags/cf.png
deleted file mode 100644
index d932c21016..0000000000
--- a/plugins/UserCountry/images/flags/cf.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cg.png b/plugins/UserCountry/images/flags/cg.png
deleted file mode 100644
index 0811ccce06..0000000000
--- a/plugins/UserCountry/images/flags/cg.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ch.png b/plugins/UserCountry/images/flags/ch.png
deleted file mode 100644
index 6f6723fb89..0000000000
--- a/plugins/UserCountry/images/flags/ch.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ci.png b/plugins/UserCountry/images/flags/ci.png
deleted file mode 100644
index b0d78c7ec6..0000000000
--- a/plugins/UserCountry/images/flags/ci.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ck.png b/plugins/UserCountry/images/flags/ck.png
deleted file mode 100644
index 99efe50044..0000000000
--- a/plugins/UserCountry/images/flags/ck.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cl.png b/plugins/UserCountry/images/flags/cl.png
deleted file mode 100644
index 74a69dc8e8..0000000000
--- a/plugins/UserCountry/images/flags/cl.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cm.png b/plugins/UserCountry/images/flags/cm.png
deleted file mode 100644
index 65d3827a46..0000000000
--- a/plugins/UserCountry/images/flags/cm.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cn.png b/plugins/UserCountry/images/flags/cn.png
deleted file mode 100644
index 9f1b310908..0000000000
--- a/plugins/UserCountry/images/flags/cn.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/co.png b/plugins/UserCountry/images/flags/co.png
deleted file mode 100644
index eeb10fd86a..0000000000
--- a/plugins/UserCountry/images/flags/co.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cp.png b/plugins/UserCountry/images/flags/cp.png
deleted file mode 100644
index 744ede391d..0000000000
--- a/plugins/UserCountry/images/flags/cp.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cr.png b/plugins/UserCountry/images/flags/cr.png
deleted file mode 100644
index 413797bfe2..0000000000
--- a/plugins/UserCountry/images/flags/cr.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cs.png b/plugins/UserCountry/images/flags/cs.png
deleted file mode 100644
index 0e0fb6deba..0000000000
--- a/plugins/UserCountry/images/flags/cs.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cu.png b/plugins/UserCountry/images/flags/cu.png
deleted file mode 100644
index 0303459ddd..0000000000
--- a/plugins/UserCountry/images/flags/cu.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cv.png b/plugins/UserCountry/images/flags/cv.png
deleted file mode 100644
index 7a1f79755d..0000000000
--- a/plugins/UserCountry/images/flags/cv.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cw.png b/plugins/UserCountry/images/flags/cw.png
deleted file mode 100644
index a6d5f2834b..0000000000
--- a/plugins/UserCountry/images/flags/cw.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cx.png b/plugins/UserCountry/images/flags/cx.png
deleted file mode 100644
index 8acecd6ec6..0000000000
--- a/plugins/UserCountry/images/flags/cx.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cy.png b/plugins/UserCountry/images/flags/cy.png
deleted file mode 100644
index 9c2de21570..0000000000
--- a/plugins/UserCountry/images/flags/cy.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/cz.png b/plugins/UserCountry/images/flags/cz.png
deleted file mode 100644
index 69ea675978..0000000000
--- a/plugins/UserCountry/images/flags/cz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/de.png b/plugins/UserCountry/images/flags/de.png
deleted file mode 100644
index 2df162b4af..0000000000
--- a/plugins/UserCountry/images/flags/de.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/dg.png b/plugins/UserCountry/images/flags/dg.png
deleted file mode 100644
index 3e74b6a316..0000000000
--- a/plugins/UserCountry/images/flags/dg.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/dj.png b/plugins/UserCountry/images/flags/dj.png
deleted file mode 100644
index 3fe7b82cf6..0000000000
--- a/plugins/UserCountry/images/flags/dj.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/dk.png b/plugins/UserCountry/images/flags/dk.png
deleted file mode 100644
index 622cebd2ce..0000000000
--- a/plugins/UserCountry/images/flags/dk.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/dm.png b/plugins/UserCountry/images/flags/dm.png
deleted file mode 100644
index c49785d5ba..0000000000
--- a/plugins/UserCountry/images/flags/dm.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/do.png b/plugins/UserCountry/images/flags/do.png
deleted file mode 100644
index 46230992f8..0000000000
--- a/plugins/UserCountry/images/flags/do.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/dz.png b/plugins/UserCountry/images/flags/dz.png
deleted file mode 100644
index 144fe154e2..0000000000
--- a/plugins/UserCountry/images/flags/dz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ea.png b/plugins/UserCountry/images/flags/ea.png
deleted file mode 100644
index cfd22a445c..0000000000
--- a/plugins/UserCountry/images/flags/ea.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ec.png b/plugins/UserCountry/images/flags/ec.png
deleted file mode 100644
index 4ca13865ff..0000000000
--- a/plugins/UserCountry/images/flags/ec.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ee.png b/plugins/UserCountry/images/flags/ee.png
deleted file mode 100644
index 17393b8b00..0000000000
--- a/plugins/UserCountry/images/flags/ee.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/eg.png b/plugins/UserCountry/images/flags/eg.png
deleted file mode 100644
index a7131a3a78..0000000000
--- a/plugins/UserCountry/images/flags/eg.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/eh.png b/plugins/UserCountry/images/flags/eh.png
deleted file mode 100644
index 89fe31a0a9..0000000000
--- a/plugins/UserCountry/images/flags/eh.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/er.png b/plugins/UserCountry/images/flags/er.png
deleted file mode 100644
index 2dfe8106b5..0000000000
--- a/plugins/UserCountry/images/flags/er.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/es.png b/plugins/UserCountry/images/flags/es.png
deleted file mode 100644
index cfd22a445c..0000000000
--- a/plugins/UserCountry/images/flags/es.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/et.png b/plugins/UserCountry/images/flags/et.png
deleted file mode 100644
index 11f79b002a..0000000000
--- a/plugins/UserCountry/images/flags/et.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/eu.png b/plugins/UserCountry/images/flags/eu.png
deleted file mode 100644
index 8f5a3eb31c..0000000000
--- a/plugins/UserCountry/images/flags/eu.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/fi.png b/plugins/UserCountry/images/flags/fi.png
deleted file mode 100644
index f3b1058cd4..0000000000
--- a/plugins/UserCountry/images/flags/fi.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/fj.png b/plugins/UserCountry/images/flags/fj.png
deleted file mode 100644
index 903f680324..0000000000
--- a/plugins/UserCountry/images/flags/fj.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/fk.png b/plugins/UserCountry/images/flags/fk.png
deleted file mode 100644
index 5adec9e3e2..0000000000
--- a/plugins/UserCountry/images/flags/fk.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/fm.png b/plugins/UserCountry/images/flags/fm.png
deleted file mode 100644
index 2e2a7a96f0..0000000000
--- a/plugins/UserCountry/images/flags/fm.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/fo.png b/plugins/UserCountry/images/flags/fo.png
deleted file mode 100644
index 39d2040bc6..0000000000
--- a/plugins/UserCountry/images/flags/fo.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/fr.png b/plugins/UserCountry/images/flags/fr.png
deleted file mode 100644
index 744ede391d..0000000000
--- a/plugins/UserCountry/images/flags/fr.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/fx.png b/plugins/UserCountry/images/flags/fx.png
deleted file mode 100644
index 744ede391d..0000000000
--- a/plugins/UserCountry/images/flags/fx.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ga.png b/plugins/UserCountry/images/flags/ga.png
deleted file mode 100644
index b6ca79e3bc..0000000000
--- a/plugins/UserCountry/images/flags/ga.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gb.png b/plugins/UserCountry/images/flags/gb.png
deleted file mode 100644
index 405e897c52..0000000000
--- a/plugins/UserCountry/images/flags/gb.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gd.png b/plugins/UserCountry/images/flags/gd.png
deleted file mode 100644
index 9b077bb889..0000000000
--- a/plugins/UserCountry/images/flags/gd.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ge.png b/plugins/UserCountry/images/flags/ge.png
deleted file mode 100644
index a700789b0b..0000000000
--- a/plugins/UserCountry/images/flags/ge.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gf.png b/plugins/UserCountry/images/flags/gf.png
deleted file mode 100644
index b3e22fb218..0000000000
--- a/plugins/UserCountry/images/flags/gf.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gg.png b/plugins/UserCountry/images/flags/gg.png
deleted file mode 100644
index 479141192e..0000000000
--- a/plugins/UserCountry/images/flags/gg.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gh.png b/plugins/UserCountry/images/flags/gh.png
deleted file mode 100644
index 952b1620aa..0000000000
--- a/plugins/UserCountry/images/flags/gh.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gi.png b/plugins/UserCountry/images/flags/gi.png
deleted file mode 100644
index f366599da8..0000000000
--- a/plugins/UserCountry/images/flags/gi.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gl.png b/plugins/UserCountry/images/flags/gl.png
deleted file mode 100644
index f22289be9d..0000000000
--- a/plugins/UserCountry/images/flags/gl.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gm.png b/plugins/UserCountry/images/flags/gm.png
deleted file mode 100644
index feed27f5c5..0000000000
--- a/plugins/UserCountry/images/flags/gm.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gn.png b/plugins/UserCountry/images/flags/gn.png
deleted file mode 100644
index 3efeaa534a..0000000000
--- a/plugins/UserCountry/images/flags/gn.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gp.png b/plugins/UserCountry/images/flags/gp.png
deleted file mode 100644
index 160dae80c0..0000000000
--- a/plugins/UserCountry/images/flags/gp.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gq.png b/plugins/UserCountry/images/flags/gq.png
deleted file mode 100644
index cad564ceb4..0000000000
--- a/plugins/UserCountry/images/flags/gq.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gr.png b/plugins/UserCountry/images/flags/gr.png
deleted file mode 100644
index dde5b025b7..0000000000
--- a/plugins/UserCountry/images/flags/gr.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gs.png b/plugins/UserCountry/images/flags/gs.png
deleted file mode 100644
index e37521f63b..0000000000
--- a/plugins/UserCountry/images/flags/gs.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gt.png b/plugins/UserCountry/images/flags/gt.png
deleted file mode 100644
index 75e76cddb9..0000000000
--- a/plugins/UserCountry/images/flags/gt.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gu.png b/plugins/UserCountry/images/flags/gu.png
deleted file mode 100644
index 4f034bcb29..0000000000
--- a/plugins/UserCountry/images/flags/gu.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gw.png b/plugins/UserCountry/images/flags/gw.png
deleted file mode 100644
index 2ad970b20b..0000000000
--- a/plugins/UserCountry/images/flags/gw.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/gy.png b/plugins/UserCountry/images/flags/gy.png
deleted file mode 100644
index 889b5d786e..0000000000
--- a/plugins/UserCountry/images/flags/gy.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/hk.png b/plugins/UserCountry/images/flags/hk.png
deleted file mode 100644
index 5a3663a87c..0000000000
--- a/plugins/UserCountry/images/flags/hk.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/hm.png b/plugins/UserCountry/images/flags/hm.png
deleted file mode 100644
index 709eac00de..0000000000
--- a/plugins/UserCountry/images/flags/hm.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/hn.png b/plugins/UserCountry/images/flags/hn.png
deleted file mode 100644
index d29296df9c..0000000000
--- a/plugins/UserCountry/images/flags/hn.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/hr.png b/plugins/UserCountry/images/flags/hr.png
deleted file mode 100644
index 20c66c3a60..0000000000
--- a/plugins/UserCountry/images/flags/hr.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ht.png b/plugins/UserCountry/images/flags/ht.png
deleted file mode 100644
index 7aef235b83..0000000000
--- a/plugins/UserCountry/images/flags/ht.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/hu.png b/plugins/UserCountry/images/flags/hu.png
deleted file mode 100644
index 2d01818314..0000000000
--- a/plugins/UserCountry/images/flags/hu.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ic.png b/plugins/UserCountry/images/flags/ic.png
deleted file mode 100644
index 3e48fe66e3..0000000000
--- a/plugins/UserCountry/images/flags/ic.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/id.png b/plugins/UserCountry/images/flags/id.png
deleted file mode 100644
index 2f67d57320..0000000000
--- a/plugins/UserCountry/images/flags/id.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ie.png b/plugins/UserCountry/images/flags/ie.png
deleted file mode 100644
index 9a799f8640..0000000000
--- a/plugins/UserCountry/images/flags/ie.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/il.png b/plugins/UserCountry/images/flags/il.png
deleted file mode 100644
index 6512bedf75..0000000000
--- a/plugins/UserCountry/images/flags/il.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/im.png b/plugins/UserCountry/images/flags/im.png
deleted file mode 100644
index 8df02545dc..0000000000
--- a/plugins/UserCountry/images/flags/im.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/in.png b/plugins/UserCountry/images/flags/in.png
deleted file mode 100644
index 351c6a51d9..0000000000
--- a/plugins/UserCountry/images/flags/in.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/io.png b/plugins/UserCountry/images/flags/io.png
deleted file mode 100644
index d87ed5f932..0000000000
--- a/plugins/UserCountry/images/flags/io.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/iq.png b/plugins/UserCountry/images/flags/iq.png
deleted file mode 100644
index 4eb6b878bd..0000000000
--- a/plugins/UserCountry/images/flags/iq.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ir.png b/plugins/UserCountry/images/flags/ir.png
deleted file mode 100644
index f60fb8ac2b..0000000000
--- a/plugins/UserCountry/images/flags/ir.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/is.png b/plugins/UserCountry/images/flags/is.png
deleted file mode 100644
index a4f546273d..0000000000
--- a/plugins/UserCountry/images/flags/is.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/it.png b/plugins/UserCountry/images/flags/it.png
deleted file mode 100644
index 534fd5e657..0000000000
--- a/plugins/UserCountry/images/flags/it.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/je.png b/plugins/UserCountry/images/flags/je.png
deleted file mode 100644
index 76758f4cd3..0000000000
--- a/plugins/UserCountry/images/flags/je.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/jm.png b/plugins/UserCountry/images/flags/jm.png
deleted file mode 100644
index f4012fa0dc..0000000000
--- a/plugins/UserCountry/images/flags/jm.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/jo.png b/plugins/UserCountry/images/flags/jo.png
deleted file mode 100644
index f7beba7ead..0000000000
--- a/plugins/UserCountry/images/flags/jo.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/jp.png b/plugins/UserCountry/images/flags/jp.png
deleted file mode 100644
index 0dc03c944b..0000000000
--- a/plugins/UserCountry/images/flags/jp.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ke.png b/plugins/UserCountry/images/flags/ke.png
deleted file mode 100644
index 5842ce3c42..0000000000
--- a/plugins/UserCountry/images/flags/ke.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/kg.png b/plugins/UserCountry/images/flags/kg.png
deleted file mode 100644
index 766bc89816..0000000000
--- a/plugins/UserCountry/images/flags/kg.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/kh.png b/plugins/UserCountry/images/flags/kh.png
deleted file mode 100644
index c2d9aea1ce..0000000000
--- a/plugins/UserCountry/images/flags/kh.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ki.png b/plugins/UserCountry/images/flags/ki.png
deleted file mode 100644
index 89bc45b7bd..0000000000
--- a/plugins/UserCountry/images/flags/ki.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/km.png b/plugins/UserCountry/images/flags/km.png
deleted file mode 100644
index adfe5fb1c3..0000000000
--- a/plugins/UserCountry/images/flags/km.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/kn.png b/plugins/UserCountry/images/flags/kn.png
deleted file mode 100644
index 4460ff6053..0000000000
--- a/plugins/UserCountry/images/flags/kn.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/kp.png b/plugins/UserCountry/images/flags/kp.png
deleted file mode 100644
index 134a9f1adf..0000000000
--- a/plugins/UserCountry/images/flags/kp.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/kr.png b/plugins/UserCountry/images/flags/kr.png
deleted file mode 100644
index 09ad2c39b5..0000000000
--- a/plugins/UserCountry/images/flags/kr.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/kw.png b/plugins/UserCountry/images/flags/kw.png
deleted file mode 100644
index 2742d890f3..0000000000
--- a/plugins/UserCountry/images/flags/kw.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ky.png b/plugins/UserCountry/images/flags/ky.png
deleted file mode 100644
index 3f0de844a1..0000000000
--- a/plugins/UserCountry/images/flags/ky.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/kz.png b/plugins/UserCountry/images/flags/kz.png
deleted file mode 100644
index 37a7ddf08e..0000000000
--- a/plugins/UserCountry/images/flags/kz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/la.png b/plugins/UserCountry/images/flags/la.png
deleted file mode 100644
index 7d5b624359..0000000000
--- a/plugins/UserCountry/images/flags/la.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/lb.png b/plugins/UserCountry/images/flags/lb.png
deleted file mode 100644
index 8affe4a819..0000000000
--- a/plugins/UserCountry/images/flags/lb.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/lc.png b/plugins/UserCountry/images/flags/lc.png
deleted file mode 100644
index 2c9870761b..0000000000
--- a/plugins/UserCountry/images/flags/lc.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/li.png b/plugins/UserCountry/images/flags/li.png
deleted file mode 100644
index 0d7ad9717c..0000000000
--- a/plugins/UserCountry/images/flags/li.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/lk.png b/plugins/UserCountry/images/flags/lk.png
deleted file mode 100644
index 0d14120392..0000000000
--- a/plugins/UserCountry/images/flags/lk.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/lr.png b/plugins/UserCountry/images/flags/lr.png
deleted file mode 100644
index 2376d28817..0000000000
--- a/plugins/UserCountry/images/flags/lr.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ls.png b/plugins/UserCountry/images/flags/ls.png
deleted file mode 100644
index dbc9ccb644..0000000000
--- a/plugins/UserCountry/images/flags/ls.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/lt.png b/plugins/UserCountry/images/flags/lt.png
deleted file mode 100644
index ace453f7f2..0000000000
--- a/plugins/UserCountry/images/flags/lt.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/lu.png b/plugins/UserCountry/images/flags/lu.png
deleted file mode 100644
index 4a9e3d5d9a..0000000000
--- a/plugins/UserCountry/images/flags/lu.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/lv.png b/plugins/UserCountry/images/flags/lv.png
deleted file mode 100644
index d9236f966b..0000000000
--- a/plugins/UserCountry/images/flags/lv.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ly.png b/plugins/UserCountry/images/flags/ly.png
deleted file mode 100644
index b5bd4c1607..0000000000
--- a/plugins/UserCountry/images/flags/ly.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ma.png b/plugins/UserCountry/images/flags/ma.png
deleted file mode 100644
index 44f2961c1b..0000000000
--- a/plugins/UserCountry/images/flags/ma.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mc.png b/plugins/UserCountry/images/flags/mc.png
deleted file mode 100644
index ecc5edb750..0000000000
--- a/plugins/UserCountry/images/flags/mc.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/md.png b/plugins/UserCountry/images/flags/md.png
deleted file mode 100644
index 80b6bf63af..0000000000
--- a/plugins/UserCountry/images/flags/md.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/me.png b/plugins/UserCountry/images/flags/me.png
deleted file mode 100644
index 0a3ee99b21..0000000000
--- a/plugins/UserCountry/images/flags/me.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mf.png b/plugins/UserCountry/images/flags/mf.png
deleted file mode 100644
index 744ede391d..0000000000
--- a/plugins/UserCountry/images/flags/mf.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mg.png b/plugins/UserCountry/images/flags/mg.png
deleted file mode 100644
index b8740f880c..0000000000
--- a/plugins/UserCountry/images/flags/mg.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mh.png b/plugins/UserCountry/images/flags/mh.png
deleted file mode 100644
index 9cf98c1546..0000000000
--- a/plugins/UserCountry/images/flags/mh.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mk.png b/plugins/UserCountry/images/flags/mk.png
deleted file mode 100644
index ee987490be..0000000000
--- a/plugins/UserCountry/images/flags/mk.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ml.png b/plugins/UserCountry/images/flags/ml.png
deleted file mode 100644
index a28459d13f..0000000000
--- a/plugins/UserCountry/images/flags/ml.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mm.png b/plugins/UserCountry/images/flags/mm.png
deleted file mode 100644
index 772f931f0b..0000000000
--- a/plugins/UserCountry/images/flags/mm.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mn.png b/plugins/UserCountry/images/flags/mn.png
deleted file mode 100644
index cc6c412171..0000000000
--- a/plugins/UserCountry/images/flags/mn.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mo.png b/plugins/UserCountry/images/flags/mo.png
deleted file mode 100644
index fc49f581ee..0000000000
--- a/plugins/UserCountry/images/flags/mo.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mp.png b/plugins/UserCountry/images/flags/mp.png
deleted file mode 100644
index df0c4b8c18..0000000000
--- a/plugins/UserCountry/images/flags/mp.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mq.png b/plugins/UserCountry/images/flags/mq.png
deleted file mode 100644
index 6ebdb3ab6c..0000000000
--- a/plugins/UserCountry/images/flags/mq.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mr.png b/plugins/UserCountry/images/flags/mr.png
deleted file mode 100644
index 6700d1ce92..0000000000
--- a/plugins/UserCountry/images/flags/mr.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ms.png b/plugins/UserCountry/images/flags/ms.png
deleted file mode 100644
index aef23fc512..0000000000
--- a/plugins/UserCountry/images/flags/ms.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mt.png b/plugins/UserCountry/images/flags/mt.png
deleted file mode 100644
index 837261ebc2..0000000000
--- a/plugins/UserCountry/images/flags/mt.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mu.png b/plugins/UserCountry/images/flags/mu.png
deleted file mode 100644
index c1e8b909d3..0000000000
--- a/plugins/UserCountry/images/flags/mu.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mv.png b/plugins/UserCountry/images/flags/mv.png
deleted file mode 100644
index f03f90ac65..0000000000
--- a/plugins/UserCountry/images/flags/mv.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mw.png b/plugins/UserCountry/images/flags/mw.png
deleted file mode 100644
index 45ea61d87f..0000000000
--- a/plugins/UserCountry/images/flags/mw.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mx.png b/plugins/UserCountry/images/flags/mx.png
deleted file mode 100644
index c78ac89691..0000000000
--- a/plugins/UserCountry/images/flags/mx.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/my.png b/plugins/UserCountry/images/flags/my.png
deleted file mode 100644
index d47867be7a..0000000000
--- a/plugins/UserCountry/images/flags/my.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/mz.png b/plugins/UserCountry/images/flags/mz.png
deleted file mode 100644
index 464017e923..0000000000
--- a/plugins/UserCountry/images/flags/mz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/na.png b/plugins/UserCountry/images/flags/na.png
deleted file mode 100644
index d685c4973d..0000000000
--- a/plugins/UserCountry/images/flags/na.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/nc.png b/plugins/UserCountry/images/flags/nc.png
deleted file mode 100644
index 88f4ea8559..0000000000
--- a/plugins/UserCountry/images/flags/nc.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ne.png b/plugins/UserCountry/images/flags/ne.png
deleted file mode 100644
index b5f3b8f06d..0000000000
--- a/plugins/UserCountry/images/flags/ne.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/nf.png b/plugins/UserCountry/images/flags/nf.png
deleted file mode 100644
index b00b331fe3..0000000000
--- a/plugins/UserCountry/images/flags/nf.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ng.png b/plugins/UserCountry/images/flags/ng.png
deleted file mode 100644
index 6dcc973ed5..0000000000
--- a/plugins/UserCountry/images/flags/ng.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ni.png b/plugins/UserCountry/images/flags/ni.png
deleted file mode 100644
index 44d8a0d3bd..0000000000
--- a/plugins/UserCountry/images/flags/ni.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/nl.png b/plugins/UserCountry/images/flags/nl.png
deleted file mode 100644
index 77f75f6ffa..0000000000
--- a/plugins/UserCountry/images/flags/nl.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/no.png b/plugins/UserCountry/images/flags/no.png
deleted file mode 100644
index 74264c5866..0000000000
--- a/plugins/UserCountry/images/flags/no.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/np.png b/plugins/UserCountry/images/flags/np.png
deleted file mode 100644
index 2afe8d7e5f..0000000000
--- a/plugins/UserCountry/images/flags/np.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/nr.png b/plugins/UserCountry/images/flags/nr.png
deleted file mode 100644
index 211e42bb19..0000000000
--- a/plugins/UserCountry/images/flags/nr.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/nt.png b/plugins/UserCountry/images/flags/nt.png
deleted file mode 100644
index b253914525..0000000000
--- a/plugins/UserCountry/images/flags/nt.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/nu.png b/plugins/UserCountry/images/flags/nu.png
deleted file mode 100644
index b9f7f988f4..0000000000
--- a/plugins/UserCountry/images/flags/nu.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/nz.png b/plugins/UserCountry/images/flags/nz.png
deleted file mode 100644
index be935de872..0000000000
--- a/plugins/UserCountry/images/flags/nz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/o1.png b/plugins/UserCountry/images/flags/o1.png
deleted file mode 100644
index da6e1bbe89..0000000000
--- a/plugins/UserCountry/images/flags/o1.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/om.png b/plugins/UserCountry/images/flags/om.png
deleted file mode 100644
index ec95c5aeb9..0000000000
--- a/plugins/UserCountry/images/flags/om.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/pa.png b/plugins/UserCountry/images/flags/pa.png
deleted file mode 100644
index a8a6ea5083..0000000000
--- a/plugins/UserCountry/images/flags/pa.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/pe.png b/plugins/UserCountry/images/flags/pe.png
deleted file mode 100644
index 1cf08251f1..0000000000
--- a/plugins/UserCountry/images/flags/pe.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/pf.png b/plugins/UserCountry/images/flags/pf.png
deleted file mode 100644
index 7e471d6438..0000000000
--- a/plugins/UserCountry/images/flags/pf.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/pg.png b/plugins/UserCountry/images/flags/pg.png
deleted file mode 100644
index 87160a51ee..0000000000
--- a/plugins/UserCountry/images/flags/pg.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ph.png b/plugins/UserCountry/images/flags/ph.png
deleted file mode 100644
index 703dd735a5..0000000000
--- a/plugins/UserCountry/images/flags/ph.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/pk.png b/plugins/UserCountry/images/flags/pk.png
deleted file mode 100644
index f20f3f6e2e..0000000000
--- a/plugins/UserCountry/images/flags/pk.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/pl.png b/plugins/UserCountry/images/flags/pl.png
deleted file mode 100644
index f6997a2ca6..0000000000
--- a/plugins/UserCountry/images/flags/pl.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/pm.png b/plugins/UserCountry/images/flags/pm.png
deleted file mode 100644
index 4aa799ba7b..0000000000
--- a/plugins/UserCountry/images/flags/pm.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/pn.png b/plugins/UserCountry/images/flags/pn.png
deleted file mode 100644
index 6f62a64d65..0000000000
--- a/plugins/UserCountry/images/flags/pn.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/pr.png b/plugins/UserCountry/images/flags/pr.png
deleted file mode 100644
index 4bf609fec4..0000000000
--- a/plugins/UserCountry/images/flags/pr.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ps.png b/plugins/UserCountry/images/flags/ps.png
deleted file mode 100644
index dd1d7821ec..0000000000
--- a/plugins/UserCountry/images/flags/ps.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/pt.png b/plugins/UserCountry/images/flags/pt.png
deleted file mode 100644
index 67e4878e88..0000000000
--- a/plugins/UserCountry/images/flags/pt.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/pw.png b/plugins/UserCountry/images/flags/pw.png
deleted file mode 100644
index 71fd0a48ca..0000000000
--- a/plugins/UserCountry/images/flags/pw.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/py.png b/plugins/UserCountry/images/flags/py.png
deleted file mode 100644
index 182d9dc0a9..0000000000
--- a/plugins/UserCountry/images/flags/py.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/qa.png b/plugins/UserCountry/images/flags/qa.png
deleted file mode 100644
index 86c39fadaa..0000000000
--- a/plugins/UserCountry/images/flags/qa.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/re.png b/plugins/UserCountry/images/flags/re.png
deleted file mode 100644
index 744ede391d..0000000000
--- a/plugins/UserCountry/images/flags/re.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ro.png b/plugins/UserCountry/images/flags/ro.png
deleted file mode 100644
index 2535bc81f2..0000000000
--- a/plugins/UserCountry/images/flags/ro.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/rs.png b/plugins/UserCountry/images/flags/rs.png
deleted file mode 100644
index 32f6cb945b..0000000000
--- a/plugins/UserCountry/images/flags/rs.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ru.png b/plugins/UserCountry/images/flags/ru.png
deleted file mode 100644
index 096b9c44e7..0000000000
--- a/plugins/UserCountry/images/flags/ru.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/rw.png b/plugins/UserCountry/images/flags/rw.png
deleted file mode 100644
index f4b0136eae..0000000000
--- a/plugins/UserCountry/images/flags/rw.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sa.png b/plugins/UserCountry/images/flags/sa.png
deleted file mode 100644
index 03cecfb8c9..0000000000
--- a/plugins/UserCountry/images/flags/sa.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sb.png b/plugins/UserCountry/images/flags/sb.png
deleted file mode 100644
index 8af1fb9d2f..0000000000
--- a/plugins/UserCountry/images/flags/sb.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sc.png b/plugins/UserCountry/images/flags/sc.png
deleted file mode 100644
index fec2961dbb..0000000000
--- a/plugins/UserCountry/images/flags/sc.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sd.png b/plugins/UserCountry/images/flags/sd.png
deleted file mode 100644
index eba0a2079b..0000000000
--- a/plugins/UserCountry/images/flags/sd.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/se.png b/plugins/UserCountry/images/flags/se.png
deleted file mode 100644
index e2b347c78b..0000000000
--- a/plugins/UserCountry/images/flags/se.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sf.png b/plugins/UserCountry/images/flags/sf.png
deleted file mode 100644
index f3b1058cd4..0000000000
--- a/plugins/UserCountry/images/flags/sf.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sg.png b/plugins/UserCountry/images/flags/sg.png
deleted file mode 100644
index 84172cae18..0000000000
--- a/plugins/UserCountry/images/flags/sg.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sh.png b/plugins/UserCountry/images/flags/sh.png
deleted file mode 100644
index 7e724d4781..0000000000
--- a/plugins/UserCountry/images/flags/sh.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/si.png b/plugins/UserCountry/images/flags/si.png
deleted file mode 100644
index 266b9df29d..0000000000
--- a/plugins/UserCountry/images/flags/si.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sj.png b/plugins/UserCountry/images/flags/sj.png
deleted file mode 100644
index 74264c5866..0000000000
--- a/plugins/UserCountry/images/flags/sj.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sk.png b/plugins/UserCountry/images/flags/sk.png
deleted file mode 100644
index 53d286a6e1..0000000000
--- a/plugins/UserCountry/images/flags/sk.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sl.png b/plugins/UserCountry/images/flags/sl.png
deleted file mode 100644
index c59445bc58..0000000000
--- a/plugins/UserCountry/images/flags/sl.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sm.png b/plugins/UserCountry/images/flags/sm.png
deleted file mode 100644
index 65ceb3aa49..0000000000
--- a/plugins/UserCountry/images/flags/sm.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sn.png b/plugins/UserCountry/images/flags/sn.png
deleted file mode 100644
index 89961cb89b..0000000000
--- a/plugins/UserCountry/images/flags/sn.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/so.png b/plugins/UserCountry/images/flags/so.png
deleted file mode 100644
index 00750dae44..0000000000
--- a/plugins/UserCountry/images/flags/so.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sr.png b/plugins/UserCountry/images/flags/sr.png
deleted file mode 100644
index 764f544694..0000000000
--- a/plugins/UserCountry/images/flags/sr.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ss.png b/plugins/UserCountry/images/flags/ss.png
deleted file mode 100644
index 84a52ca247..0000000000
--- a/plugins/UserCountry/images/flags/ss.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/st.png b/plugins/UserCountry/images/flags/st.png
deleted file mode 100644
index dd62dce7ff..0000000000
--- a/plugins/UserCountry/images/flags/st.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/su.png b/plugins/UserCountry/images/flags/su.png
deleted file mode 100644
index 3e1d87c962..0000000000
--- a/plugins/UserCountry/images/flags/su.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sv.png b/plugins/UserCountry/images/flags/sv.png
deleted file mode 100644
index 03ce5ec83c..0000000000
--- a/plugins/UserCountry/images/flags/sv.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sx.png b/plugins/UserCountry/images/flags/sx.png
deleted file mode 100644
index 229d4014ba..0000000000
--- a/plugins/UserCountry/images/flags/sx.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sy.png b/plugins/UserCountry/images/flags/sy.png
deleted file mode 100644
index 83de9ef018..0000000000
--- a/plugins/UserCountry/images/flags/sy.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/sz.png b/plugins/UserCountry/images/flags/sz.png
deleted file mode 100644
index 6e40120260..0000000000
--- a/plugins/UserCountry/images/flags/sz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ta.png b/plugins/UserCountry/images/flags/ta.png
deleted file mode 100644
index b0eaef6dc5..0000000000
--- a/plugins/UserCountry/images/flags/ta.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/tc.png b/plugins/UserCountry/images/flags/tc.png
deleted file mode 100644
index 0c96ec08c8..0000000000
--- a/plugins/UserCountry/images/flags/tc.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/td.png b/plugins/UserCountry/images/flags/td.png
deleted file mode 100644
index 6e2da09705..0000000000
--- a/plugins/UserCountry/images/flags/td.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/tf.png b/plugins/UserCountry/images/flags/tf.png
deleted file mode 100644
index 3ed6bc60ad..0000000000
--- a/plugins/UserCountry/images/flags/tf.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/tg.png b/plugins/UserCountry/images/flags/tg.png
deleted file mode 100644
index 2ab18d070a..0000000000
--- a/plugins/UserCountry/images/flags/tg.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/th.png b/plugins/UserCountry/images/flags/th.png
deleted file mode 100644
index c1817ebc94..0000000000
--- a/plugins/UserCountry/images/flags/th.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ti.png b/plugins/UserCountry/images/flags/ti.png
deleted file mode 100644
index 0253120670..0000000000
--- a/plugins/UserCountry/images/flags/ti.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/tj.png b/plugins/UserCountry/images/flags/tj.png
deleted file mode 100644
index e1ddbb0889..0000000000
--- a/plugins/UserCountry/images/flags/tj.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/tk.png b/plugins/UserCountry/images/flags/tk.png
deleted file mode 100644
index 107ce1494f..0000000000
--- a/plugins/UserCountry/images/flags/tk.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/tl.png b/plugins/UserCountry/images/flags/tl.png
deleted file mode 100644
index 0fa1b59794..0000000000
--- a/plugins/UserCountry/images/flags/tl.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/tm.png b/plugins/UserCountry/images/flags/tm.png
deleted file mode 100644
index cb1b24dd1e..0000000000
--- a/plugins/UserCountry/images/flags/tm.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/tn.png b/plugins/UserCountry/images/flags/tn.png
deleted file mode 100644
index 33d830d502..0000000000
--- a/plugins/UserCountry/images/flags/tn.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/to.png b/plugins/UserCountry/images/flags/to.png
deleted file mode 100644
index 8b0aa02145..0000000000
--- a/plugins/UserCountry/images/flags/to.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/tp.png b/plugins/UserCountry/images/flags/tp.png
deleted file mode 100644
index 0fa1b59794..0000000000
--- a/plugins/UserCountry/images/flags/tp.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/tr.png b/plugins/UserCountry/images/flags/tr.png
deleted file mode 100644
index 3698f405fa..0000000000
--- a/plugins/UserCountry/images/flags/tr.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/tt.png b/plugins/UserCountry/images/flags/tt.png
deleted file mode 100644
index 4f36edb09f..0000000000
--- a/plugins/UserCountry/images/flags/tt.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/tv.png b/plugins/UserCountry/images/flags/tv.png
deleted file mode 100644
index e1fcffcade..0000000000
--- a/plugins/UserCountry/images/flags/tv.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/tw.png b/plugins/UserCountry/images/flags/tw.png
deleted file mode 100644
index 39ac6e00cd..0000000000
--- a/plugins/UserCountry/images/flags/tw.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/tz.png b/plugins/UserCountry/images/flags/tz.png
deleted file mode 100644
index e31644b158..0000000000
--- a/plugins/UserCountry/images/flags/tz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ua.png b/plugins/UserCountry/images/flags/ua.png
deleted file mode 100644
index ddda0b21ab..0000000000
--- a/plugins/UserCountry/images/flags/ua.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ug.png b/plugins/UserCountry/images/flags/ug.png
deleted file mode 100644
index 7a77615592..0000000000
--- a/plugins/UserCountry/images/flags/ug.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/uk.png b/plugins/UserCountry/images/flags/uk.png
deleted file mode 100644
index 405e897c52..0000000000
--- a/plugins/UserCountry/images/flags/uk.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/um.png b/plugins/UserCountry/images/flags/um.png
deleted file mode 100644
index 9ff9ecf851..0000000000
--- a/plugins/UserCountry/images/flags/um.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/us.png b/plugins/UserCountry/images/flags/us.png
deleted file mode 100644
index a60ef55968..0000000000
--- a/plugins/UserCountry/images/flags/us.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/uy.png b/plugins/UserCountry/images/flags/uy.png
deleted file mode 100644
index 7aff0bc68f..0000000000
--- a/plugins/UserCountry/images/flags/uy.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/uz.png b/plugins/UserCountry/images/flags/uz.png
deleted file mode 100644
index c3ba2ddcf2..0000000000
--- a/plugins/UserCountry/images/flags/uz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/va.png b/plugins/UserCountry/images/flags/va.png
deleted file mode 100644
index c9be43d266..0000000000
--- a/plugins/UserCountry/images/flags/va.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/vc.png b/plugins/UserCountry/images/flags/vc.png
deleted file mode 100644
index a7935eee68..0000000000
--- a/plugins/UserCountry/images/flags/vc.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ve.png b/plugins/UserCountry/images/flags/ve.png
deleted file mode 100644
index 43eb422e11..0000000000
--- a/plugins/UserCountry/images/flags/ve.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/vg.png b/plugins/UserCountry/images/flags/vg.png
deleted file mode 100644
index 63afb343ca..0000000000
--- a/plugins/UserCountry/images/flags/vg.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/vi.png b/plugins/UserCountry/images/flags/vi.png
deleted file mode 100644
index dc0d214ae6..0000000000
--- a/plugins/UserCountry/images/flags/vi.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/vn.png b/plugins/UserCountry/images/flags/vn.png
deleted file mode 100644
index a2cd8a151a..0000000000
--- a/plugins/UserCountry/images/flags/vn.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/vu.png b/plugins/UserCountry/images/flags/vu.png
deleted file mode 100644
index e7972bc01d..0000000000
--- a/plugins/UserCountry/images/flags/vu.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/wf.png b/plugins/UserCountry/images/flags/wf.png
deleted file mode 100644
index d9d33e18b0..0000000000
--- a/plugins/UserCountry/images/flags/wf.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ws.png b/plugins/UserCountry/images/flags/ws.png
deleted file mode 100644
index 8b40fdd224..0000000000
--- a/plugins/UserCountry/images/flags/ws.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/xx.png b/plugins/UserCountry/images/flags/xx.png
deleted file mode 100644
index da6e1bbe89..0000000000
--- a/plugins/UserCountry/images/flags/xx.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/ye.png b/plugins/UserCountry/images/flags/ye.png
deleted file mode 100644
index 6437e6f918..0000000000
--- a/plugins/UserCountry/images/flags/ye.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/yt.png b/plugins/UserCountry/images/flags/yt.png
deleted file mode 100644
index ca9bacbbf7..0000000000
--- a/plugins/UserCountry/images/flags/yt.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/yu.png b/plugins/UserCountry/images/flags/yu.png
deleted file mode 100644
index 0e0fb6deba..0000000000
--- a/plugins/UserCountry/images/flags/yu.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/za.png b/plugins/UserCountry/images/flags/za.png
deleted file mode 100644
index 5200bf9761..0000000000
--- a/plugins/UserCountry/images/flags/za.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/zm.png b/plugins/UserCountry/images/flags/zm.png
deleted file mode 100644
index 5145ab5547..0000000000
--- a/plugins/UserCountry/images/flags/zm.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/zr.png b/plugins/UserCountry/images/flags/zr.png
deleted file mode 100644
index 0811ccce06..0000000000
--- a/plugins/UserCountry/images/flags/zr.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/images/flags/zw.png b/plugins/UserCountry/images/flags/zw.png
deleted file mode 100644
index 3d2d4b6591..0000000000
--- a/plugins/UserCountry/images/flags/zw.png
+++ /dev/null
Binary files differ
diff --git a/plugins/UserCountry/stylesheets/userCountry.less b/plugins/UserCountry/stylesheets/userCountry.less
index fc080b25c3..c035ece395 100755
--- a/plugins/UserCountry/stylesheets/userCountry.less
+++ b/plugins/UserCountry/stylesheets/userCountry.less
@@ -1,3 +1,10 @@
+#widgetUserCountrygetRegion, #widgetUserCountrygetCountry, #widgetUserCountrygetCity {
+ .dataTable .label img {
+ border: 1px solid lightgray;
+ box-sizing: content-box;
+ margin-top: -1px;
+ }
+}
input.location-provider {
cursor: pointer;
diff --git a/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCity_month.xml b/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCity_month.xml
index af2eb4e1ed..ae227475bd 100644
--- a/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCity_month.xml
+++ b/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCity_month.xml
@@ -28,7 +28,7 @@
<country>xx</country>
<country_name>Unknown</country_name>
<region_name>Unknown</region_name>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
<row>
<label>Vancouver, British Columbia, Canada</label>
@@ -60,7 +60,7 @@
<country>ca</country>
<country_name>Canada</country_name>
<region_name>British Columbia</region_name>
- <logo>plugins/UserCountry/images/flags/ca.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ca.png</logo>
</row>
<row>
<label>Besançon, Franche-Comte, France</label>
@@ -92,7 +92,7 @@
<country>fr</country>
<country_name>France</country_name>
<region_name>Franche-Comte</region_name>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
</row>
<row>
<label>Lhasa, Unknown, Tibet</label>
@@ -124,7 +124,7 @@
<country>ti</country>
<country_name>Tibet</country_name>
<region_name>Unknown</region_name>
- <logo>plugins/UserCountry/images/flags/ti.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ti.png</logo>
</row>
<row>
<label>Rome, Lazio, Italy</label>
@@ -156,6 +156,6 @@
<country>it</country>
<country_name>Italy</country_name>
<region_name>Lazio</region_name>
- <logo>plugins/UserCountry/images/flags/it.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/it.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCountry_month.xml b/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCountry_month.xml
index 66bfe2fbc3..1c8ba290ed 100644
--- a/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCountry_month.xml
+++ b/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCountry_month.xml
@@ -23,10 +23,9 @@
<sum_daily_nb_uniq_visitors>9</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>cn</code>
- <logo>plugins/UserCountry/images/flags/cn.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/cn.png</logo>
<segment>countryCode==cn</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Canada</label>
@@ -51,10 +50,9 @@
<sum_daily_nb_uniq_visitors>3</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>ca</code>
- <logo>plugins/UserCountry/images/flags/ca.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ca.png</logo>
<segment>countryCode==ca</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>France</label>
@@ -79,10 +77,9 @@
<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>1</sum_daily_nb_users>
<code>fr</code>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
<segment>countryCode==fr</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Indonesia</label>
@@ -107,10 +104,9 @@
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>id</code>
- <logo>plugins/UserCountry/images/flags/id.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/id.png</logo>
<segment>countryCode==id</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Italy</label>
@@ -135,10 +131,9 @@
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>it</code>
- <logo>plugins/UserCountry/images/flags/it.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/it.png</logo>
<segment>countryCode==it</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Tibet</label>
@@ -163,10 +158,9 @@
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>ti</code>
- <logo>plugins/UserCountry/images/flags/ti.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ti.png</logo>
<segment>countryCode==ti</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>United States</label>
@@ -191,9 +185,8 @@
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>us</code>
- <logo>plugins/UserCountry/images/flags/us.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/us.png</logo>
<segment>countryCode==us</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</result> \ No newline at end of file
diff --git a/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getRegion_month.xml b/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getRegion_month.xml
index 26b27b21a9..49fc389c31 100644
--- a/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getRegion_month.xml
+++ b/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getRegion_month.xml
@@ -26,7 +26,7 @@
<country>xx</country>
<country_name>Unknown</country_name>
<region_name>Unknown</region_name>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
<row>
<label>British Columbia, Canada</label>
@@ -55,7 +55,7 @@
<country>ca</country>
<country_name>Canada</country_name>
<region_name>British Columbia</region_name>
- <logo>plugins/UserCountry/images/flags/ca.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ca.png</logo>
</row>
<row>
<label>Franche-Comte, France</label>
@@ -84,7 +84,7 @@
<country>fr</country>
<country_name>France</country_name>
<region_name>Franche-Comte</region_name>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
</row>
<row>
<label>Lazio, Italy</label>
@@ -113,7 +113,7 @@
<country>it</country>
<country_name>Italy</country_name>
<region_name>Lazio</region_name>
- <logo>plugins/UserCountry/images/flags/it.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/it.png</logo>
</row>
<row>
<label>Unknown, Tibet</label>
@@ -142,6 +142,6 @@
<country>ti</country>
<country_name>Tibet</country_name>
<region_name>Unknown</region_name>
- <logo>plugins/UserCountry/images/flags/ti.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ti.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/plugins/UserCountry/tests/Unit/UserCountryTest.php b/plugins/UserCountry/tests/Unit/UserCountryTest.php
index c2db05db2d..7dfc80521b 100644
--- a/plugins/UserCountry/tests/Unit/UserCountryTest.php
+++ b/plugins/UserCountry/tests/Unit/UserCountryTest.php
@@ -51,7 +51,7 @@ class UserCountryTest extends \PHPUnit_Framework_TestCase
$countries = $dataProvider->getCountryList(true);
// Get list of existing flag icons
- $flags = scandir(PIWIK_PATH_TEST_TO_ROOT . '/plugins/UserCountry/images/flags/');
+ $flags = scandir(PIWIK_PATH_TEST_TO_ROOT . '/plugins/Morpheus/icons/dist/flags/');
// Get list of countries
foreach ($countries as $country => $continent) {
diff --git a/plugins/UserCountryMap/javascripts/realtime-map.js b/plugins/UserCountryMap/javascripts/realtime-map.js
index 105f12eae0..8e1240228c 100644
--- a/plugins/UserCountryMap/javascripts/realtime-map.js
+++ b/plugins/UserCountryMap/javascripts/realtime-map.js
@@ -215,10 +215,10 @@
function visitTooltip(r) {
var ds = new Date().getTime() / 1000 - r.lastActionTimestamp,
ad = r.actionDetails,
- ico = function (src, square) { return '<img' + (square ? ' width="16px" height="16px"' : '') + ' src="' + src + '" alt="" class="icon" />&nbsp;'; };
+ ico = function (src) { return '<img height="16px" src="' + src + '" alt="" class="icon" />&nbsp;'; };
return '<h3>' + (r.city ? r.city + ' / ' : '') + r.country + '</h3>' +
// icons
- ico(r.countryFlag) + ico(r.browserIcon, true) + ico(r.operatingSystemIcon, true) + '<br/>' +
+ ico(r.countryFlag) + ico(r.browserIcon) + ico(r.operatingSystemIcon) + '<br/>' +
// User ID
(r.userId ? _pk_translate('General_UserId') + ':&nbsp;' + r.userId + '<br/>' : '') +
// last action
diff --git a/plugins/UserId/Reports/GetUsers.php b/plugins/UserId/Reports/GetUsers.php
index 776c29e02f..7fba70f472 100644
--- a/plugins/UserId/Reports/GetUsers.php
+++ b/plugins/UserId/Reports/GetUsers.php
@@ -25,11 +25,12 @@ class GetUsers extends Base
{
parent::init();
- $this->name = Piwik::translate('UserId_UserReportTitle');
- $this->subcategoryId = 'UserId_UserReportTitle';
- $this->documentation = '';
- $this->dimension = new UserId();
- $this->metrics = array('label', 'nb_visits', 'nb_actions', 'nb_visits_converted');
+ $this->name = Piwik::translate('UserId_UserReportTitle');
+ $this->subcategoryId = 'UserId_UserReportTitle';
+ $this->documentation = '';
+ $this->dimension = new UserId();
+ $this->metrics = array('label', 'nb_visits', 'nb_actions', 'nb_visits_converted');
+ $this->supportsFlatten = false;
// This defines in which order your report appears in the mobile app, in the menu and in the list of widgets
$this->order = 9;
@@ -60,7 +61,6 @@ class GetUsers extends Base
$view->config->show_related_reports = false;
$view->config->show_insights = false;
$view->config->show_pivot_by_subtable = false;
- $view->config->show_flatten_table = false;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_row_evolution = false;
diff --git a/tests/PHPUnit/Integration/ArchiveTest.php b/tests/PHPUnit/Integration/ArchiveTest.php
index 906cfe40c9..df8ef4021c 100644
--- a/tests/PHPUnit/Integration/ArchiveTest.php
+++ b/tests/PHPUnit/Integration/ArchiveTest.php
@@ -7,16 +7,21 @@
*/
namespace Piwik\Tests\Integration;
+use Piwik\API\Proxy;
use Piwik\Archive as PiwikArchive;
+use Piwik\ArchiveProcessor;
use Piwik\ArchiveProcessor\Parameters;
use Piwik\ArchiveProcessor\Rules;
use Piwik\Common;
use Piwik\Config;
+use Piwik\DataAccess\ArchiveSelector;
use Piwik\DataAccess\ArchiveTableCreator;
use Piwik\DataAccess\ArchiveWriter;
+use Piwik\DataAccess\LogAggregator;
use Piwik\Date;
use Piwik\Db;
use Piwik\Piwik;
+use Piwik\Plugins\UserLanguage;
use Piwik\Segment;
use Piwik\Site;
use Piwik\Tests\Fixtures\OneVisitorTwoVisits;
@@ -229,6 +234,65 @@ class ArchiveTest extends IntegrationTestCase
);
}
+ public function testExistingArchivesAreReplaced()
+ {
+ $date = self::$fixture->dateTime;
+ $period = PeriodFactory::makePeriodFromQueryParams('UTC', 'day', $date);
+
+ // request an report to trigger archiving
+ $userLanguageReport = Proxy::getInstance()->call('\\Piwik\\Plugins\\UserLanguage\\API', 'getLanguage', array(
+ 'idSite' => 1,
+ 'period' => 'day',
+ 'date' => $date
+ ));
+
+ $this->assertEquals(1, $userLanguageReport->getRowsCount());
+ $this->assertEquals('UserLanguage_LanguageCode fr', $userLanguageReport->getFirstRow()->getColumn('label'));
+ $this->assertEquals('UserLanguage_LanguageCode fr', $userLanguageReport->getLastRow()->getColumn('label'));
+
+ $parameters = new Parameters(new Site(1), $period, new Segment('', ''));
+ $parameters->setRequestedPlugin('UserLanguage');
+
+ $result = ArchiveSelector::getArchiveIdAndVisits($parameters, $period->getDateStart()->getDateStartUTC());
+ $idArchive = $result ? array_shift($result) : null;
+
+ if (empty($idArchive)) {
+ $this->fail('Archive should be available');
+ }
+
+ // track a new visits now
+ $fixture = self::$fixture;
+ $t = $fixture::getTracker(1, $date, $defaultInit = true);
+ $t->setForceVisitDateTime(Date::factory($date)->addHour(1)->getDatetime());
+ $t->setUrl('http://example.org/index.htm');
+ $t->setBrowserLanguage('pt-br');
+ $fixture::checkResponse($t->doTrackPageView('my site'));
+
+ $archiveWriter = new ArchiveWriter($parameters, !!$idArchive);
+ $archiveWriter->idArchive = $idArchive;
+
+ $archiveProcessor = new ArchiveProcessor($parameters, $archiveWriter,
+ new LogAggregator($parameters));
+
+ $archiveProcessor->setNumberOfVisits(1, 1);
+
+ // directly trigger specific archiver for existing archive
+ $archiver = new UserLanguage\Archiver($archiveProcessor);
+ $archiver->aggregateDayReport();
+
+ // report should be updated
+ $userLanguageReport = Proxy::getInstance()->call('\\Piwik\\Plugins\\UserLanguage\\API', 'getLanguage', array(
+ 'idSite' => 1,
+ 'period' => 'day',
+ 'date' => $date
+ ));
+
+ $this->assertEquals(2, $userLanguageReport->getRowsCount());
+ $this->assertEquals('UserLanguage_LanguageCode fr', $userLanguageReport->getFirstRow()->getColumn('label'));
+ $this->assertEquals('UserLanguage_LanguageCode pt', $userLanguageReport->getLastRow()->getColumn('label'));
+ }
+
+
private function createManyDifferentArchiveBlobs()
{
$recordName1 = 'Actions_Actions';
diff --git a/tests/PHPUnit/System/BackwardsCompatibility1XTest.php b/tests/PHPUnit/System/BackwardsCompatibility1XTest.php
index 443112a97f..73bdb32cdc 100644
--- a/tests/PHPUnit/System/BackwardsCompatibility1XTest.php
+++ b/tests/PHPUnit/System/BackwardsCompatibility1XTest.php
@@ -119,6 +119,9 @@ class BackwardsCompatibility1XTest extends SystemTestCase
'Actions.getPageUrls',
'Actions.getDownloads',
'Actions.getDownload',
+
+ // new flag dimensions
+ 'UserCountry.getCountry',
);
$apiNotToCall = array(
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_day.xml
index 1767b3b86f..1b1925d1ec 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_day.xml
@@ -89,7 +89,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -107,10 +107,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -203,7 +203,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -221,10 +221,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -317,7 +317,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>Virginia</region>
<regionCode>VA</regionCode>
<city>Ashburn</city>
@@ -335,10 +335,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -431,7 +431,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>Virginia</region>
<regionCode>VA</regionCode>
<city>Ashburn</city>
@@ -449,10 +449,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -545,7 +545,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>Virginia</region>
<regionCode>VA</regionCode>
<city>Ashburn</city>
@@ -563,10 +563,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -659,7 +659,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -677,10 +677,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -773,7 +773,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -791,10 +791,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -887,7 +887,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -905,10 +905,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1001,7 +1001,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1019,10 +1019,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml
index 9d70523384..20a0ff9335 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml
@@ -280,7 +280,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -298,10 +298,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -402,7 +402,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -433,10 +433,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -529,7 +529,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -551,10 +551,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -647,7 +647,7 @@
<continentCode>asi</continentCode>
<country>South Korea</country>
<countryCode>kr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/kr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/kr.png</countryFlag>
<region>Seoul-t'ukpyolsi</region>
<regionCode>11</regionCode>
<city>Seoul</city>
@@ -669,10 +669,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -784,7 +784,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -806,10 +806,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -929,7 +929,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -951,10 +951,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1047,7 +1047,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>Virginia</region>
<regionCode>VA</regionCode>
<city>Ashburn</city>
@@ -1069,10 +1069,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1165,7 +1165,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>Virginia</region>
<regionCode>VA</regionCode>
<city>Ashburn</city>
@@ -1187,10 +1187,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1272,7 +1272,7 @@
<continentCode>oce</continentCode>
<country>Australia</country>
<countryCode>au</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/au.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/au.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1294,10 +1294,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1390,7 +1390,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1412,10 +1412,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest__Live.getLastVisitsDetails_range.xml
index 2569b8da4d..acfde7e3fc 100644
--- a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest__Live.getLastVisitsDetails_range.xml
+++ b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest__Live.getLastVisitsDetails_range.xml
@@ -83,7 +83,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>California</region>
<regionCode>CA</regionCode>
<city>not a city</city>
@@ -268,7 +268,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -399,7 +399,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -573,7 +573,7 @@
<continentCode>eur</continentCode>
<country>Macedonia</country>
<countryCode>mk</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/mk.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/mk.png</countryFlag>
<region>Miravci</region>
<regionCode>66</regionCode>
<city>Stratford-upon-Avon</city>
@@ -704,7 +704,7 @@
<continentCode>eur</continentCode>
<country>Macedonia</country>
<countryCode>mk</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/mk.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/mk.png</countryFlag>
<region>Miravci</region>
<regionCode>66</regionCode>
<city>Stratford-upon-Avon</city>
@@ -897,7 +897,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Saint Petersburg City</region>
<regionCode>66</regionCode>
<city>Hluboká nad Vltavou</city>
@@ -1028,7 +1028,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Saint Petersburg City</region>
<regionCode>66</regionCode>
<city>Hluboká nad Vltavou</city>
@@ -1202,7 +1202,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Saint Petersburg City</region>
<regionCode>66</regionCode>
<city>Stratford-upon-Avon</city>
@@ -1333,7 +1333,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Saint Petersburg City</region>
<regionCode>66</regionCode>
<city>Stratford-upon-Avon</city>
@@ -1526,7 +1526,7 @@
<continentCode>eur</continentCode>
<country>United Kingdom</country>
<countryCode>gb</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/gb.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/gb.png</countryFlag>
<region>Kent</region>
<regionCode>G5</regionCode>
<city>Stratford-upon-Avon</city>
@@ -1657,7 +1657,7 @@
<continentCode>eur</continentCode>
<country>United Kingdom</country>
<countryCode>gb</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/gb.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/gb.png</countryFlag>
<region>Kent</region>
<regionCode>G5</regionCode>
<city>Stratford-upon-Avon</city>
@@ -1831,7 +1831,7 @@
<continentCode>eur</continentCode>
<country>United Kingdom</country>
<countryCode>gb</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/gb.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/gb.png</countryFlag>
<region>London, City of</region>
<regionCode>H9</regionCode>
<city>London</city>
@@ -2005,7 +2005,7 @@
<continentCode>asi</continentCode>
<country>Tibet</country>
<countryCode>ti</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ti.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ti.png</countryFlag>
<region>Unknown</region>
<regionCode>1</regionCode>
<city>Lhasa</city>
@@ -2128,7 +2128,7 @@
<continentCode>eur</continentCode>
<country>United Kingdom</country>
<countryCode>gb</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/gb.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/gb.png</countryFlag>
<region>London, City of</region>
<regionCode>H9</regionCode>
<city>London</city>
@@ -2259,7 +2259,7 @@
<continentCode>asi</continentCode>
<country>Tibet</country>
<countryCode>ti</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ti.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ti.png</countryFlag>
<region>Unknown</region>
<regionCode>1</regionCode>
<city>Lhasa</city>
@@ -2452,7 +2452,7 @@
<continentCode>eur</continentCode>
<country>United Kingdom</country>
<countryCode>gb</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/gb.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/gb.png</countryFlag>
<region>Warwickshire</region>
<regionCode>P3</regionCode>
<city>Stratford-upon-Avon</city>
@@ -2645,7 +2645,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region />
<regionCode />
<city />
@@ -2768,7 +2768,7 @@
<continentCode>eur</continentCode>
<country>United Kingdom</country>
<countryCode>gb</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/gb.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/gb.png</countryFlag>
<region>Warwickshire</region>
<regionCode>P3</regionCode>
<city>Stratford-upon-Avon</city>
@@ -2899,7 +2899,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region />
<regionCode />
<city />
@@ -3073,7 +3073,7 @@
<continentCode>eur</continentCode>
<country>United Kingdom</country>
<countryCode>gb</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/gb.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/gb.png</countryFlag>
<region>Warwickshire</region>
<regionCode>P3</regionCode>
<city>Nuneaton and Bedworth</city>
@@ -3247,7 +3247,7 @@
<continentCode>amn</continentCode>
<country>Canada</country>
<countryCode>ca</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ca.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ca.png</countryFlag>
<region>British Columbia</region>
<regionCode>BC</regionCode>
<city>Vancouver</city>
@@ -3421,7 +3421,7 @@
<continentCode>amn</continentCode>
<country>Canada</country>
<countryCode>ca</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ca.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ca.png</countryFlag>
<region>British Columbia</region>
<regionCode>BC</regionCode>
<city>Vancouver</city>
@@ -3587,7 +3587,7 @@
<continentCode>asi</continentCode>
<country>Indonesia</country>
<countryCode>id</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/id.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/id.png</countryFlag>
<region />
<regionCode />
<city />
@@ -3718,7 +3718,7 @@
<continentCode>eur</continentCode>
<country>United Kingdom</country>
<countryCode>gb</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/gb.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/gb.png</countryFlag>
<region>Warwickshire</region>
<regionCode>P3</regionCode>
<city>Nuneaton and Bedworth</city>
@@ -3849,7 +3849,7 @@
<continentCode>amn</continentCode>
<country>Canada</country>
<countryCode>ca</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ca.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ca.png</countryFlag>
<region>British Columbia</region>
<regionCode>BC</regionCode>
<city>Vancouver</city>
@@ -3980,7 +3980,7 @@
<continentCode>amn</continentCode>
<country>Canada</country>
<countryCode>ca</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ca.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ca.png</countryFlag>
<region>British Columbia</region>
<regionCode>BC</regionCode>
<city>Vancouver</city>
@@ -4111,7 +4111,7 @@
<continentCode>asi</continentCode>
<country>Indonesia</country>
<countryCode>id</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/id.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/id.png</countryFlag>
<region />
<regionCode />
<city />
@@ -4304,7 +4304,7 @@
<continentCode>eur</continentCode>
<country>United Kingdom</country>
<countryCode>gb</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/gb.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/gb.png</countryFlag>
<region>Warwickshire</region>
<regionCode>P3</regionCode>
<city>Stratford-upon-Avon</city>
@@ -4497,7 +4497,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region>Franche-Comte</region>
<regionCode>A6</regionCode>
<city>Besançon</city>
@@ -4690,7 +4690,7 @@
<continentCode>amn</continentCode>
<country>Canada</country>
<countryCode>ca</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ca.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ca.png</countryFlag>
<region>British Columbia</region>
<regionCode>BC</regionCode>
<city>Vancouver</city>
@@ -4875,7 +4875,7 @@
<continentCode>eur</continentCode>
<country>Italy</country>
<countryCode>it</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/it.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/it.png</countryFlag>
<region />
<regionCode />
<city />
@@ -5006,7 +5006,7 @@
<continentCode>eur</continentCode>
<country>United Kingdom</country>
<countryCode>gb</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/gb.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/gb.png</countryFlag>
<region>Warwickshire</region>
<regionCode>P3</regionCode>
<city>Stratford-upon-Avon</city>
@@ -5137,7 +5137,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region>Franche-Comte</region>
<regionCode>A6</regionCode>
<city>Besançon</city>
@@ -5268,7 +5268,7 @@
<continentCode>amn</continentCode>
<country>Canada</country>
<countryCode>ca</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ca.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ca.png</countryFlag>
<region>British Columbia</region>
<regionCode>BC</regionCode>
<city>Vancouver</city>
@@ -5399,7 +5399,7 @@
<continentCode>eur</continentCode>
<country>Italy</country>
<countryCode>it</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/it.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/it.png</countryFlag>
<region />
<regionCode />
<city />
diff --git a/tests/PHPUnit/System/expected/test_BackwardsCompatibility1XTest__UserCountry.getCountry_day.xml b/tests/PHPUnit/System/expected/test_BackwardsCompatibility1XTest__UserCountry.getCountry_day.xml
new file mode 100644
index 0000000000..9a80fd221e
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_BackwardsCompatibility1XTest__UserCountry.getCountry_day.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+ <row>
+ <label>France</label>
+ <nb_uniq_visitors>1</nb_uniq_visitors>
+ <nb_visits>2</nb_visits>
+ <nb_actions>8</nb_actions>
+ <max_actions>7</max_actions>
+ <sum_visit_length>1621</sum_visit_length>
+ <bounce_count>1</bounce_count>
+ <goals>
+ <row idgoal='1'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>42</revenue>
+ </row>
+ <row idgoal='2'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>1</revenue>
+ </row>
+ </goals>
+ <nb_conversions>2</nb_conversions>
+ <revenue>43</revenue>
+ <code>fr</code>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
+ <segment>countryCode==fr</segment>
+ <logoHeight>16</logoHeight>
+ </row>
+</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml
index f1426e40f6..f6e2c74e73 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml
@@ -73,7 +73,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -106,10 +106,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -186,7 +186,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -219,10 +219,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -377,7 +377,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -410,10 +410,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -490,7 +490,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -523,10 +523,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -894,7 +894,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -927,10 +927,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1007,7 +1007,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1036,10 +1036,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1116,7 +1116,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1145,10 +1145,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1303,7 +1303,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1332,10 +1332,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1412,7 +1412,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1441,10 +1441,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1761,7 +1761,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1790,10 +1790,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml
index 3327e3002e..6256dca24b 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml
@@ -73,7 +73,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -102,10 +102,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -182,7 +182,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -211,10 +211,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -369,7 +369,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -398,10 +398,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -478,7 +478,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -507,10 +507,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -827,7 +827,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -856,10 +856,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -936,7 +936,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -969,10 +969,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1049,7 +1049,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1082,10 +1082,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1240,7 +1240,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1273,10 +1273,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1353,7 +1353,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1386,10 +1386,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1757,7 +1757,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1790,10 +1790,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml
index a41bee8bd7..4b2ba500d1 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml
@@ -91,7 +91,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>North Carolina</region>
<regionCode>NC</regionCode>
<city>Raleigh</city>
@@ -128,10 +128,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -243,7 +243,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>California</region>
<regionCode>CA</regionCode>
<city>Lake Forest</city>
@@ -267,10 +267,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -365,7 +365,7 @@
<continentCode>eur</continentCode>
<country>Germany</country>
<countryCode>de</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/de.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/de.png</countryFlag>
<region />
<regionCode />
<city />
@@ -414,10 +414,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -529,7 +529,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region />
<regionCode />
<city />
@@ -570,10 +570,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -655,7 +655,7 @@
<continentCode>eur</continentCode>
<country>Belgium</country>
<countryCode>be</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/be.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/be.png</countryFlag>
<region>Limburg</region>
<regionCode>05</regionCode>
<city>Maaseik</city>
@@ -696,10 +696,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -794,7 +794,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>California</region>
<regionCode>CA</regionCode>
<city>San Francisco</city>
@@ -843,10 +843,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -939,7 +939,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region>Kanagawa</region>
<regionCode>19</regionCode>
<city>Nihon'odori</city>
@@ -976,10 +976,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1074,7 +1074,7 @@
<continentCode>eur</continentCode>
<country>Germany</country>
<countryCode>de</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/de.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/de.png</countryFlag>
<region>Nordrhein-Westfalen</region>
<regionCode>07</regionCode>
<city>Weilerswist</city>
@@ -1103,10 +1103,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1201,7 +1201,7 @@
<continentCode>eur</continentCode>
<country>Germany</country>
<countryCode>de</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/de.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/de.png</countryFlag>
<region>Rheinland-Pfalz</region>
<regionCode>08</regionCode>
<city>Mainz</city>
@@ -1250,10 +1250,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1388,7 +1388,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Moscow City</region>
<regionCode>48</regionCode>
<city>Moscow</city>
@@ -1421,10 +1421,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1519,7 +1519,7 @@
<continentCode>eur</continentCode>
<country>Turkey</country>
<countryCode>tr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/tr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/tr.png</countryFlag>
<region>Rize</region>
<regionCode>53</regionCode>
<city>Esentepe</city>
@@ -1560,10 +1560,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1658,7 +1658,7 @@
<continentCode>eur</continentCode>
<country>Belgium</country>
<countryCode>be</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/be.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/be.png</countryFlag>
<region>Limburg</region>
<regionCode>05</regionCode>
<city>Maaseik</city>
@@ -1699,10 +1699,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1986,7 +1986,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -2006,10 +2006,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -2104,7 +2104,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -2124,10 +2124,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -2239,7 +2239,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -2259,10 +2259,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -2365,7 +2365,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region />
<regionCode />
<city />
@@ -2389,10 +2389,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -2535,7 +2535,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region />
<regionCode />
<city />
@@ -2559,10 +2559,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -2657,7 +2657,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region />
<regionCode />
<city />
@@ -2677,10 +2677,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -2804,7 +2804,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region />
<regionCode />
<city />
@@ -2824,10 +2824,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -2928,7 +2928,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region />
<regionCode />
<city />
@@ -2952,10 +2952,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -3056,7 +3056,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -3089,10 +3089,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -3185,7 +3185,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -3234,10 +3234,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -3332,7 +3332,7 @@
<continentCode>amn</continentCode>
<country>Canada</country>
<countryCode>ca</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ca.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ca.png</countryFlag>
<region>Nunavut</region>
<regionCode>NU</regionCode>
<city>Igloolik</city>
@@ -3352,10 +3352,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -3450,7 +3450,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>New Jersey</region>
<regionCode>NJ</regionCode>
<city>Mount Laurel</city>
@@ -3470,10 +3470,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -3557,7 +3557,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -3577,10 +3577,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -3663,7 +3663,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -3683,10 +3683,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -3779,7 +3779,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -3803,10 +3803,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -3899,7 +3899,7 @@
<continentCode>asi</continentCode>
<country>South Korea</country>
<countryCode>kr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/kr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/kr.png</countryFlag>
<region>Seoul-t'ukpyolsi</region>
<regionCode>11</regionCode>
<city>Seoul</city>
@@ -3923,10 +3923,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -4038,7 +4038,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -4062,10 +4062,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -4185,7 +4185,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -4209,10 +4209,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -4305,7 +4305,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>Virginia</region>
<regionCode>VA</regionCode>
<city>Ashburn</city>
@@ -4329,10 +4329,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -4425,7 +4425,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>Virginia</region>
<regionCode>VA</regionCode>
<city>Ashburn</city>
@@ -4449,10 +4449,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -4534,7 +4534,7 @@
<continentCode>oce</continentCode>
<country>Australia</country>
<countryCode>au</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/au.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/au.png</countryFlag>
<region />
<regionCode />
<city />
@@ -4558,10 +4558,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -4654,7 +4654,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -4678,10 +4678,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -4774,7 +4774,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -4798,10 +4798,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -4894,7 +4894,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -4914,10 +4914,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -5010,7 +5010,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -5030,10 +5030,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -5126,7 +5126,7 @@
<continentCode>ams</continentCode>
<country>Brazil</country>
<countryCode>br</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/br.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/br.png</countryFlag>
<region />
<regionCode />
<city />
@@ -5146,10 +5146,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -5242,7 +5242,7 @@
<continentCode>ams</continentCode>
<country>Brazil</country>
<countryCode>br</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/br.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/br.png</countryFlag>
<region />
<regionCode />
<city />
@@ -5262,10 +5262,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -5358,7 +5358,7 @@
<continentCode>ams</continentCode>
<country>Brazil</country>
<countryCode>br</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/br.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/br.png</countryFlag>
<region />
<regionCode />
<city />
@@ -5378,10 +5378,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -5474,7 +5474,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -5494,10 +5494,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -5590,7 +5590,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -5610,10 +5610,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -5706,7 +5706,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -5726,10 +5726,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -5822,7 +5822,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -5842,10 +5842,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -5938,7 +5938,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -5958,10 +5958,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -6054,7 +6054,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>Virginia</region>
<regionCode>VA</regionCode>
<city>Ashburn</city>
@@ -6074,10 +6074,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -6170,7 +6170,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>Virginia</region>
<regionCode>VA</regionCode>
<city>Ashburn</city>
@@ -6190,10 +6190,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -6286,7 +6286,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>Virginia</region>
<regionCode>VA</regionCode>
<city>Ashburn</city>
@@ -6306,10 +6306,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -6402,7 +6402,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -6422,10 +6422,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -6518,7 +6518,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -6538,10 +6538,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -6634,7 +6634,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -6654,10 +6654,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -6750,7 +6750,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region />
<regionCode />
<city />
@@ -6770,10 +6770,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__UserCountry.getCity_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__UserCountry.getCity_month.xml
index 4f7962f12b..e7b230a210 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__UserCountry.getCity_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__UserCountry.getCity_month.xml
@@ -25,7 +25,7 @@
<country>xx</country>
<country_name>Unknown</country_name>
<region_name>Unknown</region_name>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
<row>
<label>Ashburn, Virginia, United States</label>
@@ -53,7 +53,7 @@
<country>us</country>
<country_name>United States</country_name>
<region_name>Virginia</region_name>
- <logo>plugins/UserCountry/images/flags/us.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/us.png</logo>
</row>
<row>
<label>Igloolik, Nunavut, Canada</label>
@@ -81,7 +81,7 @@
<country>ca</country>
<country_name>Canada</country_name>
<region_name>Nunavut</region_name>
- <logo>plugins/UserCountry/images/flags/ca.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ca.png</logo>
</row>
<row>
<label>Mount Laurel, New Jersey, United States</label>
@@ -109,7 +109,7 @@
<country>us</country>
<country_name>United States</country_name>
<region_name>New Jersey</region_name>
- <logo>plugins/UserCountry/images/flags/us.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/us.png</logo>
</row>
<row>
<label>Seoul, Seoul-t'ukpyolsi, South Korea</label>
@@ -137,6 +137,6 @@
<country>kr</country>
<country_name>South Korea</country_name>
<region_name>Seoul-t'ukpyolsi</region_name>
- <logo>plugins/UserCountry/images/flags/kr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/kr.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__UserCountry.getCountry_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__UserCountry.getCountry_month.xml
index 70da83f4e9..63c3f98c5a 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__UserCountry.getCountry_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__UserCountry.getCountry_month.xml
@@ -19,10 +19,9 @@
<sum_daily_nb_uniq_visitors>11</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>jp</code>
- <logo>plugins/UserCountry/images/flags/jp.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/jp.png</logo>
<segment>countryCode==jp</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>United States</label>
@@ -43,10 +42,9 @@
<sum_daily_nb_uniq_visitors>9</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>2</sum_daily_nb_users>
<code>us</code>
- <logo>plugins/UserCountry/images/flags/us.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/us.png</logo>
<segment>countryCode==us</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Unknown</label>
@@ -68,10 +66,9 @@
<sum_daily_nb_users>1</sum_daily_nb_users>
<nb_visits_converted>0</nb_visits_converted>
<code>xx</code>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
<segment>countryCode==xx</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Brazil</label>
@@ -92,10 +89,9 @@
<sum_daily_nb_uniq_visitors>3</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>br</code>
- <logo>plugins/UserCountry/images/flags/br.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/br.png</logo>
<segment>countryCode==br</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Australia</label>
@@ -108,10 +104,9 @@
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>au</code>
- <logo>plugins/UserCountry/images/flags/au.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/au.png</logo>
<segment>countryCode==au</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Canada</label>
@@ -132,10 +127,9 @@
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>ca</code>
- <logo>plugins/UserCountry/images/flags/ca.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ca.png</logo>
<segment>countryCode==ca</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>South Korea</label>
@@ -156,9 +150,8 @@
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>kr</code>
- <logo>plugins/UserCountry/images/flags/kr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/kr.png</logo>
<segment>countryCode==kr</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__UserCountry.getRegion_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__UserCountry.getRegion_month.xml
index ca4f6b23bf..0b3b63e919 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__UserCountry.getRegion_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__UserCountry.getRegion_month.xml
@@ -23,7 +23,7 @@
<country>xx</country>
<country_name>Unknown</country_name>
<region_name>Unknown</region_name>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
<row>
<label>Virginia, United States</label>
@@ -48,7 +48,7 @@
<country>us</country>
<country_name>United States</country_name>
<region_name>Virginia</region_name>
- <logo>plugins/UserCountry/images/flags/us.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/us.png</logo>
</row>
<row>
<label>New Jersey, United States</label>
@@ -73,7 +73,7 @@
<country>us</country>
<country_name>United States</country_name>
<region_name>New Jersey</region_name>
- <logo>plugins/UserCountry/images/flags/us.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/us.png</logo>
</row>
<row>
<label>Nunavut, Canada</label>
@@ -98,7 +98,7 @@
<country>ca</country>
<country_name>Canada</country_name>
<region_name>Nunavut</region_name>
- <logo>plugins/UserCountry/images/flags/ca.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ca.png</logo>
</row>
<row>
<label>Seoul-t'ukpyolsi, South Korea</label>
@@ -123,6 +123,6 @@
<country>kr</country>
<country_name>South Korea</country_name>
<region_name>Seoul-t'ukpyolsi</region_name>
- <logo>plugins/UserCountry/images/flags/kr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/kr.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml
index 6e91c71915..fcc6864644 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml
@@ -80,7 +80,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>North Carolina</region>
<regionCode>NC</regionCode>
<city>Raleigh</city>
@@ -117,10 +117,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -221,7 +221,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>California</region>
<regionCode>CA</regionCode>
<city>Lake Forest</city>
@@ -245,10 +245,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -332,7 +332,7 @@
<continentCode>eur</continentCode>
<country>Germany</country>
<countryCode>de</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/de.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/de.png</countryFlag>
<region />
<regionCode />
<city />
@@ -381,10 +381,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -485,7 +485,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region />
<regionCode />
<city />
@@ -526,10 +526,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -611,7 +611,7 @@
<continentCode>eur</continentCode>
<country>Belgium</country>
<countryCode>be</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/be.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/be.png</countryFlag>
<region>Limburg</region>
<regionCode>05</regionCode>
<city>Maaseik</city>
@@ -652,10 +652,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -739,7 +739,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>California</region>
<regionCode>CA</regionCode>
<city>San Francisco</city>
@@ -788,10 +788,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -873,7 +873,7 @@
<continentCode>asi</continentCode>
<country>Japan</country>
<countryCode>jp</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/jp.png</countryFlag>
<region>Kanagawa</region>
<regionCode>19</regionCode>
<city>Nihon'odori</city>
@@ -910,10 +910,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -997,7 +997,7 @@
<continentCode>eur</continentCode>
<country>Germany</country>
<countryCode>de</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/de.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/de.png</countryFlag>
<region>Nordrhein-Westfalen</region>
<regionCode>07</regionCode>
<city>Weilerswist</city>
@@ -1026,10 +1026,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1113,7 +1113,7 @@
<continentCode>eur</continentCode>
<country>Germany</country>
<countryCode>de</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/de.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/de.png</countryFlag>
<region>Rheinland-Pfalz</region>
<regionCode>08</regionCode>
<city>Mainz</city>
@@ -1162,10 +1162,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1289,7 +1289,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Moscow City</region>
<regionCode>48</regionCode>
<city>Moscow</city>
@@ -1322,10 +1322,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1409,7 +1409,7 @@
<continentCode>eur</continentCode>
<country>Turkey</country>
<countryCode>tr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/tr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/tr.png</countryFlag>
<region>Rize</region>
<regionCode>53</regionCode>
<city>Esentepe</city>
@@ -1450,10 +1450,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1537,7 +1537,7 @@
<continentCode>eur</continentCode>
<country>Belgium</country>
<countryCode>be</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/be.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/be.png</countryFlag>
<region>Limburg</region>
<regionCode>05</regionCode>
<city>Maaseik</city>
@@ -1578,10 +1578,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1671,7 +1671,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1704,10 +1704,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1789,7 +1789,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1838,10 +1838,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1965,7 +1965,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -1998,10 +1998,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml
index 94f689d62d..da66ef187d 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml
@@ -155,7 +155,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -192,10 +192,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -292,7 +292,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -329,10 +329,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -472,7 +472,7 @@
<continentCode>eur</continentCode>
<country>Macedonia</country>
<countryCode>mk</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/mk.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/mk.png</countryFlag>
<region>Miravci</region>
<regionCode>66</regionCode>
<city>Stratford-upon-Avon</city>
@@ -509,10 +509,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml
index d454b9c3db..2e513ce895 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml
@@ -93,7 +93,7 @@
<continentCode>eur</continentCode>
<country>Macedonia</country>
<countryCode>mk</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/mk.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/mk.png</countryFlag>
<region>Miravci</region>
<regionCode>66</regionCode>
<city>Stratford-upon-Avon</city>
@@ -130,10 +130,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -292,7 +292,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Saint Petersburg City</region>
<regionCode>66</regionCode>
<city>Hluboká nad Vltavou</city>
@@ -329,10 +329,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -429,7 +429,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Saint Petersburg City</region>
<regionCode>66</regionCode>
<city>Hluboká nad Vltavou</city>
@@ -466,10 +466,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortAsc__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortAsc__Live.getLastVisitsDetails_month.xml
index 5a4b100f86..520a06bc6b 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortAsc__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortAsc__Live.getLastVisitsDetails_month.xml
@@ -75,7 +75,7 @@
<continentCode>eur</continentCode>
<country>United Kingdom</country>
<countryCode>gb</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/gb.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/gb.png</countryFlag>
<region>Warwickshire</region>
<regionCode>P3</regionCode>
<city>Stratford-upon-Avon</city>
@@ -196,7 +196,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region>Franche-Comte</region>
<regionCode>A6</regionCode>
<city>Besançon</city>
@@ -317,7 +317,7 @@
<continentCode>amn</continentCode>
<country>Canada</country>
<countryCode>ca</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ca.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ca.png</countryFlag>
<region>British Columbia</region>
<regionCode>BC</regionCode>
<city>Vancouver</city>
@@ -438,7 +438,7 @@
<continentCode>eur</continentCode>
<country>Italy</country>
<countryCode>it</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/it.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/it.png</countryFlag>
<region />
<regionCode />
<city />
@@ -590,7 +590,7 @@
<continentCode>eur</continentCode>
<country>United Kingdom</country>
<countryCode>gb</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/gb.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/gb.png</countryFlag>
<region>Warwickshire</region>
<regionCode>P3</regionCode>
<city>Stratford-upon-Avon</city>
@@ -742,7 +742,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region>Franche-Comte</region>
<regionCode>A6</regionCode>
<city>Besançon</city>
@@ -886,7 +886,7 @@
<continentCode>amn</continentCode>
<country>Canada</country>
<countryCode>ca</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ca.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ca.png</countryFlag>
<region>British Columbia</region>
<regionCode>BC</regionCode>
<city>Vancouver</city>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisitAsc__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisitAsc__Live.getLastVisitsDetails_month.xml
index d7bb4bf39a..50a69b836c 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisitAsc__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisitAsc__Live.getLastVisitsDetails_month.xml
@@ -89,7 +89,7 @@
<continentCode>eur</continentCode>
<country>United Kingdom</country>
<countryCode>gb</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/gb.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/gb.png</countryFlag>
<region>Warwickshire</region>
<regionCode>P3</regionCode>
<city>Stratford-upon-Avon</city>
@@ -251,7 +251,7 @@
<continentCode>eur</continentCode>
<country>United Kingdom</country>
<countryCode>gb</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/gb.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/gb.png</countryFlag>
<region>Warwickshire</region>
<regionCode>P3</regionCode>
<city>Stratford-upon-Avon</city>
@@ -379,7 +379,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region>Franche-Comte</region>
<regionCode>A6</regionCode>
<city>Besançon</city>
@@ -541,7 +541,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region>Franche-Comte</region>
<regionCode>A6</regionCode>
<city>Besançon</city>
@@ -669,7 +669,7 @@
<continentCode>amn</continentCode>
<country>Canada</country>
<countryCode>ca</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ca.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ca.png</countryFlag>
<region>British Columbia</region>
<regionCode>BC</regionCode>
<city>Vancouver</city>
@@ -831,7 +831,7 @@
<continentCode>amn</continentCode>
<country>Canada</country>
<countryCode>ca</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ca.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ca.png</countryFlag>
<region>British Columbia</region>
<regionCode>BC</regionCode>
<city>Vancouver</city>
@@ -951,7 +951,7 @@
<continentCode>eur</continentCode>
<country>Italy</country>
<countryCode>it</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/it.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/it.png</countryFlag>
<region />
<regionCode />
<city />
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml
index 6860c259d7..198d996bfc 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml
@@ -83,7 +83,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>California</region>
<regionCode>CA</regionCode>
<city>not a city</city>
@@ -112,10 +112,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -274,7 +274,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -311,10 +311,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -411,7 +411,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -448,10 +448,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -591,7 +591,7 @@
<continentCode>eur</continentCode>
<country>Macedonia</country>
<countryCode>mk</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/mk.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/mk.png</countryFlag>
<region>Miravci</region>
<regionCode>66</regionCode>
<city>Stratford-upon-Avon</city>
@@ -628,10 +628,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -728,7 +728,7 @@
<continentCode>eur</continentCode>
<country>Macedonia</country>
<countryCode>mk</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/mk.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/mk.png</countryFlag>
<region>Miravci</region>
<regionCode>66</regionCode>
<city>Stratford-upon-Avon</city>
@@ -765,10 +765,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -927,7 +927,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Saint Petersburg City</region>
<regionCode>66</regionCode>
<city>Hluboká nad Vltavou</city>
@@ -964,10 +964,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1064,7 +1064,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Saint Petersburg City</region>
<regionCode>66</regionCode>
<city>Hluboká nad Vltavou</city>
@@ -1101,10 +1101,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByVisitCount__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByVisitCount__Live.getLastVisitsDetails_month.xml
index 6b0807d712..f73ae2256a 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByVisitCount__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByVisitCount__Live.getLastVisitsDetails_month.xml
@@ -123,7 +123,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -253,7 +253,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -417,7 +417,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Saint Petersburg City</region>
<regionCode>66</regionCode>
<city>Hluboká nad Vltavou</city>
@@ -563,7 +563,7 @@
<continentCode>eur</continentCode>
<country>Macedonia</country>
<countryCode>mk</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/mk.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/mk.png</countryFlag>
<region>Miravci</region>
<regionCode>66</regionCode>
<city>Stratford-upon-Avon</city>
@@ -693,7 +693,7 @@
<continentCode>eur</continentCode>
<country>Macedonia</country>
<countryCode>mk</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/mk.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/mk.png</countryFlag>
<region>Miravci</region>
<regionCode>66</regionCode>
<city>Stratford-upon-Avon</city>
@@ -823,7 +823,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Saint Petersburg City</region>
<regionCode>66</regionCode>
<city>Hluboká nad Vltavou</city>
@@ -943,7 +943,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>California</region>
<regionCode>CA</regionCode>
<city>not a city</city>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml
index 6860c259d7..198d996bfc 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml
@@ -83,7 +83,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>California</region>
<regionCode>CA</regionCode>
<city>not a city</city>
@@ -112,10 +112,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -274,7 +274,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -311,10 +311,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -411,7 +411,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -448,10 +448,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -591,7 +591,7 @@
<continentCode>eur</continentCode>
<country>Macedonia</country>
<countryCode>mk</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/mk.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/mk.png</countryFlag>
<region>Miravci</region>
<regionCode>66</regionCode>
<city>Stratford-upon-Avon</city>
@@ -628,10 +628,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -728,7 +728,7 @@
<continentCode>eur</continentCode>
<country>Macedonia</country>
<countryCode>mk</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/mk.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/mk.png</countryFlag>
<region>Miravci</region>
<regionCode>66</regionCode>
<city>Stratford-upon-Avon</city>
@@ -765,10 +765,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -927,7 +927,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Saint Petersburg City</region>
<regionCode>66</regionCode>
<city>Hluboká nad Vltavou</city>
@@ -964,10 +964,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1064,7 +1064,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Saint Petersburg City</region>
<regionCode>66</regionCode>
<city>Hluboká nad Vltavou</city>
@@ -1101,10 +1101,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml
index 29a0f0d4fb..608a2b87f4 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml
@@ -83,7 +83,7 @@
<continentCode>amn</continentCode>
<country>United States</country>
<countryCode>us</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/us.png</countryFlag>
<region>California</region>
<regionCode>CA</regionCode>
<city>not a city</city>
@@ -112,10 +112,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -274,7 +274,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -311,10 +311,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -411,7 +411,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -448,10 +448,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -591,7 +591,7 @@
<continentCode>eur</continentCode>
<country>Macedonia</country>
<countryCode>mk</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/mk.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/mk.png</countryFlag>
<region>Miravci</region>
<regionCode>66</regionCode>
<city>Stratford-upon-Avon</city>
@@ -628,10 +628,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -728,7 +728,7 @@
<continentCode>eur</continentCode>
<country>Macedonia</country>
<countryCode>mk</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/mk.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/mk.png</countryFlag>
<region>Miravci</region>
<regionCode>66</regionCode>
<city>Stratford-upon-Avon</city>
@@ -765,10 +765,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -927,7 +927,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Saint Petersburg City</region>
<regionCode>66</regionCode>
<city>Hluboká nad Vltavou</city>
@@ -964,10 +964,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1064,7 +1064,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Saint Petersburg City</region>
<regionCode>66</regionCode>
<city>Hluboká nad Vltavou</city>
@@ -1101,10 +1101,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1244,7 +1244,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Saint Petersburg City</region>
<regionCode>66</regionCode>
<city>Stratford-upon-Avon</city>
@@ -1281,10 +1281,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1381,7 +1381,7 @@
<continentCode>eur</continentCode>
<country>Russia</country>
<countryCode>ru</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/ru.png</countryFlag>
<region>Saint Petersburg City</region>
<regionCode>66</regionCode>
<city>Stratford-upon-Avon</city>
@@ -1418,10 +1418,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -1580,7 +1580,7 @@
<continentCode>eur</continentCode>
<country>United Kingdom</country>
<countryCode>gb</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/gb.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/gb.png</countryFlag>
<region>Kent</region>
<regionCode>G5</regionCode>
<city>Stratford-upon-Avon</city>
@@ -1617,10 +1617,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCity_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCity_month.xml
index f9f34d09f3..7df3efc479 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCity_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCity_month.xml
@@ -29,7 +29,7 @@
<country>xx</country>
<country_name>Unknown</country_name>
<region_name>Unknown</region_name>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
<row>
<label>Vancouver, British Columbia, Canada</label>
@@ -62,7 +62,7 @@
<country>ca</country>
<country_name>Canada</country_name>
<region_name>British Columbia</region_name>
- <logo>plugins/UserCountry/images/flags/ca.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ca.png</logo>
</row>
<row>
<label>Stratford-upon-Avon, Warwickshire, United Kingdom</label>
@@ -95,7 +95,7 @@
<country>gb</country>
<country_name>United Kingdom</country_name>
<region_name>Warwickshire</region_name>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
</row>
<row>
<label>Besançon, Franche-Comte, France</label>
@@ -128,7 +128,7 @@
<country>fr</country>
<country_name>France</country_name>
<region_name>Franche-Comte</region_name>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
</row>
<row>
<label>Hluboká nad Vltavou, Saint Petersburg City, Russia</label>
@@ -159,7 +159,7 @@
<country>ru</country>
<country_name>Russia</country_name>
<region_name>Saint Petersburg City</region_name>
- <logo>plugins/UserCountry/images/flags/ru.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ru.png</logo>
</row>
<row>
<label>Lhasa, Unknown, Tibet</label>
@@ -192,7 +192,7 @@
<country>ti</country>
<country_name>Tibet</country_name>
<region_name>Unknown</region_name>
- <logo>plugins/UserCountry/images/flags/ti.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ti.png</logo>
</row>
<row>
<label>London, London, City of, United Kingdom</label>
@@ -223,7 +223,7 @@
<country>gb</country>
<country_name>United Kingdom</country_name>
<region_name>London, City of</region_name>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
</row>
<row>
<label>Nuneaton and Bedworth, Warwickshire, United Kingdom</label>
@@ -254,7 +254,7 @@
<country>gb</country>
<country_name>United Kingdom</country_name>
<region_name>Warwickshire</region_name>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
</row>
<row>
<label>Stratford-upon-Avon, Kent, United Kingdom</label>
@@ -285,7 +285,7 @@
<country>gb</country>
<country_name>United Kingdom</country_name>
<region_name>Kent</region_name>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
</row>
<row>
<label>Stratford-upon-Avon, Miravci, Macedonia</label>
@@ -316,7 +316,7 @@
<country>mk</country>
<country_name>Macedonia</country_name>
<region_name>Miravci</region_name>
- <logo>plugins/UserCountry/images/flags/mk.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/mk.png</logo>
</row>
<row>
<label>Stratford-upon-Avon, Saint Petersburg City, Russia</label>
@@ -347,7 +347,7 @@
<country>ru</country>
<country_name>Russia</country_name>
<region_name>Saint Petersburg City</region_name>
- <logo>plugins/UserCountry/images/flags/ru.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ru.png</logo>
</row>
<row>
<label>not a city, California, United States</label>
@@ -375,6 +375,6 @@
<country>us</country>
<country_name>United States</country_name>
<region_name>California</region_name>
- <logo>plugins/UserCountry/images/flags/us.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/us.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCountry_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCountry_month.xml
index 82341bda26..3e1bd4e2cc 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCountry_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCountry_month.xml
@@ -24,10 +24,9 @@
<sum_daily_nb_uniq_visitors>5</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>gb</code>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
<segment>countryCode==gb</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Canada</label>
@@ -53,10 +52,9 @@
<sum_daily_nb_uniq_visitors>3</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>ca</code>
- <logo>plugins/UserCountry/images/flags/ca.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ca.png</logo>
<segment>countryCode==ca</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Russia</label>
@@ -82,10 +80,9 @@
<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>ru</code>
- <logo>plugins/UserCountry/images/flags/ru.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ru.png</logo>
<segment>countryCode==ru</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>United States</label>
@@ -111,10 +108,9 @@
<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>1</sum_daily_nb_users>
<code>us</code>
- <logo>plugins/UserCountry/images/flags/us.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/us.png</logo>
<segment>countryCode==us</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>France</label>
@@ -140,10 +136,9 @@
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>fr</code>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
<segment>countryCode==fr</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Indonesia</label>
@@ -169,10 +164,9 @@
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>id</code>
- <logo>plugins/UserCountry/images/flags/id.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/id.png</logo>
<segment>countryCode==id</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Italy</label>
@@ -198,10 +192,9 @@
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>it</code>
- <logo>plugins/UserCountry/images/flags/it.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/it.png</logo>
<segment>countryCode==it</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Macedonia</label>
@@ -227,10 +220,9 @@
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>mk</code>
- <logo>plugins/UserCountry/images/flags/mk.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/mk.png</logo>
<segment>countryCode==mk</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Tibet</label>
@@ -256,10 +248,9 @@
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>ti</code>
- <logo>plugins/UserCountry/images/flags/ti.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ti.png</logo>
<segment>countryCode==ti</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Unknown</label>
@@ -285,9 +276,8 @@
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>xx</code>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
<segment>countryCode==xx</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getRegion_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getRegion_month.xml
index 8d74035038..8e963544ee 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getRegion_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getRegion_month.xml
@@ -27,7 +27,7 @@
<country>xx</country>
<country_name>Unknown</country_name>
<region_name>Unknown</region_name>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
<row>
<label>British Columbia, Canada</label>
@@ -57,7 +57,7 @@
<country>ca</country>
<country_name>Canada</country_name>
<region_name>British Columbia</region_name>
- <logo>plugins/UserCountry/images/flags/ca.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ca.png</logo>
</row>
<row>
<label>Warwickshire, United Kingdom</label>
@@ -87,7 +87,7 @@
<country>gb</country>
<country_name>United Kingdom</country_name>
<region_name>Warwickshire</region_name>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
</row>
<row>
<label>Saint Petersburg City, Russia</label>
@@ -117,7 +117,7 @@
<country>ru</country>
<country_name>Russia</country_name>
<region_name>Saint Petersburg City</region_name>
- <logo>plugins/UserCountry/images/flags/ru.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ru.png</logo>
</row>
<row>
<label>Franche-Comte, France</label>
@@ -147,7 +147,7 @@
<country>fr</country>
<country_name>France</country_name>
<region_name>Franche-Comte</region_name>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
</row>
<row>
<label>Kent, United Kingdom</label>
@@ -177,7 +177,7 @@
<country>gb</country>
<country_name>United Kingdom</country_name>
<region_name>Kent</region_name>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
</row>
<row>
<label>London, City of, United Kingdom</label>
@@ -207,7 +207,7 @@
<country>gb</country>
<country_name>United Kingdom</country_name>
<region_name>London, City of</region_name>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
</row>
<row>
<label>Miravci, Macedonia</label>
@@ -237,7 +237,7 @@
<country>mk</country>
<country_name>Macedonia</country_name>
<region_name>Miravci</region_name>
- <logo>plugins/UserCountry/images/flags/mk.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/mk.png</logo>
</row>
<row>
<label>Unknown, Tibet</label>
@@ -267,7 +267,7 @@
<country>ti</country>
<country_name>Tibet</country_name>
<region_name>Unknown</region_name>
- <logo>plugins/UserCountry/images/flags/ti.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ti.png</logo>
</row>
<row>
<label>California, United States</label>
@@ -292,6 +292,6 @@
<country>us</country>
<country_name>United States</country_name>
<region_name>California</region_name>
- <logo>plugins/UserCountry/images/flags/us.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/us.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_getCountry_with_filter_excludelowpop__UserCountry.getCountry_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_getCountry_with_filter_excludelowpop__UserCountry.getCountry_month.xml
index f3a9d2a67c..3281980946 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_getCountry_with_filter_excludelowpop__UserCountry.getCountry_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_getCountry_with_filter_excludelowpop__UserCountry.getCountry_month.xml
@@ -24,10 +24,9 @@
<sum_daily_nb_uniq_visitors>5</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>gb</code>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
<segment>countryCode==gb</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Canada</label>
@@ -53,9 +52,8 @@
<sum_daily_nb_uniq_visitors>3</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>ca</code>
- <logo>plugins/UserCountry/images/flags/ca.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ca.png</logo>
<segment>countryCode==ca</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getCity_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getCity_month.xml
index 312160ddd2..e170d8d501 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getCity_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getCity_month.xml
@@ -31,6 +31,6 @@
<country>gb</country>
<country_name>United Kingdom</country_name>
<region_name>Warwickshire</region_name>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getCountry_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getCountry_month.xml
index 14cb04d3d7..01782fba66 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getCountry_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getCountry_month.xml
@@ -24,9 +24,8 @@
<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>gb</code>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
<segment>countryCode==gb</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getRegion_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getRegion_month.xml
index eb777c4f04..05f987deef 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getRegion_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_city__UserCountry.getRegion_month.xml
@@ -28,6 +28,6 @@
<country>gb</country>
<country_name>United Kingdom</country_name>
<region_name>Warwickshire</region_name>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_continent__UserCountry.getCountry_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_continent__UserCountry.getCountry_month.xml
index c8d94aac7e..48db8ab5db 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_continent__UserCountry.getCountry_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_continent__UserCountry.getCountry_month.xml
@@ -24,10 +24,9 @@
<sum_daily_nb_uniq_visitors>5</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>gb</code>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
<segment>countryCode==gb</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Russia</label>
@@ -53,10 +52,9 @@
<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>ru</code>
- <logo>plugins/UserCountry/images/flags/ru.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ru.png</logo>
<segment>countryCode==ru</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>France</label>
@@ -82,10 +80,9 @@
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>fr</code>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
<segment>countryCode==fr</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Italy</label>
@@ -111,10 +108,9 @@
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>it</code>
- <logo>plugins/UserCountry/images/flags/it.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/it.png</logo>
<segment>countryCode==it</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>Macedonia</label>
@@ -140,9 +136,8 @@
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>mk</code>
- <logo>plugins/UserCountry/images/flags/mk.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/mk.png</logo>
<segment>countryCode==mk</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getCity_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getCity_month.xml
index 092f2c0db8..cb1ce9b492 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getCity_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getCity_month.xml
@@ -31,6 +31,6 @@
<country>ca</country>
<country_name>Canada</country_name>
<region_name>British Columbia</region_name>
- <logo>plugins/UserCountry/images/flags/ca.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ca.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getCountry_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getCountry_month.xml
index e4b7c8e8ff..5c1e0ee7b7 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getCountry_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getCountry_month.xml
@@ -24,9 +24,8 @@
<sum_daily_nb_uniq_visitors>3</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>ca</code>
- <logo>plugins/UserCountry/images/flags/ca.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ca.png</logo>
<segment>countryCode==ca</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getRegion_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getRegion_month.xml
index dc4bb6c0af..5b6c579fd9 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getRegion_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_lat_long__UserCountry.getRegion_month.xml
@@ -28,6 +28,6 @@
<country>ca</country>
<country_name>Canada</country_name>
<region_name>British Columbia</region_name>
- <logo>plugins/UserCountry/images/flags/ca.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/ca.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getCity_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getCity_month.xml
index aefcded3e8..26ea4337d0 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getCity_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getCity_month.xml
@@ -31,7 +31,7 @@
<country>gb</country>
<country_name>United Kingdom</country_name>
<region_name>Warwickshire</region_name>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
</row>
<row>
<label>Nuneaton and Bedworth, Warwickshire, United Kingdom</label>
@@ -62,6 +62,6 @@
<country>gb</country>
<country_name>United Kingdom</country_name>
<region_name>Warwickshire</region_name>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getCountry_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getCountry_month.xml
index 69cd5479ef..4b743fcad0 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getCountry_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getCountry_month.xml
@@ -24,9 +24,8 @@
<sum_daily_nb_uniq_visitors>3</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>gb</code>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
<segment>countryCode==gb</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getRegion_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getRegion_month.xml
index 7dc6b84073..bbe13fca3c 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getRegion_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_segment_region__UserCountry.getRegion_month.xml
@@ -28,6 +28,6 @@
<country>gb</country>
<country_name>United Kingdom</country_name>
<region_name>Warwickshire</region_name>
- <logo>plugins/UserCountry/images/flags/gb.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/gb.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getCity_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getCity_day.xml
index e2562def53..c0135236f8 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getCity_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getCity_day.xml
@@ -28,6 +28,6 @@
<country>xx</country>
<country_name>Unknown</country_name>
<region_name>Unknown</region_name>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getCountry_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getCountry_day.xml
index d358b9a330..01c30c1a1b 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getCountry_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getCountry_day.xml
@@ -23,7 +23,7 @@
<nb_conversions>2</nb_conversions>
<revenue>43</revenue>
<code>fr</code>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
<segment>countryCode==fr</segment>
<logoWidth>16</logoWidth>
<logoHeight>11</logoHeight>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getRegion_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getRegion_day.xml
index a32f142d6e..be4c941999 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getRegion_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getRegion_day.xml
@@ -26,6 +26,6 @@
<country>xx</country>
<country_name>Unknown</country_name>
<region_name>Unknown</region_name>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml
index ef0c6d4fcf..7884fcdf89 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml
@@ -85,7 +85,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -114,10 +114,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -303,7 +303,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -332,10 +332,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__UserCountry.getCity_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__UserCountry.getCity_day.xml
index 0c927196d9..7a36771e5e 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__UserCountry.getCity_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__UserCountry.getCity_day.xml
@@ -29,6 +29,6 @@
<country>xx</country>
<country_name>Unknown</country_name>
<region_name>Unknown</region_name>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__UserCountry.getCountry_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__UserCountry.getCountry_day.xml
index c95226160c..45bb6b9f18 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__UserCountry.getCountry_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__UserCountry.getCountry_day.xml
@@ -24,9 +24,8 @@
<nb_conversions>2</nb_conversions>
<revenue>43</revenue>
<code>fr</code>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
<segment>countryCode==fr</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__UserCountry.getRegion_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__UserCountry.getRegion_day.xml
index 2a364cd566..d1663e0ee4 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__UserCountry.getRegion_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__UserCountry.getRegion_day.xml
@@ -27,6 +27,6 @@
<country>xx</country>
<country_name>Unknown</country_name>
<region_name>Unknown</region_name>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml
index c75da162ca..ce7e76cd29 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml
@@ -72,7 +72,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -101,10 +101,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -193,7 +193,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -222,10 +222,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml
index 00e9c1cdba..6e1b82df61 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml
@@ -77,7 +77,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -97,10 +97,10 @@
<serverDatePretty>Sunday, April 7, 2013</serverDatePretty>
<serverDatePrettyFirstAction>Sunday, April 7, 2013</serverDatePrettyFirstAction>
<serverTimePrettyFirstAction>10:00:00</serverTimePrettyFirstAction>
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -181,7 +181,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -201,10 +201,10 @@
<serverDatePretty>Saturday, April 6, 2013</serverDatePretty>
<serverDatePrettyFirstAction>Saturday, April 6, 2013</serverDatePrettyFirstAction>
<serverTimePrettyFirstAction>11:00:00</serverTimePrettyFirstAction>
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -285,7 +285,7 @@
<continentCode>unk</continentCode>
<country>Unknown</country>
<countryCode>xx</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/xx.png</countryFlag>
<region />
<regionCode />
<city />
@@ -305,10 +305,10 @@
<serverDatePretty>Friday, April 5, 2013</serverDatePretty>
<serverDatePrettyFirstAction>Friday, April 5, 2013</serverDatePrettyFirstAction>
<serverTimePrettyFirstAction>12:00:00</serverTimePrettyFirstAction>
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_TimezonesTest__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_TimezonesTest__Live.getLastVisitsDetails_day.xml
index 0fba801755..6b911721dd 100644
--- a/tests/PHPUnit/System/expected/test_TimezonesTest__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_TimezonesTest__Live.getLastVisitsDetails_day.xml
@@ -72,7 +72,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -101,10 +101,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html
index 95b5726131..a20f435ec9 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html
@@ -599,7 +599,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/unknown.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/unknown.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -624,7 +624,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/normal.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/normal.png'>
&nbsp;
Desktop </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -762,7 +762,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/brand/Unknown.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/brand/Unknown.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -923,7 +923,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/UNK.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/UNK.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -948,7 +948,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/WIN.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/WIN.png'>
&nbsp;
Windows XP </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1018,7 +1018,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/UNK.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/UNK.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1043,7 +1043,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/FF.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/FF.png'>
&nbsp;
Firefox </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1068,7 +1068,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/OP.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/OP.png'>
&nbsp;
Opera </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1138,7 +1138,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/UNK.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/UNK.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1163,7 +1163,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/FF.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/FF.png'>
&nbsp;
Firefox 3.6 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1188,7 +1188,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/OP.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/OP.png'>
&nbsp;
Opera 9.63 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1372,7 +1372,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/UNK.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/UNK.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1397,7 +1397,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/WIN.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/WIN.png'>
&nbsp;
Windows </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1569,7 +1569,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/cookie.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/cookie.png'>
&nbsp;
Cookie </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1582,7 +1582,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/flash.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/flash.png'>
&nbsp;
Flash </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1595,7 +1595,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/java.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/java.png'>
&nbsp;
Java </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1608,7 +1608,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/director.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/director.png'>
&nbsp;
Director </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1621,7 +1621,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/gears.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/gears.png'>
&nbsp;
Gears </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1634,7 +1634,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/pdf.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/pdf.png'>
&nbsp;
Pdf </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1647,7 +1647,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/quicktime.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/quicktime.png'>
&nbsp;
Quicktime </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1660,7 +1660,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/realplayer.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/realplayer.png'>
&nbsp;
Realplayer </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1673,7 +1673,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/silverlight.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/silverlight.png'>
&nbsp;
Silverlight </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1686,7 +1686,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/windowsmedia.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/windowsmedia.png'>
&nbsp;
Windowsmedia </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1708,7 +1708,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAJdElEQVR4nO3dQYhcdx3A8f9MJocuGKhukSTFgoP0ZisK7ami2EAvhZy8Fjz1IiIKkqPYgghtQQgWsXrw3FMPvenNi3tSvOj0YM2YQBNLTOLOm/f+fw/TnbzObmZ/2Z3sm+l+PodkZ9572X8OO+/7/u8/s71SSgIAOEy/6wEAAJtBNAAAIaIBAAgRDQBAiGgAAEJEAwAQIhoeznA4fNCTB25achQAbBbRsDKj0ejQTeoBgM0lGh7OaDRaOPEPh8MluQAAnxmDrgewjl7/zZ8XnrnyvW8cetS8HtpVMX9mXhvzrQv9oTwAWHOi4QB///D2dDqdPzx79uy1a9cuXrwYOXZh4qH9cFYJ7VsVD9oTANaQ2xMHu9eSUhqPx/NN7RmCQ8/08Q5QDACsOdGwYrOkiCx4jO8JAOvA7YnVa69siMxDRPYEgM6JhoNtbW0t2Tq/Q3Ho2ywjKxXiewJAh0TDAS5/ezi+du1ox8bP/SoBgM0iGg7w8gtPpfTU0Y5d/kbK9lZvuQRgs/RKKV2PAQDYAN49AQCEiAYAIEQ0AAAhogEACDl1757whgVYN95+DJ0LnhxPVzT4HVGwbnySOnQufnJ0ewLojHCHzSIagG4oBtg4p+v2BLAmFAOsj/gnFIsGoBvtFykNAR2Kr2kQDUAHLEmGTWRNAwAQcrpmGvxiSQBYED85+i2XAECI2xMAQIhoAABCRAMAECIaAIAQ0QAAhIgGACDklEbDzs5O10MAUkppPB6Px+OuRwGkFDg5ntJoAAAelmgAAEJEAwAQIhoAgBDRAACEiAYAIEQ0AAAhg64H0Jmdv13veghAunnzPymlf3/sAga6949r//v615ftcHqj4bVf/6nrIQDAevnuy8u2qnsAIEQ0AAAhogEACBENAECIaAAAQkQDABAiGgCAENEAAISIBgAgRDQAACGiAQAIEQ0AQIhoAABCRAMAECIaAIAQ0QAAhIgGACBENAAAIaIBAAgRDQBAiGgAAEJEAwAQcsRoGA6Hqx0HALDmBvOvhsPhaDRqb9v/zPq4fft2yjn1F6Mn5zz7s63O+UtPPtnFMAFg87SnBtolMDho5w0wGAy2trZSSiU3qddPKZWSUipl/lfL9evXux0tAGyKhSmD9sPDb0/McmO4Z8kOB+42bGnv/6CvD/12M7muU0qllL1iKCmVGzdufPDBBwvTDGlv+gEAOI7QTEO7MpYEyP6vl+x8tG831x8MStPMbk/MZhfef//999577/HHH79169Zbb701n2ZIogEAViEUDQ860y+c0YMLIOYxsf/P+L+T9xY0lFJSSSWVS5cuvfjii3fu3Hnuuedu3LjxxBNPzKOhruvIwACA2Um5/XD+9dHXNHS7THI2eTDPgvm8wpUrV95+++15MZRSUq9npgEAgo61puFBFkrkhOWc96Lg/oLHd95555lnnnn++efbqyBTKaIBAI7vfjQsREBkIuHI3dC+H7F/6UPQXhPcr4ann376pZde+lQx7K14AACO6VO3J9oR8LALFJZsbT886jgXzW9PpNa9iatXr7766qvb29vtaEjWNABA2JJzd29DL8Rv3bp17ty5hTUNd+/e3draWphoSCmNRqNnn322ffjOzs5rv/9nJyMHgLX17puXl2zd1A93yjl/9NFH9z/zsa5ncw83b97c/zkNAMDxbWo0bG9vdz0EADhd/JZLACBENAAAIaIBAAgRDQBAiGgAAEJEAwAQIhoAgBDRAACEiAYAIEQ0AAAhogEACBENAECIaAAAQkQDABAiGgCAENEAAISIBgAgRDQAACGiAQAIEQ0AQIhoAABCRAMAEDLoegCdeffNy10PAUjj8TildOHCha4HAqSdnZ3lO5hpAABCRAMAECIaAIAQ0QAAhIgGACBENAAAIaIBAAgRDQBAiGgAAEJEAwAQIhoAgBDRAACEiAYAIEQ0AAAhogEACBENAEDIoOsBdObHb/yh6yHA4X7xw291PQSAT5zeaBh9+HHXQwCATeL2BAAQIhoAgBDRAACEiAYAIEQ0AAAhogEACBENAECIaAAAQkQDABAiGgCAENEAAISIBgAgRDQAACGiAQAIEQ0AQIhoAABCRAMAECIaAIAQ0QAAhIgGACBENAAAIaIBAAgZHPnI4XDYfjgajY49mIfwo6t/nX+d6/z9l881TTOZTJqmqeu61+t9+Ttfy3dSPUl1SjmlC6Wc5PBgtdo/bif8swYwd/RoSF2/eF1+4UJKqeSSczl//nOllJRSKSXnXEo5+7M3Sj3NVVWm05s/+WmH44RjGg6H7Z+1hYcAJ+ZY0bBg9lo2f0WbXxvNH862tp9MB11CRS+qSvrvvWnTlJzz3bt3SymzYuj1ek3TnBv/K1eTUk3SF7brFf4n4cRJBGBNrDIa0qevgdpZ0O6G9pP7r5miF1U5lVyapjQ5N03p9/uzuxL9fj/PVLt5UpV60quqvNr/JACcSseKhv1TAssviVZ4wVTXucm5aXLTlDo3pZR+v1/y7NZESSnlyaRUk1xNe1VVreq7Qnf2z9IBnLBHuKZhYaVkXOTAqqpzLk2Tpzk3dTlz5kzOOac06Kece71eL08mZVrlqurVtZkGPgP2T90BnLAV356YW7gT8VDHRl4QqzrXTZk2uW5yXefS0jRNKaVUk6aqSjXtm2kAgFVY989peFBw7FZ1k3Nd52mdp9NmtoxhVgw556Zpmqoq1SRPJ7memmlgox150g5gtR7VTEP7jRLx3Uaj0f5nDjxwd7eeFUNdN9M6H2AyKfU0T6e9uvHuCTZa8IcC4FE7ejTsf+VaeCb48NB/50D3qqqu89ZjZ5o61XV/9r6J2aZer9fr9c588Xyu615Tl8ZMAxtPKADr4FHNNDxq9+7Vr//uL7u71b3d+s5udfGx81VVTXd3q6apqmp3d/erv/xtTp98HCQAcHybGg1//NWlQ/Z45ZWTGAcAnBrrvhASAFgTogEACBENAECIaAAAQkQDABAiGgCAENEAAISIBgAgRDQAACGiAQAIEQ0AQIhoAABCRAMAECIaAIAQ0QAAhIgGACBENAAAIaIBAAgRDQBAiGgAAEJEAwAQIhoAgBDRAACEDLoeQGd+/oNvdj0EANgkpzcavvLU57seAgBsErcnAIAQ0QAAhIgGACBENAAAIaIBAAgRDQBAiGgAAEJ6pZSuxwAAbAAzDQBAiGgAAEJEAwAQIhoAgBDRAACEiAYAIEQ0AAAhogEACPk/KY7ryVkeL28AAAAASUVORK5CYII="
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAI5ElEQVR4nO3dT2iU+R3A4dcQLyIhmOLBDXgYa4Xe3HqT1kgKvXRJwKUeRAShBxEpakV6kEXYYhW79CRYPCjFQw8J2GPFeAj0YMcFD4WknUvXjF5Cl2BawZLpIfb1zUzy5puJmfedzPMclnn/mR8LM+9n3n+zo9FoJAAA6+kregAAQHcQDQBAiGgAAEJEAwAQIhoAgBDRAACEiIbuVqlU1pq56qKcrQAgn2jYtmq12rqL1AMAcaKhu9VqtaYdf6VSyckFAGhbf9EDYH2/vvfXpjm/OvuDdbdK6yFbFemctDbSpU39oTwAaCIausDfv1l49+5dOrlz5865ublPPvkksm3TgYfs5HIlZE9VrLUmACROT3SLf2ckSVKv19NF2SME6+7p4x2gGABoIhq2ueWkiFzwGF8TgN7k9MT2l72yIXIcIrImAD1INHSHXbt25SxNz1Cse5tl5EqF+JoA9BTR0AXGj1fqc3PtbRvf96sEAPKJhi7w2Q/3J8n+9rbNv5Eyu9QtlwDk29FoNIoeAwDQBdw9AQCEiAYAIEQ0AAAhogEACHH3RMHcsAAfi9uGoW3BnZFoKJLfiIKPxRPQoW3xnZHTE0DXE9zQGaIB6G6KATrG6QmgiykG2Lz4E4FFA9Ddsh92GgLaEL+mQTQAXcylxNBJrmkAAEIcaSiSH5YEoHDxnZFfuQQAQpyeAABCRAMAECIaAIAQ0QAAhIgGACBENAAAIaKhFKrVatFDgO5Wr9fr9XrRo4Dutu7OSDQAACGiAQAIEQ0AQIhoAABCRAMAECIaAIAQ0QAAhPQXPQDeq/7tddFDgC42P/+vJElefeuLELTvH3P/+fTTvBVEQ1l8+fu/FD0EAHrdzz7LW6rKAYAQ0QAAhIgGACBENAAAIaIBAAgRDQBAiGgAAEJEAwAQIhoAgBDRAACEiAYAIEQ0AAAhogEACBENAECIn8ZeYWZmZnp6+uXLl0mSDA8PHzt2rFKpFD0oACgF0fDe1NTUtWvXpqenm+YfPXr0+vXrIyMjhYwKAMrD6YkkSZI7d+6Mjo62FkOSJNPT06Ojo7dv3+78qACgVERDMjk5ef78+aWlpbVWWFpaunz58r179zo5KgAom16PhsXFxQsXLuQUQ+rixYvz8/MdGBIAlFOvR8ODBw+WL3tc1tfXd/ny5SdPnkxMTJw+fbqv78P/n4WFhRs3bhQxRgAohV6PhocPH2Ynb968eevWrZGRkfHx8fv379+9eze79NGjR50dHQCUSK9Hw4sXL9LXAwMDly5dyi49e/bswYMH08nZ2dnFxcXODQ4AyqTNWy4rlUqtVvu4Q+m8+fn5AwcOpJPHjx9vXefQoUOzs7Pp5OvXrz25AYDe9CEaWjtge5RBjqGhoWq1mr9O9oqHJEkGBwe3ckQAULzs1+NsCXi4U56pqannz5+nk8PDw0NDQwWOBwC2WtMhg+zk+tc0LOdG5f9yVlh1tUpGdv21Xq/75zrm2bNnY2Nj2TknT54sajAAULjQkYZsZeQESOvrnJXb+3MdMzU1NTY2trCwkM4ZHh6+evVq50cCACURioa1dttNe/Tg3j2Nidb/bujf2TqTk5MnTpzIPvFpYGBgYmLCuQkAtr3lnXJ2Mn3d/jUN2/UyyZmZmTNnzjQVw+PHj48cOVLgqACgMzZ1TcNamkpk27hy5Ur2rIRiAIBlH6KhKQIiBxLa7obs+YjWSx8KVKvVso997OvrUwwAsGzF6YlsBGz0AoWcpdnJdsfZIU+fPs1Onjp1SjEA0FM2cE1D6369aU56eCBnTnYypyfWfZ2z+RZpepRT0y2XANAL1tr59vpvTzR58+ZNdnJ4eLiokQBA2Xgi5Aq7d+8+fPhwOrlnz54CBwMApbKj0WgUPQaSarX65R/+WfQoAOh1E1+N5yx1pGGFxcXFt2/fppOe5gQAKdc0rHDu3LnvZJT/dg8A6BjRAACEiAYAIEQ0AAAhLoRcYWxsbO/evenk4OBggYMBgFIRDSuMj4+Pj+fdbQIAPcvpCQAgRDQAACGiAQAIEQ0AQIhoAABCRAMAECIaAIAQ0QAAhIgGACBENAAAIaIBAAgRDQBAiGgAAEJEAwAQ4qexy2LiKz/JDe2r1+tJkuzbt6/ogUAXq1ar+Ss40gAAhIgGACBENAAAIaIBAAgRDQBAiGgAAEJEAwAQIhoAgBDRAACEiAYAIEQ0AAAhogEACBENAECIaAAAQkQDABAiGgCAkP6iB8B7v/ztVNFDoLfcujhS9BCALiMayqL2zbdFDwEA8jg9AQCEiAYAIEQ0AAAhogEACOnWCyF3fO+LzWz+x999/vlPvt/25v/905/f/vzKZgaw+9XXm9kcADrPkQYAIEQ0AAAhogEACBENAECIaAAAQkQDABAiGgCAENEAAISIBgAgRDQAACGiAQAIEQ0AQIhoAABCRAMAECIaAIAQ0QAAhIgGACCkv+0tK5VKdrJWq216MECnZd/I3sVAvvajIfERA12uUqlk38VNkwBNNhUNTZY/cdLPnfQbTDq5vDQ7M1nti46vPtAZ3l/AhnzMaEhWflPJZkG2G7IzW7/Z+OoDAOW0qWhoPSSQv4O3+4cSaj3+B7CqLbymoelKybi2NwTa0HpQEGBVH/n0RKrpTMSGtvWxBQAlVPbnNDjqAFvH+wvYkK060pC9USK+Wq1Wa52zJeMDVnsDFjgYoPzaj4bWz5emOcHJdf8dYOt4uwFxZT89AQCUhGgAAEJEAwAQIhoAgBDRAACEiAYAIEQ0AAAhogEACBENAECIaAAAQkQDABAiGgCAENEAAISIBgAgRDQAACGiAQAIEQ0AQIhoAABCRAMAECIaAICQ/qIH0KbGzBcF/vX+n/5496uvCxwAAHSeIw0AQIhoAABCRAMAECIaAICQbr0Qcvv5zS9+VPQQACCPaCiL7+7fU/QQACCP0xMAQIhoAABCRAMAECIaAIAQ0QAAhIgGACBENAAAITsajUbRYwAAuoAjDQBAiGgAAEJEAwAQIhoAgBDRAACEiAYAIEQ0AAAhogEACPkfE8/6eZ4CiRMAAAAASUVORK5CYII="
height="200"
width="700"
margin="0 auto"/>
@@ -1744,7 +1744,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/xx.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/flags/xx.png' style="border: 1px solid lightgray; ">
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1769,7 +1769,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/fr.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/flags/fr.png' style="border: 1px solid lightgray; ">
&nbsp;
France </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1894,7 +1894,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAHD0lEQVR4nO3dMW8TZwDH4TfILB6QkMIEagcPjCClEkwdKoHEUgmp36BSJb4Ce7vChESlMnWsmBj4At1qqXMrg9QqiAjIgKALwdfBynE4TvKP43A29zxDiO/Oybsc/uV97+y1qqoKAMBhTrU9AABgNYgGACAiGgCAiGgAACKiAQCIiAYAICIajmYwGOy3ceauA54FAKtFNCzMaDQ6dJd6AGB1iYajGY1GUy/8g8HggFwAgM9Gr+0BLKOffvljasvt77869Fl1PTSrot5S10a9d6o/lAcAS040zPD3v6/fvXtXPzx9+vTm5ub58+eT505NPDQfTiqhuVSx35EAsIQsT8z2X0Mp5dmzZ/Wu5gzBoa/0eQcoBgCWnGhYsElSJBc85kcCwDKwPLF4zSsbknmI5EgAaJ1omK3f7x+wt16hOPQ2y+RKhfxIAGiRaJjh5jeDZ5ub8z03f+1XCQCsFtEww7dff1nKl/M99+AbKZt73XIJwGpZq6qq7TEAACvA3RMAQEQ0AAAR0QAAREQDABDp3N0TbliAVux9axMnI3wyM0+3Oc7BbkWDz4iCVjQ/6LW5Zb+HwALNPN3mOwctTwAnThBAixZ4AooGACAiGgCgK465FNitaxoAoJsW8onKogEAPnOLutbY8gQAfM4WeHdS5z6wyq3h8Ok1z7uye+o5GeHTmDoByzHOwc5FAwAwH8sTAEBENAAAEdEAAEREAwAQEQ0AQEQ0AACRjkbDcDhsewjQac5BaNd852BHowEAOCrRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAECk1/YAWvPzb3+2PQTorhcvtodPT+oc/OG7yyf0k6HjuhsNj39/2vYQoNv+enNCP1g0wAmxPAEAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBAZM5oGAwGix0HALDkevV3g8FgNBo19+3dsjxev35dxuNyajp6xuPx5GvTznj8xYULbQwTaM3kb5u9/63t3QiEeocfspR6vV6/3y+lVOP3Ze1UKaWqSilVVf/T8Pz583ZHC3xik795puZEZ24EcocvT0xOsMGuAw6YedigoXn8ft8f+usmxjs7pZSqqnaLoSql2traevLkydQ0Q9mdfgC6Y+ZcggkGOKZopqG5TjG1ZrHfrrro9zt4vl9XO9XrVe/fT5YnJrMLjx8/fvTo0dmzZ7e3t+/evVtPMxTRAACLEEXDfq/0U6/oYcXXMbH3a/5zxrsXNFRVVapSler69evXrl178+bNlStXtra2zp07V0fDzs5OMjAA4ADzX9PQ7mWSk8mDOgvqeYXbt2/fv3+/LoaqqsrampkGADi++d+nod3ricbj8W4UfLjg8cGDB5cuXbp69WrzKshSVaIBAI7vQzRMRUAykTB3NzTXI/Ze+hDabYIP1XDx4sUbN258VAy7VzwAAMf00fJEMwKOeoHCAXubD+cd57R6eaI01ibu3bt369at9fX1ZjQU1zRA90zdrjX5z2fmRiC3tqJ/iG9vb585c2bqmoa3b9/2+/2piYZSymg0unz5cvPpw+Hwx1//aWXkwEl7eOdm20OAZTccDjc2No76rFV9c6fxePzy5csP7/m4szOZe3j16tXe92kAAI5vVaNhfX297SEAQLf4lEsAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIr22B9Cah3dutj0E6K7hcLixsdH2KICjMdMAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAARNaqqmp7DADACjDTAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AACR/wEEhu+Sdg68agAAAABJRU5ErkJggg=="
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAH6klEQVR4nO3dP2gUfQLH4TFoIxKCOWxceIsVsTz07ORQSX0kcIWFiCBcIWKhQeQKAxaHKHKlIFi8FlZHAlZXiLHIVV7ksEuO5S1ORXjJFcEcgpBcEd99J5tk83XfvJn98zzVzp9NfgjjfjLzm9l9a2trBQDAToaqHgAA0BtEAwAQEQ0AQEQ0AAAR0QAAREQDABARDb2tXq9vt3LLTW3eBQDtiYa+1Wg0dtykHgDIiYbe1mg0Wj746/V6m1wAgI7tr3oA7OwvT/7ZsubPV36347ua9VCuiuaaZm00t7b0h/IAoIVo6AH//s/yly9fmosHDhx4//790aNHk/e2nHgoL65XQvlSxXZ7AkDh8kSv+F9JURQfPnxobiqfIdjxkz7vAMUAQAvR0OfWkyKZ8JjvCcBgcnmi/5VnNiTnIZI9ARhAoqE3HDx4sM3W5hWKHW+zTGYq5HsCMFBEQw+YOF//8P59Z+/NP/tVAgDtiYYe8Ifff1cU33X23vY3Upa3uuUSgPb2ra2tVT0GAKAHuHsCAIiIBgAgIhoAgIhoAAAi7p6omBsW4JtsfiSJgwh2tOVh0sGxIxqq5Dui4JuUv6C1vGa7RaDY5jDp7NhxeQLoGYIAOrCLB45oAAAiogEABsUvvIRnTgMA9L9d+QZj0QAAfW635gi7PAEA/WwX7yryhVUVc4s55MrHS/HTIeMggvZaDpziFxw7ogEAiLg8AQBERAMAEBENAEBENAAAEdEAAEREAwAQEQ1dYX5+vuohQE9y7EBnOjt2RAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAET2Vz0Avnr8t39VPQToPT/++N/5H3b52PnTH3+7uz8Q+oZo6BZ//8cPVQ8BetPip939eaIBtuPyBAAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAAJH9VQ+guywsLMzNzb17964oilqtdvbs2Xq9XvWgAKAriIavZmdn79y5Mzc317L+zJkzd+/ePXfuXCWjAoDu4fJEURTFo0ePxsbGNhdDURRzc3NjY2MPHz7c+1EBQFcRDcXMzMy1a9dWV1e322F1dXVycvLJkyd7OSoA6DaDHg0rKyvXr19vUwxNN27cWFpa2oMhAUB3GvRoePr06fq0x3VDQ0OTk5MvX76cnp6+dOnS0NDP/z7Ly8v37t2rYowA0BUGPRqePXtWXrx///6DBw/OnTs3MTHx/fffP378uLz1+fPnezs6AOgigx4Nb9++bb4eHh6+efNmeeuVK1eOHz/eXFxcXFxZWdm7wQFAN+nwlst6vd5oNHZ3KHtvaWnp2LFjzcXz589v3ufEiROLi4vNxY8fP3pyAwCD6edo2NwB/VEGbYyOjs7Pz7ffpzzjoSiKkZGRX3NEQLdY//Ng8/+Km1fC4Bj0yxPtzc7OvnnzprlYq9VGR0crHA+wN7b8k6nv/46CHe0cDetlXf9Jmx223K1eUt5/u9c7/ro98/r16/Hx8fKaCxcuVDUYYC9tGQeKAaI5DeW+bmnt7Tatv26zc2e/bs/Mzs6Oj48vLy8319Rqtdu3b+/9SACgS0SXJ7b72G75RA8/3ddjoiiFRcuPqjznZ2ZmxsbGysUwPDw8PT3t2gQAg6zzOQ39enlvYWHh8uXL5WdEDg8Pv3jx4vTp0xWOCgAq13k0NE8S9Jlbt261nGNQDABQlKOhJQKSEwkdd0N5usPmqQ8VajQa5cc+Dg0NKQYAWLdhImQ5Ar5pgsJ2O7dURZeUQRuvXr0qL168eFExwABqudtr/f+uLVfCQGm9e2LzYdCypnl6oM2a8mKbntjxdZu3/0paHuXUcsslMCDccglb8nCnDT59+lRerNVqVY0EALpNh9890a8OHTp08uTJ5uLhw4crHAwAdBXRsMHU1NTU1FTVowCAbiQaNlhZWfn8+XNz0dOcAKDJnIYNrl69+psS854AoEk0AAAR0QAAREQDABAxEXKD8fHxI0eONBdHRkYqHAwAdBXRsMHExMTExETVowCAbuTyBAAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAAJH9VQ+Ar6b/OlH1EKD3zM/Pnzp1qupRwKBwpgEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCI7FtbW6t6DABAD3CmAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAi/wdXRmOGWuCTFQAAAABJRU5ErkJggg=="
height="200"
width="700"
margin="0 auto"/>
@@ -1930,7 +1930,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/xx.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/flags/xx.png' style="border: 1px solid lightgray; ">
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -2055,7 +2055,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAHD0lEQVR4nO3dMW8TZwDH4TfILB6QkMIEagcPjCClEkwdKoHEUgmp36BSJb4Ce7vChESlMnWsmBj4At1qqXMrg9QqiAjIgKALwdfBynE4TvKP43A29zxDiO/Oybsc/uV97+y1qqoKAMBhTrU9AABgNYgGACAiGgCAiGgAACKiAQCIiAYAICIajmYwGOy3ceauA54FAKtFNCzMaDQ6dJd6AGB1iYajGY1GUy/8g8HggFwAgM9Gr+0BLKOffvljasvt77869Fl1PTSrot5S10a9d6o/lAcAS040zPD3v6/fvXtXPzx9+vTm5ub58+eT505NPDQfTiqhuVSx35EAsIQsT8z2X0Mp5dmzZ/Wu5gzBoa/0eQcoBgCWnGhYsElSJBc85kcCwDKwPLF4zSsbknmI5EgAaJ1omK3f7x+wt16hOPQ2y+RKhfxIAGiRaJjh5jeDZ5ub8z03f+1XCQCsFtEww7dff1nKl/M99+AbKZt73XIJwGpZq6qq7TEAACvA3RMAQEQ0AAAR0QAAREQDABDp3N0TbliAVux9axMnI3wyM0+3Oc7BbkWDz4iCVjQ/6LW5Zb+HwALNPN3mOwctTwAnThBAixZ4AooGACAiGgCgK465FNitaxoAoJsW8onKogEAPnOLutbY8gQAfM4WeHdS5z6wyq3h8Ok1z7uye+o5GeHTmDoByzHOwc5FAwAwH8sTAEBENAAAEdEAAEREAwAQEQ0AQEQ0AACRjkbDcDhsewjQac5BaNd852BHowEAOCrRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAECk1/YAWvPzb3+2PQTorhcvtodPT+oc/OG7yyf0k6HjuhsNj39/2vYQoNv+enNCP1g0wAmxPAEAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBAZM5oGAwGix0HALDkevV3g8FgNBo19+3dsjxev35dxuNyajp6xuPx5GvTznj8xYULbQwTaM3kb5u9/63t3QiEeocfspR6vV6/3y+lVOP3Ze1UKaWqSilVVf/T8Pz583ZHC3xik795puZEZ24EcocvT0xOsMGuAw6YedigoXn8ft8f+usmxjs7pZSqqnaLoSql2traevLkydQ0Q9mdfgC6Y+ZcggkGOKZopqG5TjG1ZrHfrrro9zt4vl9XO9XrVe/fT5YnJrMLjx8/fvTo0dmzZ7e3t+/evVtPMxTRAACLEEXDfq/0U6/oYcXXMbH3a/5zxrsXNFRVVapSler69evXrl178+bNlStXtra2zp07V0fDzs5OMjAA4ADzX9PQ7mWSk8mDOgvqeYXbt2/fv3+/LoaqqsrampkGADi++d+nod3ricbj8W4UfLjg8cGDB5cuXbp69WrzKshSVaIBAI7vQzRMRUAykTB3NzTXI/Ze+hDabYIP1XDx4sUbN258VAy7VzwAAMf00fJEMwKOeoHCAXubD+cd57R6eaI01ibu3bt369at9fX1ZjQU1zRA90zdrjX5z2fmRiC3tqJ/iG9vb585c2bqmoa3b9/2+/2piYZSymg0unz5cvPpw+Hwx1//aWXkwEl7eOdm20OAZTccDjc2No76rFV9c6fxePzy5csP7/m4szOZe3j16tXe92kAAI5vVaNhfX297SEAQLf4lEsAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIr22B9Cah3dutj0E6K7hcLixsdH2KICjMdMAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAARNaqqmp7DADACjDTAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AACR/wEEhu+Sdg68agAAAABJRU5ErkJggg=="
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAH6klEQVR4nO3dP2gUfQLH4TFoIxKCOWxceIsVsTz07ORQSX0kcIWFiCBcIWKhQeQKAxaHKHKlIFi8FlZHAlZXiLHIVV7ksEuO5S1ORXjJFcEcgpBcEd99J5tk83XfvJn98zzVzp9NfgjjfjLzm9l9a2trBQDAToaqHgAA0BtEAwAQEQ0AQEQ0AAAR0QAAREQDABARDb2tXq9vt3LLTW3eBQDtiYa+1Wg0dtykHgDIiYbe1mg0Wj746/V6m1wAgI7tr3oA7OwvT/7ZsubPV36347ua9VCuiuaaZm00t7b0h/IAoIVo6AH//s/yly9fmosHDhx4//790aNHk/e2nHgoL65XQvlSxXZ7AkDh8kSv+F9JURQfPnxobiqfIdjxkz7vAMUAQAvR0OfWkyKZ8JjvCcBgcnmi/5VnNiTnIZI9ARhAoqE3HDx4sM3W5hWKHW+zTGYq5HsCMFBEQw+YOF//8P59Z+/NP/tVAgDtiYYe8Ifff1cU33X23vY3Upa3uuUSgPb2ra2tVT0GAKAHuHsCAIiIBgAgIhoAgIhoAAAi7p6omBsW4JtsfiSJgwh2tOVh0sGxIxqq5Dui4JuUv6C1vGa7RaDY5jDp7NhxeQLoGYIAOrCLB45oAAAiogEABsUvvIRnTgMA9L9d+QZj0QAAfW635gi7PAEA/WwX7yryhVUVc4s55MrHS/HTIeMggvZaDpziFxw7ogEAiLg8AQBERAMAEBENAEBENAAAEdEAAEREAwAQEQ1dYX5+vuohQE9y7EBnOjt2RAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAET2Vz0Avnr8t39VPQToPT/++N/5H3b52PnTH3+7uz8Q+oZo6BZ//8cPVQ8BetPip939eaIBtuPyBAAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAAJH9VQ+guywsLMzNzb17964oilqtdvbs2Xq9XvWgAKAriIavZmdn79y5Mzc317L+zJkzd+/ePXfuXCWjAoDu4fJEURTFo0ePxsbGNhdDURRzc3NjY2MPHz7c+1EBQFcRDcXMzMy1a9dWV1e322F1dXVycvLJkyd7OSoA6DaDHg0rKyvXr19vUwxNN27cWFpa2oMhAUB3GvRoePr06fq0x3VDQ0OTk5MvX76cnp6+dOnS0NDP/z7Ly8v37t2rYowA0BUGPRqePXtWXrx///6DBw/OnTs3MTHx/fffP378uLz1+fPnezs6AOgigx4Nb9++bb4eHh6+efNmeeuVK1eOHz/eXFxcXFxZWdm7wQFAN+nwlst6vd5oNHZ3KHtvaWnp2LFjzcXz589v3ufEiROLi4vNxY8fP3pyAwCD6edo2NwB/VEGbYyOjs7Pz7ffpzzjoSiKkZGRX3NEQLdY//Ng8/+Km1fC4Bj0yxPtzc7OvnnzprlYq9VGR0crHA+wN7b8k6nv/46CHe0cDetlXf9Jmx223K1eUt5/u9c7/ro98/r16/Hx8fKaCxcuVDUYYC9tGQeKAaI5DeW+bmnt7Tatv26zc2e/bs/Mzs6Oj48vLy8319Rqtdu3b+/9SACgS0SXJ7b72G75RA8/3ddjoiiFRcuPqjznZ2ZmxsbGysUwPDw8PT3t2gQAg6zzOQ39enlvYWHh8uXL5WdEDg8Pv3jx4vTp0xWOCgAq13k0NE8S9Jlbt261nGNQDABQlKOhJQKSEwkdd0N5usPmqQ8VajQa5cc+Dg0NKQYAWLdhImQ5Ar5pgsJ2O7dURZeUQRuvXr0qL168eFExwABqudtr/f+uLVfCQGm9e2LzYdCypnl6oM2a8mKbntjxdZu3/0paHuXUcsslMCDccglb8nCnDT59+lRerNVqVY0EALpNh9890a8OHTp08uTJ5uLhw4crHAwAdBXRsMHU1NTU1FTVowCAbiQaNlhZWfn8+XNz0dOcAKDJnIYNrl69+psS854AoEk0AAAR0QAAREQDABAxEXKD8fHxI0eONBdHRkYqHAwAdBXRsMHExMTExETVowCAbuTyBAAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAAJH9VQ+Ar6b/OlH1EKD3zM/Pnzp1qupRwKBwpgEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCI7FtbW6t6DABAD3CmAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAi/wdXRmOGWuCTFQAAAABJRU5ErkJggg=="
height="200"
width="700"
margin="0 auto"/>
@@ -2091,7 +2091,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/xx.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/flags/xx.png' style="border: 1px solid lightgray; ">
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html
index 6369647644..e89f30802e 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html
@@ -578,7 +578,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/unknown.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/unknown.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -603,7 +603,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/normal.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/normal.png'>
&nbsp;
Desktop </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -727,7 +727,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/brand/Unknown.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/brand/Unknown.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -874,7 +874,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/UNK.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/UNK.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -899,7 +899,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/WIN.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/WIN.png'>
&nbsp;
Windows XP </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -962,7 +962,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/UNK.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/UNK.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -987,7 +987,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/FF.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/FF.png'>
&nbsp;
Firefox </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1012,7 +1012,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/OP.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/OP.png'>
&nbsp;
Opera </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1075,7 +1075,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/UNK.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/UNK.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1100,7 +1100,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/FF.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/FF.png'>
&nbsp;
Firefox 3.6 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1125,7 +1125,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/OP.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/OP.png'>
&nbsp;
Opera 9.63 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1295,7 +1295,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/UNK.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/UNK.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1320,7 +1320,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/WIN.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/WIN.png'>
&nbsp;
Windows </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1478,7 +1478,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/cookie.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/cookie.png'>
&nbsp;
Cookie </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1491,7 +1491,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/flash.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/flash.png'>
&nbsp;
Flash </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1504,7 +1504,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/java.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/java.png'>
&nbsp;
Java </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1517,7 +1517,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/director.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/director.png'>
&nbsp;
Director </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1530,7 +1530,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/gears.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/gears.png'>
&nbsp;
Gears </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1543,7 +1543,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/pdf.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/pdf.png'>
&nbsp;
Pdf </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1556,7 +1556,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/quicktime.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/quicktime.png'>
&nbsp;
Quicktime </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1569,7 +1569,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/realplayer.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/realplayer.png'>
&nbsp;
Realplayer </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1582,7 +1582,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/silverlight.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/silverlight.png'>
&nbsp;
Silverlight </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1595,7 +1595,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/windowsmedia.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/windowsmedia.png'>
&nbsp;
Windowsmedia </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1646,7 +1646,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/xx.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/flags/xx.png' style="border: 1px solid lightgray; ">
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1671,7 +1671,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/fr.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/flags/fr.png' style="border: 1px solid lightgray; ">
&nbsp;
France </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1818,7 +1818,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/xx.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/flags/xx.png' style="border: 1px solid lightgray; ">
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1965,7 +1965,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/xx.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/flags/xx.png' style="border: 1px solid lightgray; ">
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf
index adda5aaba5..906bc48da4 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf
Binary files differ
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getProcessedReport_day.xml
index 286c0b87bf..406af740bc 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getProcessedReport_day.xml
@@ -65,10 +65,9 @@
<reportMetadata>
<row>
<code>fr</code>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
<segment>countryCode==fr</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</reportMetadata>
<reportTotal>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata_showRawMetrics__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata_showRawMetrics__API.getProcessedReport_day.xml
index 7b6386371b..8fac78a731 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata_showRawMetrics__API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata_showRawMetrics__API.getProcessedReport_day.xml
@@ -78,10 +78,9 @@
<reportMetadata>
<row>
<code>fr</code>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
<segment>countryCode==fr</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</reportMetadata>
<reportTotal>
diff --git a/tests/PHPUnit/System/expected/test_csvExport__Live.getLastVisitsDetails_day.csv b/tests/PHPUnit/System/expected/test_csvExport__Live.getLastVisitsDetails_day.csv
index a6d50f68e5..6f949c9790 100644
--- a/tests/PHPUnit/System/expected/test_csvExport__Live.getLastVisitsDetails_day.csv
+++ b/tests/PHPUnit/System/expected/test_csvExport__Live.getLastVisitsDetails_day.csv
Binary files differ
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml
index d931369c63..65dcc1a5e3 100755
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml
@@ -98,7 +98,7 @@
<continentCode>eur</continentCode>
<country>Poland</country>
<countryCode>pl</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/pl.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/pl.png</countryFlag>
<region />
<regionCode />
<city />
@@ -327,7 +327,7 @@
<continentCode>eur</continentCode>
<country>Poland</country>
<countryCode>pl</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/pl.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/pl.png</countryFlag>
<region />
<regionCode />
<city />
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__API.getProcessedReport_day.xml
index 4a63c7e22e..8019f8be6b 100755
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__API.getProcessedReport_day.xml
@@ -75,17 +75,15 @@
<reportMetadata>
<row>
<code>pl</code>
- <logo>plugins/UserCountry/images/flags/pl.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/pl.png</logo>
<segment>countryCode==pl</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<code>fr</code>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
<segment>countryCode==fr</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</reportMetadata>
<reportTotal>
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml
index 8504c298e6..6b870a80fd 100755
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml
@@ -181,7 +181,7 @@
<continentCode>eur</continentCode>
<country>Poland</country>
<countryCode>pl</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/pl.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/pl.png</countryFlag>
<region />
<regionCode />
<city />
@@ -537,7 +537,7 @@
<continentCode>eur</continentCode>
<country>Poland</country>
<countryCode>pl</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/pl.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/pl.png</countryFlag>
<region />
<regionCode />
<city />
@@ -775,7 +775,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__UserCountry.getCity_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__UserCountry.getCity_day.xml
index 995d52a578..1fbd1b3ea7 100755
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__UserCountry.getCity_day.xml
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__UserCountry.getCity_day.xml
@@ -40,6 +40,6 @@
<country>xx</country>
<country_name>Unknown</country_name>
<region_name>Unknown</region_name>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__UserCountry.getCountry_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__UserCountry.getCountry_day.xml
index 284c301614..c30519b3db 100755
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__UserCountry.getCountry_day.xml
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__UserCountry.getCountry_day.xml
@@ -30,10 +30,9 @@
<nb_conversions>2</nb_conversions>
<revenue>3111.11</revenue>
<code>pl</code>
- <logo>plugins/UserCountry/images/flags/pl.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/pl.png</logo>
<segment>countryCode==pl</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
<row>
<label>France</label>
@@ -54,9 +53,8 @@
<nb_conversions>1</nb_conversions>
<revenue>10</revenue>
<code>fr</code>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
<segment>countryCode==fr</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__UserCountry.getRegion_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__UserCountry.getRegion_day.xml
index 6f6499cc36..3d891a7b3e 100755
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__UserCountry.getRegion_day.xml
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__UserCountry.getRegion_day.xml
@@ -38,6 +38,6 @@
<country>xx</country>
<country_name>Unknown</country_name>
<region_name>Unknown</region_name>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html
index d0e86d01ac..549a8099a7 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html
@@ -767,7 +767,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/normal.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/normal.png'>
&nbsp;
Desktop </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -905,7 +905,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/brand/Unknown.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/brand/Unknown.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1043,7 +1043,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/WIN.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/WIN.png'>
&nbsp;
Windows XP </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1113,7 +1113,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/FF.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/FF.png'>
&nbsp;
Firefox </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1183,7 +1183,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/FF.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/FF.png'>
&nbsp;
Firefox 3.6 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1321,7 +1321,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/WIN.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/WIN.png'>
&nbsp;
Windows </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1447,7 +1447,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/cookie.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/cookie.png'>
&nbsp;
Cookie </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1460,7 +1460,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/flash.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/flash.png'>
&nbsp;
Flash </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1473,7 +1473,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/java.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/java.png'>
&nbsp;
Java </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1486,7 +1486,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/director.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/director.png'>
&nbsp;
Director </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1499,7 +1499,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/gears.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/gears.png'>
&nbsp;
Gears </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1512,7 +1512,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/pdf.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/pdf.png'>
&nbsp;
Pdf </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1525,7 +1525,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/quicktime.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/quicktime.png'>
&nbsp;
Quicktime </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1538,7 +1538,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/realplayer.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/realplayer.png'>
&nbsp;
Realplayer </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1551,7 +1551,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/silverlight.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/silverlight.png'>
&nbsp;
Silverlight </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1564,7 +1564,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/windowsmedia.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/windowsmedia.png'>
&nbsp;
Windowsmedia </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1586,7 +1586,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAJNElEQVR4nO3dwYsjWR3A8VfpnsMOOAurIDNz2MXgVZD1vKKIx4U9eV3wLiIK4lF0QYTxIIgguu4/4L+gNy/2SfGigV3WiV4Wl3FmTKpevechTjaT7iS/7e1OOsnnQ8+QpCqd19CdfPu9qk5Ta00AAJsMdj0AAGA/iAYAIEQ0AAAhogEACBENAECIaAAAQo49GobD4aobL9y05l4AcNiOPRrWGI1GGzepBwCOx7FHw2g0WnrhHw6Ha3IBAI7W6a4HsA1v/fpPS7f84Jtf2niveT0sVsX8lnltzLcu9YfyAODAHEU0/O39R13Xza/eunXr4cOH9+/fj9x3aeJh8eqsEhaXKlbtCQAH4FiWJ54uSCmNx+P5psUZgo2v9PEOUAwAHJhjiYZLmyVF5IDH+J4AsI+OYnniE1o8siEyDxHZEwD2zrFEw+3bt9dsna9QbDzNMnKkQnxPANgjRxENb3x1OH748HL3jb/2qwQADttRRMPrr72c0suXu+/6EykXtzrlEoDD1tRadz0GAGAPOHsCAAgRDQBAiGgAAEJEAwAQsvdnTzhhAW44P6SwR9b/+YD9jgbvEQU3nB9S2CMb3wnB8gRwjSQC7ItI04sGADh2wVlA0QBsibUJuJniP5v7fUwDsBe89SvccItHM6xpCNEAXC8TDHDDxY9WtjwBXCPFAIdkv2cavLEk3HxLJ3H5OYX95V0uAYAQyxMAQIhoAABCRAMAECIaAIAQ0QAAhIgGACDkQKLh7Oxs10MA1hmPx+PxeNejANbZ+GJ6INEAAFw30QAAhIgGACBENAAAIaIBAAgRDQBAiGgAAEJOdz2AK3P213/tegjASh988O+U0j8/9IsK3Fx/f/jfV19dt8PhRMOPf/XHXQ8BAPbbN15ft1X1AwAhogEACBENAECIaAAAQkQDABAiGgCAENEAAISIBgAgRDQAACGiAQAIEQ0AQIhoAABCRAMAECIaAIAQ0QAAhIgGACBENAAAIaIBAAgRDQBAiGgAAEJEAwAQIhoAgJDLRMNwOLz0432S+wIAO3Q6v7T0cj4ajbY6kEeP5hfL/F8pJaVykZdeeWWrwwOA4zMcDhd74HRx2+KGpf224c6dlFKttUkppVRrSqk2tZ6kNKjPeTweb3VgAHB8zi8OnF6436r7LGXEfNPs9llnLN144aOuUmtdvFAv0jRNyTn4CQGAS1h6TZ/ZEA1L8w1LVxezYLEblh5v6TOseqxIMcw2lVI2f7kAwKWsWm3YPNPwsVx6RaOk9GxVoqaa6spmqCmlJBoA4HqsOT7hdGm/+eXIy/9Vngrx4ovpwYM6HtecU851/tF1tcs1d7XratfVnNP9++Wdd9KzaQkA4Gotvr4vNsTKAyEjn/ESRy2sUd97r777bu3a1M1aoa1tV9u2ds/93zx6ZJ4BAK7JmsMSrnh5Yr01bVFSarqutm3K+blQeL4YZpMQDoMEgO3bEA1LR04uHQUZmWBYOp9i1V1KSic5165L81A4nw65S7lPfb/5ywIArtpH0bBqbeL87fNbljatunrhCRdLSkqDLqe7d2vXpdyn3KWua7ou5Zxm/+ec+n72YXkCALZg6VV7q8sTa5SUJm//pqQ0+0jPLpz/AAB24qZEw21nQwDAzeZdLgGAENEAAISIBgAgRDQAACGiAQAIEQ0AQIhoAABCRAMAECIaAIAQ0QAAhIgGACBENAAAIaIBAAgRDQBAiGgAAEJEAwAQIhoAgBDRAACEiAYAIEQ0AAAhogEACBENAEDI6a4HcGV+97M3dj0EYKXxeJxSunfv3q4HAqx0dna2fgczDQBAiGgAAEJEAwAQIhoAgBDRAACEiAYAIEQ0AAAhogEACBENAECIaAAAQkQDABAiGgCAENEAAISIBgAgRDQAACGiAQAIOd31AK7M9x78ftdD4Cr99Dtf2fUQAHjO4UTD6P0Pdz0EADhklicAgBDRAACEiAYAIEQ0AAAhogEACBENAECIaAAAQkQDABAiGgCAENEAAISIBgAgRDQAACGiAQAIEQ0AQIhoAABCRAMAECIaAIAQ0QAAhIgGACBENAAAIaIBAAgRDQBAyOn80nA4XNwwGo22OY7v/uIv88sll2+9fqfv++l02vd9zrlpms997YvlccrTlFMqKd2rdZvDY1dm35Zb/m4E4EKni1d2+9T8xmv3Ukq11FLq3bufqrWmlGqtpZRa660fPai5K21bu+6D7/9wh+Nka4bD4Wg0WspZAHbldM22+VP2LCbmz93zq4tP6PPgWHyKX7pjWt8lNf3nadf3tZTy5MmTWuusGJqm6fv+zvgfpZ3Wdpo+/Zl8qS+VvWOCAeBGWRcN6VkZzC4vZsFiNyzeuHjL+c9w/upHSqql9n3tS+n7OhgMZqsSg8GgzLSTMm1rnjZtWy75xQIAl/dcNJyfElj/q94V/iKYc+lL6fvS9zWXvtY6GAxqmS1N1JRSmU5rOy1t17Rte1WPCgCEfYxjGi69tBy5Y9vmUmrfl66UPteTk5NSSknpdJBKaZqmKdNp7drStk3OZhoAYPs2LE/MLa1EfKzHiExItLnkvnZ9yX3JudQFfd/XWms77du2tt3ATAMA7MK2/07DquCYtLkvJefS5dJ1/ewwhlkxlFL6vu/btrbT0k1L7sw0AMD2RWcagme+Le02Go3O33LhHSeTPCuGnPsulwtMpzV3peua3Dt74kjMv3P8tQaAm+CjaDj/jLx0S/Dqxs9zoadtm3O5/cJJn1POg9l5E7NNTdM0TXPy2bsl56bPtTfTcCxUAsCNEp1puG5Pn+a3fvvnyaR9OsmPJ+39F+62bdtNJm3ft207mUy+8PO3S/r/n4MEALbvpkTDH3759Q17vPnmNsYBAKzgDasAgBDRAACEiAYAIEQ0AAAhogEACBENAECIaAAAQkQDABAiGgCAENEAAISIBgAgRDQAACGiAQAIEQ0AQIhoAABCRAMAECIaAIAQ0QAAhIgGACBENAAAIaIBAAgRDQBAiGgAAEJOdz2AK/OTb39510MAgEN2ONHw+Zdf2vUQAOCQWZ4AAEJEAwAQIhoAgBDRAACEiAYAIEQ0AAAhogEACGlqrbseAwCwB8w0AAAhogEACBENAECIaAAAQkQDABAiGgCAENEAAISIBgAg5H80zceMyO4HeQAAAABJRU5ErkJggg=="
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAGyUlEQVR4nO3dv4scZQDH4TnZNMFKsEmKFINYWMZWRUGwMZAi+AcI1iJoYZUmgggGa7GzskhjaWGRwsYlnSA6jeE2QggGCxUirMXGcZzLzX5vb3ffnb3nqW7nx+4buN35ZOad24P5fF4BACzzVOkBAADjIBoAgIhoAAAiogEAiIgGACAiGgCAiGjYLXVdH7fwiasG9gKA9RINo9E0zdJV6gGAzRENu6Vpmt6Bv67rgVwAgK2ZlB7AWfTRF9/3lnz49otL92rroVsV7ZK2Ntq1vf5QHgCckmgo4Ke7vz969Kh9eO7cucPDw4sXLyb79k48dB8uKqF7qeK4LQFgBS5PlPFHR1VVs9msXdU9Q7D0SJ93gGIA4JREw8gskiKZ8JhvCQAJlyfGpzuzITkPkWwJAEuJhjLOnz8/sLa9QrH0NstkpkK+JQAMEA0FXH2tnh0errZvfuxXCQCsl2go4MrLl6rq0mr7Dt9I2V3rlksA1utgPp+XHgMAMALungAAIqIBAIiIBgAgIhoAgIi7J9bMDQuwId5csAXDt+uLhnXyHVGwId5csAVLv3nA5QlgBCQCbFrS4qIBAM668OydaABGxrUJWK/8PWVOAzAavrIVNqQ7m2GgIUQDMA5OMMCG5LOMXZ4ARkAxwC5wpmGdfLEkbE7vZjDvL9g+33IJAERcngAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIiGjZhOp6WHAPtpNpvNZrPSo4D9tPTgJRoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCITEoPYG9Nf/i19BBgDz148FtVVfce+g8PrN/Ph39evjy0gWjYlBuff1d6CABwMm9dGVqr1gGAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiq0RDXdcrv95p9gUACpq0P/UO503TbH0wAMAOqeu62wOT7rruit52AMCZcvTiwOSJ2x23Ty8j2lWL5YvO6C184qsCALusd0xfWBINvfMNvYfdLOh2Q+/1es9wun8FALBZx11tWPPdE65oAMCoDcxPmPS2a39ODv9rPG3QPPvSup6qiPr+7dJDAID16B7fuw1x7ETI5BnNWgCAPTMwLWGrf9xJWwDAeC2ZCNmbOdmbBZlEQO9+Ct0AACN1MJ/PS4+hqvZuTsN0Or3x5S+lBgMAq7l18+rAWt89AQBERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQGRSegCP1fdvlx4CADDEmQYAICIaAICIaAAAIqIBAIjsykTI/XPr5tXSQ4A9NJvNqqq6cOFC6YHAHppOp8MbONMAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AACRSekB7K33P/229BBIffLeq6WHADAComFTmrsPSw8BANbJ5QkAICIaAICIaAAAIqIBAIjsykTIg+evn2b3rz67du2NF1be/e+vv/nrnQ9OM4Cn7905ze4AsPucaQAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAik/anuq67K5qm2fpgoKTFW8BvPsBxJt0HPi45s+q6bpqml84AdE0G1rUfo4uYaD9P24fdD9k2OLofu70dK13CrvKbCbDUUDRU/5bB4uduFnS7obuwu+ToMxx9CACMxf+i4egpgeEDvMM/AJwdJ5jTsPLlXteJAWAPLLk80epdiTjRazghAQB7YNt/p8FZBwAYqfRMQ3g3Wm+zpmmOLjnpEGEL2t9Sf60B4Dj/RcPRT8nekvDh0ueBHeS3FGApf0YaAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKT0gN4bP7j9YKvPnnz9afv3Sk4AADYfc40AAAR0QAAREQDABARDQBAZFcmQu6fj999pfQQAGCdRMOmPHfpmdJDAIB1cnkCAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAyMF8Pi89BgBgBJxpAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAIDIP9nw7d9uAspGAAAAAElFTkSuQmCC"
height="200"
width="700"
margin="0 auto"/>
@@ -1622,7 +1622,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/pl.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/flags/pl.png' style="border: 1px solid lightgray; ">
&nbsp;
Poland </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1647,7 +1647,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/fr.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/flags/fr.png' style="border: 1px solid lightgray; ">
&nbsp;
France </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1749,7 +1749,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAHAklEQVR4nO3dP4tUVwDG4bMyNiMIwtqoJMUUlgoGtEoRULAJCPkGgYBfwT5pYyUYiFXKYGXhF0iXgfRhDCTs4AbdQtw0rnNTDHu9zv6Zd2dX7x3neYp1du4d97Ayzm/POXd2raqqAgAwz6m2BwAALAfRAABERAMAEBENAEBENAAAEdEAAEREw9EMBoOD7tz30CGPAoDlIhpOzGg0mntIPQCwvETD0YxGo5kX/sFgcEguAMAno9f2ALroh59/n7nn3rdfzH1UXQ/NqqjvqWujPjrTH8oDgI4TDfv4859Xb968qT89ffr0xsbGxYsXk8fOTDw0P51WQnOp4qAzAaCDLE/s77+GUsp4PK4PNWcI5r7S5x2gGADoONFwwqZJkWx4zM8EgC6wPHHymjsbknmI5EwAaJ1o2F+/3z/kaL1CMfcyy2SnQn4mALRINOzjzleD8cbGYo/NX/tVAgDLRTTs4+svPy/l88Uee/iFlM2jLrkEYLmsVVXV9hgAgCXg6gkAICIaAICIaAAAIqIBAIis3NUTLliAjvBkhE5pXtx30DmrFQ1+RxR0hCcjdEr4HLQ8AbRAIkB35NW+WjMNAMBe4XKhaABak6yhAh9BuFwoGoDW1P8x2dMAS8GeBgAgIhqAFjQXUIFlsXK/sMql4dARnozQHeHzceWiAQBYjOUJACAiGgCAiGgAACKiAQCIiAYAICIaAIDIikbDcDhsewhAKaWMx+PxeNz2KIBSghfHFY0GAOCoRAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAkV7bA2jNT7/+0fYQgLK9vV1KOXPm37YHwqfpu2+utj2ET8rqRsPT3/5qewgAfFii4WRZngAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgsmA0DAaDkx0HANBxvfrWYDAYjUbNY3vv6Y5Xr16VyaScmo2eyWQy/di0M5l8dulSG8MEoGV7f8rt7Etb9/Xmn9JJvV6v3++XUqrJ27J2qpRSVaWUqqr/aHj+/Hm7owWgRSrhpMxfnpg22mDXISfse9qgoXn+Qbfnfrmpyc5OKaWqqt1iqEqpNjc3nz17NjPNUHanHwCA44hmGprrFDNrFgcdmt4+5OTFvlztVK9XvX07XZ6Yzi48ffr0yZMn586d29raun//fj3NUEQDwGpr/ghq1uE4omg46Fs884oe/kvUMbH3Y/73THY3NFRVVapSlerWrVs3b958/fr19evXNzc3z58/X0fDzs5OMjAAPj1LtF2v+xbf09Du9306eVBnQT2vcO/evYcPH9bFUFVVWVsz0wAAx7f4+zRMpwdOcChHMplMdqPg3YbHR48eXbly5caNG81dkKWqRAMAHN+7aJiJgGQiYeFuaK5H7N36ENptgnfVcPny5du3b79XDLs7HgBYTd5Y6AS9tzzRjICjblA45Gjz00XHOateniiNtYkHDx7cvXt3fX29GQ3FngaAFfbhXolW0NqS/iC+tbV19uzZmT0N29vb/X5/ZqKhlDIaja5evdp8+HA4/P6Xv1sZOQAfzeMf77Q9hGUyHA6vXbt2yAnL+uZOk8nkxYsX797zcWdnOvfw8uXLve/TAAAc37JGw/r6ettDAIDV4rdcAgAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABDptT2A1jz+8U7bQwDKeDwupVy4cKHtgQDzmWkAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAImtVVbU9BgBgCZhpAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAIDI/2Rs2FWuDzeKAAAAAElFTkSuQmCC"
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAH3UlEQVR4nO3dMWiU/x3H8cegi38JwRQHPfgPJ+JYpG5SjGQuCTg4iAhCBxEHDSIdDDgUUaSjIDjo4PQnAacOYhzSyUaKW1JCh+ohhSzBFEFIOsSeTy7/XD7GJM/d5fUaJM89z+mXg3jvPL/nuexbWVkpAAA201f1AABAdxANAEBENAAAEdEAAEREAwAQEQ0AQEQ0dLd6vb7Rg7+6q82zAKA90dCz5ufnN92lHgDIiYbuNj8/3/LGX6/X2+QCAGzZ/qoHYHN/fvL3lkf+dOV3mz6rWQ/lqmg+0qyN5t6W/lAeALQQDV3gn/9e/PLlS3PzwIEDHz58OHbsWPLclhMP5c3VSigvVWx0JAAUlie6xX9LiqJoNBrNXeUzBJu+0+cdoBgAaCEaetxqUiQXPOZHArA3WZ7ofeUrG5LzEMmRAOxBoqE7HDx4sM3e5grFprdZJlcq5EcCsKeIhi4weq7e+PBha8/N3/tVAgDtiYYu8Iff/1wUP2/tue1vpCzvdcslAO3tW1lZqXoGAKALuHsCAIiIBgAgIhoAgIhoAAAi7p6omBsW4Af5JoJtUb6ZbqNjREOV/I4o+EG+iWBbhN87lieALiYR4Mflte1MAwDsdeEyn2gAul6yFgu0ES7ziQag6zX/g3NNA+wo1zQAABHRAHSx8kIssNP8wqqKucUcfpBvIvhx4feRaAAAIpYnAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAioqEjzMzMVD0CdLdGo9FoNKqeArrbpm9GogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACL7qx6Arx7/8o+qR4AutrS0VBTFTz/9p+pB6A5/PP/bqkfoSqKhU/z1b/+qegSAvUI0bI3lCQAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACL7qx6gs8zOzk5PT79//74oilqtdvbs2Xq9XvVQANARRMNXU1NTd+7cmZ6ebnn8zJkzd+/eHRoaqmQqAOgclieKoigePXo0PDy8vhiKopienh4eHn748OHuTwUAHUU0FJOTk9euXVteXt7ogOXl5bGxsSdPnuzmVADQafZ6NCwtLV2/fr1NMTTduHFjYWFhF0YCgM6016Ph2bNnq5c9rurr6xsbG3v16tXExMSlS5f6+r69PouLi/fu3atiRgDoCHs9Gp4/f17evH///oMHD4aGhkZHR58+ffr48ePy3hcvXuzudADQQfZ6NLx79675dX9//82bN8t7r1y5cuLEiebm3Nzc0tLS7g0HAJ1ki7dc1uv1+fn57R1l9y0sLBw/fry5ee7cufXHnDx5cm5urrn58eNHn9wAwN70LRrWd0BvlEEbg4ODMzMz7Y8pX/FQFMXAwMBOTgTALln/E2Bvv+VtCx/u1M7U1NTbt2+bm7VabXBwsMJ5ANhGKuF7bX5Nw2qL1f+vzQG/eli9pHz8Rl9v+s/tmjdv3oyMjJQfuXDhQlXDAEDlojMN5XWKljWLjXatft3m4K39c7tmampqZGRkcXGx+UitVrt9+/buTwLADin/aOqsQyKKho1eypZ39PAVb8bE+j+/6+/ZOZOTk+fPny9/4lN/f//ExIS1CYCesdcu49sWW7/lsldf39nZ2cuXL7cUw8uXL0+fPl3hVABQua1Hw+rpgW0cpUPcunWrvCqhGABg1bdoaImA5ETClruhvB6x/tKHCs3Pz5c/9rGvr08xAPSknvy5d6etuaahHAHfe4FCm73lza3OuUtev35d3rx48aJiAOhJXfcO1QlaL4Rc/6q1PNI8PdDmkfJmm57Y9Os2T98hLR/l1HLLJQC9RCh8r73+uydafPr0qbxZq9WqmgQAOo1PhFzj0KFDp06dam4ePny4wmEAoKOIhjXGx8fHx8erngIAOpFoWGNpaenz58/NTZ/mBABNrmlY4+rVq78pcY0MADSJBgAgIhoAgIhoAAAiLoRcY2Rk5MiRI83NgYGBCocBgI4iGtYYHR0dHR2tegoA6ESWJwCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIjsr3oAvpr4y2jVI0AXazQaRVEcPXq06kGglznTAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAET2raysVD0DANAFnGkAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgMj/AO+9UAovy7Z8AAAAAElFTkSuQmCC"
height="200"
width="700"
margin="0 auto"/>
@@ -1785,7 +1785,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/xx.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/flags/xx.png' style="border: 1px solid lightgray; ">
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1910,7 +1910,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAHAklEQVR4nO3dP4tUVwDG4bMyNiMIwtqoJMUUlgoGtEoRULAJCPkGgYBfwT5pYyUYiFXKYGXhF0iXgfRhDCTs4AbdQtw0rnNTDHu9zv6Zd2dX7x3neYp1du4d97Ayzm/POXd2raqqAgAwz6m2BwAALAfRAABERAMAEBENAEBENAAAEdEAAEREw9EMBoOD7tz30CGPAoDlIhpOzGg0mntIPQCwvETD0YxGo5kX/sFgcEguAMAno9f2ALroh59/n7nn3rdfzH1UXQ/NqqjvqWujPjrTH8oDgI4TDfv4859Xb968qT89ffr0xsbGxYsXk8fOTDw0P51WQnOp4qAzAaCDLE/s77+GUsp4PK4PNWcI5r7S5x2gGADoONFwwqZJkWx4zM8EgC6wPHHymjsbknmI5EwAaJ1o2F+/3z/kaL1CMfcyy2SnQn4mALRINOzjzleD8cbGYo/NX/tVAgDLRTTs4+svPy/l88Uee/iFlM2jLrkEYLmsVVXV9hgAgCXg6gkAICIaAICIaAAAIqIBAIis3NUTLliAjvBkhE5pXtx30DmrFQ1+RxR0hCcjdEr4HLQ8AbRAIkB35NW+WjMNAMBe4XKhaABak6yhAh9BuFwoGoDW1P8x2dMAS8GeBgAgIhqAFjQXUIFlsXK/sMql4dARnozQHeHzceWiAQBYjOUJACAiGgCAiGgAACKiAQCIiAYAICIaAIDIikbDcDhsewhAKaWMx+PxeNz2KIBSghfHFY0GAOCoRAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAkV7bA2jNT7/+0fYQgLK9vV1KOXPm37YHwqfpu2+utj2ET8rqRsPT3/5qewgAfFii4WRZngAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgsmA0DAaDkx0HANBxvfrWYDAYjUbNY3vv6Y5Xr16VyaScmo2eyWQy/di0M5l8dulSG8MEoGV7f8rt7Etb9/Xmn9JJvV6v3++XUqrJ27J2qpRSVaWUqqr/aHj+/Hm7owWgRSrhpMxfnpg22mDXISfse9qgoXn+Qbfnfrmpyc5OKaWqqt1iqEqpNjc3nz17NjPNUHanHwCA44hmGprrFDNrFgcdmt4+5OTFvlztVK9XvX07XZ6Yzi48ffr0yZMn586d29raun//fj3NUEQDwGpr/ghq1uE4omg46Fs884oe/kvUMbH3Y/73THY3NFRVVapSlerWrVs3b958/fr19evXNzc3z58/X0fDzs5OMjAAPj1LtF2v+xbf09Du9306eVBnQT2vcO/evYcPH9bFUFVVWVsz0wAAx7f4+zRMpwdOcChHMplMdqPg3YbHR48eXbly5caNG81dkKWqRAMAHN+7aJiJgGQiYeFuaK5H7N36ENptgnfVcPny5du3b79XDLs7HgBYTd5Y6AS9tzzRjICjblA45Gjz00XHOateniiNtYkHDx7cvXt3fX29GQ3FngaAFfbhXolW0NqS/iC+tbV19uzZmT0N29vb/X5/ZqKhlDIaja5evdp8+HA4/P6Xv1sZOQAfzeMf77Q9hGUyHA6vXbt2yAnL+uZOk8nkxYsX797zcWdnOvfw8uXLve/TAAAc37JGw/r6ettDAIDV4rdcAgAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABDptT2A1jz+8U7bQwDKeDwupVy4cKHtgQDzmWkAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAImtVVbU9BgBgCZhpAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAIDI/2Rs2FWuDzeKAAAAAElFTkSuQmCC"
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAH3UlEQVR4nO3dMWiU/x3H8cegi38JwRQHPfgPJ+JYpG5SjGQuCTg4iAhCBxEHDSIdDDgUUaSjIDjo4PQnAacOYhzSyUaKW1JCh+ohhSzBFEFIOsSeTy7/XD7GJM/d5fUaJM89z+mXg3jvPL/nuexbWVkpAAA201f1AABAdxANAEBENAAAEdEAAEREAwAQEQ0AQEQ0dLd6vb7Rg7+6q82zAKA90dCz5ufnN92lHgDIiYbuNj8/3/LGX6/X2+QCAGzZ/qoHYHN/fvL3lkf+dOV3mz6rWQ/lqmg+0qyN5t6W/lAeALQQDV3gn/9e/PLlS3PzwIEDHz58OHbsWPLclhMP5c3VSigvVWx0JAAUlie6xX9LiqJoNBrNXeUzBJu+0+cdoBgAaCEaetxqUiQXPOZHArA3WZ7ofeUrG5LzEMmRAOxBoqE7HDx4sM3e5grFprdZJlcq5EcCsKeIhi4weq7e+PBha8/N3/tVAgDtiYYu8Iff/1wUP2/tue1vpCzvdcslAO3tW1lZqXoGAKALuHsCAIiIBgAgIhoAgIhoAAAi7p6omBsW4Af5JoJtUb6ZbqNjREOV/I4o+EG+iWBbhN87lieALiYR4Mflte1MAwDsdeEyn2gAul6yFgu0ES7ziQag6zX/g3NNA+wo1zQAABHRAHSx8kIssNP8wqqKucUcfpBvIvhx4feRaAAAIpYnAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAioqEjzMzMVD0CdLdGo9FoNKqeArrbpm9GogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACL7qx6Arx7/8o+qR4AutrS0VBTFTz/9p+pB6A5/PP/bqkfoSqKhU/z1b/+qegSAvUI0bI3lCQAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACL7qx6gs8zOzk5PT79//74oilqtdvbs2Xq9XvVQANARRMNXU1NTd+7cmZ6ebnn8zJkzd+/eHRoaqmQqAOgclieKoigePXo0PDy8vhiKopienh4eHn748OHuTwUAHUU0FJOTk9euXVteXt7ogOXl5bGxsSdPnuzmVADQafZ6NCwtLV2/fr1NMTTduHFjYWFhF0YCgM6016Ph2bNnq5c9rurr6xsbG3v16tXExMSlS5f6+r69PouLi/fu3atiRgDoCHs9Gp4/f17evH///oMHD4aGhkZHR58+ffr48ePy3hcvXuzudADQQfZ6NLx79675dX9//82bN8t7r1y5cuLEiebm3Nzc0tLS7g0HAJ1ki7dc1uv1+fn57R1l9y0sLBw/fry5ee7cufXHnDx5cm5urrn58eNHn9wAwN70LRrWd0BvlEEbg4ODMzMz7Y8pX/FQFMXAwMBOTgTALln/E2Bvv+VtCx/u1M7U1NTbt2+bm7VabXBwsMJ5ANhGKuF7bX5Nw2qL1f+vzQG/eli9pHz8Rl9v+s/tmjdv3oyMjJQfuXDhQlXDAEDlojMN5XWKljWLjXatft3m4K39c7tmampqZGRkcXGx+UitVrt9+/buTwLADin/aOqsQyKKho1eypZ39PAVb8bE+j+/6+/ZOZOTk+fPny9/4lN/f//ExIS1CYCesdcu49sWW7/lsldf39nZ2cuXL7cUw8uXL0+fPl3hVABQua1Hw+rpgW0cpUPcunWrvCqhGABg1bdoaImA5ETClruhvB6x/tKHCs3Pz5c/9rGvr08xAPSknvy5d6etuaahHAHfe4FCm73lza3OuUtev35d3rx48aJiAOhJXfcO1QlaL4Rc/6q1PNI8PdDmkfJmm57Y9Os2T98hLR/l1HLLJQC9RCh8r73+uydafPr0qbxZq9WqmgQAOo1PhFzj0KFDp06dam4ePny4wmEAoKOIhjXGx8fHx8erngIAOpFoWGNpaenz58/NTZ/mBABNrmlY4+rVq78pcY0MADSJBgAgIhoAgIhoAAAiLoRcY2Rk5MiRI83NgYGBCocBgI4iGtYYHR0dHR2tegoA6ESWJwCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIjsr3oAvpr4y2jVI0AXazQaRVEcPXq06kGglznTAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAET2raysVD0DANAFnGkAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgMj/AO+9UAovy7Z8AAAAAElFTkSuQmCC"
height="200"
width="700"
margin="0 auto"/>
@@ -1946,7 +1946,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/xx.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/flags/xx.png' style="border: 1px solid lightgray; ">
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
index e4e55f4bc1..f9f4d5404a 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
@@ -739,7 +739,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/normal.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/screens/normal.png'>
&nbsp;
Desktop </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -863,7 +863,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/brand/Unknown.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/DevicesDetection/images/brand/Unknown.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -987,7 +987,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/WIN.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/WIN.png'>
&nbsp;
Windows XP </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1050,7 +1050,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/FF.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/FF.png'>
&nbsp;
Firefox </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1113,7 +1113,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/FF.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/browsers/FF.png'>
&nbsp;
Firefox 3.6 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1237,7 +1237,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/WIN.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/os/WIN.png'>
&nbsp;
Windows </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1349,7 +1349,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/cookie.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/cookie.png'>
&nbsp;
Cookie </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1362,7 +1362,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/flash.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/flash.png'>
&nbsp;
Flash </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1375,7 +1375,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/java.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/java.png'>
&nbsp;
Java </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1388,7 +1388,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/director.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/director.png'>
&nbsp;
Director </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1401,7 +1401,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/gears.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/gears.png'>
&nbsp;
Gears </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1414,7 +1414,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/pdf.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/pdf.png'>
&nbsp;
Pdf </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1427,7 +1427,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/quicktime.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/quicktime.png'>
&nbsp;
Quicktime </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1440,7 +1440,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/realplayer.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/realplayer.png'>
&nbsp;
Realplayer </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1453,7 +1453,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/silverlight.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/silverlight.png'>
&nbsp;
Silverlight </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1466,7 +1466,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/windowsmedia.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/plugins/windowsmedia.png'>
&nbsp;
Windowsmedia </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1517,7 +1517,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/pl.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/flags/pl.png' style="border: 1px solid lightgray; ">
&nbsp;
Poland </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1542,7 +1542,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/fr.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/flags/fr.png' style="border: 1px solid lightgray; ">
&nbsp;
France </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1666,7 +1666,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/xx.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/flags/xx.png' style="border: 1px solid lightgray; ">
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
@@ -1813,7 +1813,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img width="16px" height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/UserCountry/images/flags/xx.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/flags/xx.png' style="border: 1px solid lightgray; ">
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdf b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdf
index 8bf8259f0d..a22fba16e5 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdf
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdf
Binary files differ
diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__UserCountry.getCountry_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__UserCountry.getCountry_range.xml
index 1e511f6135..c807579102 100644
--- a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__UserCountry.getCountry_range.xml
+++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__UserCountry.getCountry_range.xml
@@ -11,9 +11,8 @@
<sum_daily_nb_uniq_visitors>4</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>fr</code>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
<segment>countryCode==fr</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__API.getProcessedReport_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__API.getProcessedReport_range.xml
index f01ce588fb..fc0189404c 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__API.getProcessedReport_range.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__API.getProcessedReport_range.xml
@@ -62,10 +62,9 @@
<reportMetadata>
<row>
<code>fr</code>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
<segment>countryCode==fr</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</reportMetadata>
<reportTotal>
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml
index de354fdde7..26352512c9 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml
@@ -72,7 +72,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -109,10 +109,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -199,7 +199,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -236,10 +236,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -387,7 +387,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -428,10 +428,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml
index de354fdde7..26352512c9 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml
@@ -72,7 +72,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -109,10 +109,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -199,7 +199,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -236,10 +236,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -387,7 +387,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -428,10 +428,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml
index d9f537271f..7cae27dd3a 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml
@@ -30,7 +30,7 @@
<row>
<country>fr</country>
<nb_visits>2</nb_visits>
- <flag>plugins/UserCountry/images/flags/fr.png</flag>
+ <flag>plugins/Morpheus/icons/dist/flags/fr.png</flag>
<prettyName>France</prettyName>
</row>
</countries>
@@ -123,7 +123,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -160,10 +160,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -250,7 +250,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -287,10 +287,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__API.getProcessedReport_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__API.getProcessedReport_range.xml
index f01ce588fb..fc0189404c 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__API.getProcessedReport_range.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__API.getProcessedReport_range.xml
@@ -62,10 +62,9 @@
<reportMetadata>
<row>
<code>fr</code>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
<segment>countryCode==fr</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</reportMetadata>
<reportTotal>
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml
index de354fdde7..26352512c9 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml
@@ -72,7 +72,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -109,10 +109,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -199,7 +199,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -236,10 +236,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -387,7 +387,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -428,10 +428,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml
index de354fdde7..26352512c9 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml
@@ -72,7 +72,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -109,10 +109,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -199,7 +199,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -236,10 +236,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -387,7 +387,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -428,10 +428,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml
index d9f537271f..7cae27dd3a 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml
@@ -30,7 +30,7 @@
<row>
<country>fr</country>
<nb_visits>2</nb_visits>
- <flag>plugins/UserCountry/images/flags/fr.png</flag>
+ <flag>plugins/Morpheus/icons/dist/flags/fr.png</flag>
<prettyName>France</prettyName>
</row>
</countries>
@@ -123,7 +123,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -160,10 +160,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
@@ -250,7 +250,7 @@
<continentCode>eur</continentCode>
<country>France</country>
<countryCode>fr</countryCode>
- <countryFlag>plugins/UserCountry/images/flags/fr.png</countryFlag>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/fr.png</countryFlag>
<region />
<regionCode />
<city />
@@ -287,10 +287,10 @@
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
<totalEcommerceConversions>0</totalEcommerceConversions>
<totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
<totalAbandonedCarts>0</totalAbandonedCarts>
<totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getCity_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getCity_day.xml
index 171e7338ad..57ad67177d 100644
--- a/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getCity_day.xml
+++ b/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getCity_day.xml
@@ -16,7 +16,7 @@
<country>au</country>
<country_name>Australia</country_name>
<region_name>Victoria</region_name>
- <logo>plugins/UserCountry/images/flags/au.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/au.png</logo>
</row>
<row>
<label>Nice, Provence-Alpes-Cote d'Azur, France</label>
@@ -34,7 +34,7 @@
<country>fr</country>
<country_name>France</country_name>
<region_name>Provence-Alpes-Cote d'Azur</region_name>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
</row>
<row>
<label>Others</label>
@@ -46,6 +46,6 @@
<sum_visit_length>0</sum_visit_length>
<bounce_count>35</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getRegion_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getRegion_day.xml
index cc6727dc54..7c39516a86 100644
--- a/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getRegion_day.xml
+++ b/tests/PHPUnit/System/expected/test_reportLimiting__UserCountry.getRegion_day.xml
@@ -15,7 +15,7 @@
<country>fr</country>
<country_name>France</country_name>
<region_name>Provence-Alpes-Cote d'Azur</region_name>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
</row>
<row>
<label>Victoria, Australia</label>
@@ -32,7 +32,7 @@
<country>au</country>
<country_name>Australia</country_name>
<region_name>Victoria</region_name>
- <logo>plugins/UserCountry/images/flags/au.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/au.png</logo>
</row>
<row>
<label>Others</label>
@@ -44,6 +44,6 @@
<sum_visit_length>0</sum_visit_length>
<bounce_count>35</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getReferrerType_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getReferrerType_day.xml
index 2f781c0adb..e8636937d0 100644
--- a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getReferrerType_day.xml
+++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__Referrers.getReferrerType_day.xml
@@ -14,68 +14,26 @@
</row>
<row>
<label>Search Engines</label>
- <nb_uniq_visitors>7</nb_uniq_visitors>
- <nb_visits>7</nb_visits>
- <nb_actions>7</nb_actions>
- <nb_users>0</nb_users>
- <max_actions>1</max_actions>
- <sum_visit_length>0</sum_visit_length>
- <bounce_count>7</bounce_count>
- <nb_visits_converted>0</nb_visits_converted>
- </row>
- <row>
- <label>Websites</label>
- <nb_uniq_visitors>3</nb_uniq_visitors>
- <nb_visits>4</nb_visits>
- <nb_actions>4</nb_actions>
- <nb_users>0</nb_users>
- <max_actions>1</max_actions>
- <sum_visit_length>0</sum_visit_length>
- <bounce_count>4</bounce_count>
- <nb_visits_converted>0</nb_visits_converted>
- </row>
- <row>
- <label>Search Engines</label>
- <nb_uniq_visitors>3</nb_uniq_visitors>
- <nb_visits>3</nb_visits>
- <nb_actions>3</nb_actions>
+ <nb_uniq_visitors>12</nb_uniq_visitors>
+ <nb_visits>12</nb_visits>
+ <nb_actions>12</nb_actions>
<nb_users>0</nb_users>
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
- <bounce_count>3</bounce_count>
- <nb_visits_converted>0</nb_visits_converted>
- </row>
- <row>
- <label>Search Engines</label>
- <nb_uniq_visitors>2</nb_uniq_visitors>
- <nb_visits>2</nb_visits>
- <nb_actions>2</nb_actions>
- <nb_users>0</nb_users>
- <max_actions>1</max_actions>
- <sum_visit_length>0</sum_visit_length>
- <bounce_count>2</bounce_count>
+ <bounce_count>12</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
+ <segment>referrerType==search</segment>
</row>
<row>
<label>Websites</label>
- <nb_uniq_visitors>2</nb_uniq_visitors>
- <nb_visits>2</nb_visits>
- <nb_actions>2</nb_actions>
- <nb_users>0</nb_users>
- <max_actions>1</max_actions>
- <sum_visit_length>0</sum_visit_length>
- <bounce_count>2</bounce_count>
- <nb_visits_converted>0</nb_visits_converted>
- </row>
- <row>
- <label>Websites</label>
- <nb_uniq_visitors>2</nb_uniq_visitors>
- <nb_visits>2</nb_visits>
- <nb_actions>2</nb_actions>
+ <nb_uniq_visitors>7</nb_uniq_visitors>
+ <nb_visits>8</nb_visits>
+ <nb_actions>8</nb_actions>
<nb_users>0</nb_users>
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
- <bounce_count>2</bounce_count>
+ <bounce_count>8</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
+ <segment>referrerType==website</segment>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getCity_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getCity_day.xml
index ff7ba019b4..d260f831b8 100644
--- a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getCity_day.xml
+++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getCity_day.xml
@@ -10,7 +10,7 @@
<sum_visit_length>0</sum_visit_length>
<bounce_count>35</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
<row>
<label>Melbourne, Victoria, Australia</label>
@@ -28,7 +28,7 @@
<country>au</country>
<country_name>Australia</country_name>
<region_name>Victoria</region_name>
- <logo>plugins/UserCountry/images/flags/au.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/au.png</logo>
</row>
<row>
<label>Nice, Provence-Alpes-Cote d'Azur, France</label>
@@ -46,6 +46,6 @@
<country>fr</country>
<country_name>France</country_name>
<region_name>Provence-Alpes-Cote d'Azur</region_name>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getRegion_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getRegion_day.xml
index 4680c84581..5d1560212f 100644
--- a/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getRegion_day.xml
+++ b/tests/PHPUnit/System/expected/test_reportLimiting_flattened__UserCountry.getRegion_day.xml
@@ -10,7 +10,7 @@
<sum_visit_length>0</sum_visit_length>
<bounce_count>35</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
<row>
<label>Provence-Alpes-Cote d'Azur, France</label>
@@ -27,7 +27,7 @@
<country>fr</country>
<country_name>France</country_name>
<region_name>Provence-Alpes-Cote d'Azur</region_name>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
</row>
<row>
<label>Victoria, Australia</label>
@@ -44,6 +44,6 @@
<country>au</country>
<country_name>Australia</country_name>
<region_name>Victoria</region_name>
- <logo>plugins/UserCountry/images/flags/au.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/au.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserCountry.getCity_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserCountry.getCity_day.xml
index 171e7338ad..57ad67177d 100644
--- a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserCountry.getCity_day.xml
+++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserCountry.getCity_day.xml
@@ -16,7 +16,7 @@
<country>au</country>
<country_name>Australia</country_name>
<region_name>Victoria</region_name>
- <logo>plugins/UserCountry/images/flags/au.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/au.png</logo>
</row>
<row>
<label>Nice, Provence-Alpes-Cote d'Azur, France</label>
@@ -34,7 +34,7 @@
<country>fr</country>
<country_name>France</country_name>
<region_name>Provence-Alpes-Cote d'Azur</region_name>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
</row>
<row>
<label>Others</label>
@@ -46,6 +46,6 @@
<sum_visit_length>0</sum_visit_length>
<bounce_count>35</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserCountry.getRegion_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserCountry.getRegion_day.xml
index cc6727dc54..7c39516a86 100644
--- a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserCountry.getRegion_day.xml
+++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserCountry.getRegion_day.xml
@@ -15,7 +15,7 @@
<country>fr</country>
<country_name>France</country_name>
<region_name>Provence-Alpes-Cote d'Azur</region_name>
- <logo>plugins/UserCountry/images/flags/fr.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
</row>
<row>
<label>Victoria, Australia</label>
@@ -32,7 +32,7 @@
<country>au</country>
<country_name>Australia</country_name>
<region_name>Victoria</region_name>
- <logo>plugins/UserCountry/images/flags/au.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/au.png</logo>
</row>
<row>
<label>Others</label>
@@ -44,6 +44,6 @@
<sum_visit_length>0</sum_visit_length>
<bounce_count>35</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
- <logo>plugins/UserCountry/images/flags/xx.png</logo>
+ <logo>plugins/Morpheus/icons/dist/flags/xx.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/tests/UI/expected-screenshots/ActionsDataTable_segmented_visitor_log.png b/tests/UI/expected-screenshots/ActionsDataTable_segmented_visitor_log.png
index 25de05506d..fc3b19e165 100644
--- a/tests/UI/expected-screenshots/ActionsDataTable_segmented_visitor_log.png
+++ b/tests/UI/expected-screenshots/ActionsDataTable_segmented_visitor_log.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:841bc41ed9926768f1cca3f13f4bf7b9b3270d1da3e626805793f585a410d69c
-size 467099
+oid sha256:b3c4e5fd742348492ca86f4409f9cbf9371221cd2d7198919e22ac72501fb49f
+size 467356
diff --git a/tests/UI/expected-screenshots/CoreUpdaterCode_httpUpdateSuccess.png b/tests/UI/expected-screenshots/CoreUpdaterCode_httpUpdateSuccess.png
index d8f616e021..ab15352f32 100644
--- a/tests/UI/expected-screenshots/CoreUpdaterCode_httpUpdateSuccess.png
+++ b/tests/UI/expected-screenshots/CoreUpdaterCode_httpUpdateSuccess.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9a6ac1c08cf9741c75912f738644f22eac1dd733fba90b11337b1c9d458b3548
-size 56883
+oid sha256:6db8ea812b4c025d3c5f3c3b6841b6fa7e0ffc53c9f15bcf3bf08c1c935cc444
+size 55769
diff --git a/tests/UI/expected-screenshots/CoreUpdaterCode_httpsUpdateFail.png b/tests/UI/expected-screenshots/CoreUpdaterCode_httpsUpdateFail.png
index f2c309a950..ca41c0251f 100644
--- a/tests/UI/expected-screenshots/CoreUpdaterCode_httpsUpdateFail.png
+++ b/tests/UI/expected-screenshots/CoreUpdaterCode_httpsUpdateFail.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:fb41825f8b99e30f19d10f3835d0d8579e9d3e731aad5c6023865cf7dfbbfb29
-size 99028
+oid sha256:a15a4cc2c2eef49d326e3c3ab8e879e16b15f3db8e3703b53337fad7d8baa92d
+size 98232
diff --git a/tests/UI/expected-screenshots/CoreUpdaterCode_newVersion.png b/tests/UI/expected-screenshots/CoreUpdaterCode_newVersion.png
index c8bcd22ae5..864db2b917 100644
--- a/tests/UI/expected-screenshots/CoreUpdaterCode_newVersion.png
+++ b/tests/UI/expected-screenshots/CoreUpdaterCode_newVersion.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c8bb4b50b39944cd1c0cf8b5a282c8ec4ec8223d4e760ee79c333225bfb1ca04
-size 106399
+oid sha256:dc0381732a8de0a1dda12ed8d021f4526a71ad2c750faf3bfa7d8c4847b954c3
+size 105284
diff --git a/tests/UI/expected-screenshots/CoreUpdaterDb_main.png b/tests/UI/expected-screenshots/CoreUpdaterDb_main.png
index e2330d0dd6..fa6f940efc 100644
--- a/tests/UI/expected-screenshots/CoreUpdaterDb_main.png
+++ b/tests/UI/expected-screenshots/CoreUpdaterDb_main.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8561ee39fc47919209492fa0ff7d19913fddc0c47bcece0c87f956487e1a2e4a
-size 289021
+oid sha256:a4d34bec02cb09474bc37a7a5849088066390febec6a344cd10eb483627559c7
+size 287997
diff --git a/tests/UI/expected-screenshots/CoreUpdaterDb_updated.png b/tests/UI/expected-screenshots/CoreUpdaterDb_updated.png
index b855411727..26ea1cda48 100644
--- a/tests/UI/expected-screenshots/CoreUpdaterDb_updated.png
+++ b/tests/UI/expected-screenshots/CoreUpdaterDb_updated.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:03c097db06daa76df4c9bc9eab062b3830c49364898467ff0d5c3db920efef28
-size 76446
+oid sha256:0f26afe60c3accd1cf614fcb9dcb786230d86fa8372e76d664a359ff939798eb
+size 75501
diff --git a/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard.png b/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard.png
index 0ec9b44b84..6433c2ab72 100644
--- a/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard.png
+++ b/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ce3bd400dcd3586fe1874141e386997bc4d3983f73a94beb58e2e43fb76ffbed
-size 178968
+oid sha256:e2c131f981a3d5ac09c7f035a3f855bc35f4e7ec9bf3083c475df5a770ce90f5
+size 217051
diff --git a/tests/UI/expected-screenshots/Installation_js_tracking.png b/tests/UI/expected-screenshots/Installation_js_tracking.png
index f763bd2c8a..1c80945c89 100644
--- a/tests/UI/expected-screenshots/Installation_js_tracking.png
+++ b/tests/UI/expected-screenshots/Installation_js_tracking.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3fcce42eb580e158fd1eac73e2146360a33594e65f5d925e561698b07f38dc3d
-size 192902
+oid sha256:83be8b2ff81e007f67f2f3339ba1ca9bb2c6fd0b3761382a5078bf69c9e4cde9
+size 222090
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png
index 2e905c2a38..fbdf7fa122 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a12c91b95c462b640e045f226c3473932892b5a92bd190ae312672650e785e23
-size 1448761
+oid sha256:06c191f3c60d5aaa5eefe76269763bdcfa1ee4a71c47a6a1514e095a5421993d
+size 1446632
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png
index bb577a268a..93b6f70d28 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4fdde96d9eee84ebfe9a93d386eda2a5f653cd9c715ed1ab71d929a9d8e64c56
-size 428222
+oid sha256:7e8bac31646c54e6bf3addbe0286b6f16245a83e3a09558a07d1289cabb27e06
+size 428512
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_db_connect_error.png b/tests/UI/expected-screenshots/UIIntegrationTest_db_connect_error.png
index 4f97756072..89d6568b78 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_db_connect_error.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_db_connect_error.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:227d0ade8b369c8337609b40585164ab90f219b8e6ecc5983a6f2356ae7390c9
-size 75520
+oid sha256:e6506ebd66b5a115207ebfadc7ebee42ce1070a12675260b97fa86c483403923
+size 74504
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png
index df0c907d9d..b933377013 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d94c2d36cb25289fb20e1f7777d6dc7b5eebe7413b248e04216e8ffc63ae8b6f
-size 453380
+oid sha256:06f016ae54dce5d636a6b03b2ec4a82742b99f25135ac01014e3e1522ede4612
+size 451177
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal.png b/tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal.png
index 656b7c6d7f..5f55bcaab9 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f28635c160528c866556db17a448e1f54eaee804352bbf42a10a9b1160b20b09
-size 196505
+oid sha256:769f6bb2140bf6270a41321fa32b60d26f9822cfa446701e3671c8cca6c1ee41
+size 196103
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal_updated.png b/tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal_updated.png
index 4f81381671..9ddd0328ec 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal_updated.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_goals_individual_goal_updated.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b6d32e848ad796b951e76b59c60dcb116c2a696e87e4b1e461a38543ee503496
-size 197006
+oid sha256:e61cfc01c7af201b6d2d707a2a5e238a557ecc8fd8267551f1ff2da2b6e675ce
+size 196603
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_metric_tooltip.png b/tests/UI/expected-screenshots/UIIntegrationTest_metric_tooltip.png
index ace02fe4d0..0bf02f7209 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_metric_tooltip.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_metric_tooltip.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c133c0a47fe8139277d12e0fd82a5145d84a22d6bfeeff18b4cde7a0e8316b04
-size 168821
+oid sha256:d8ff715f995e7e109653c1c2a774d1ffd0219c5db50c8ac797fac07383c756d6
+size 168384
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png b/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png
index 4150fa7089..0a4d512277 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e7de59d3457826bbd15039bfd7c35e6a322120db89edcb9bebc2b43df45cc9dd
-size 803484
+oid sha256:feda268a7117f452cba4eb695cdc39abd5b7068597d7c2ce3a7eeee797f592e6
+size 804380
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png
index 6e8da54c2d..833931cb7b 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f06ec8e680da552dc576ab6ae148991cc106104b42a9aff89a3cfd6ed2a27879
-size 228716
+oid sha256:6571be1d79e9e8180ebb82f521698e85bb34f2cde8aeaae490ce45d82ce5dfb4
+size 228752
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_locations_provider.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_locations_provider.png
index baf870442f..e14182cff4 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_locations_provider.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_locations_provider.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3fc03e1db0efa7bb2008094f68c7a7617b09694a290aec95c5c244e0328bed34
-size 173561
+oid sha256:154e7aa39b4891cf54a1b8639fc856d8c9b966b5bb3f933d7ff499542bee2db4
+size 172904
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png
index daf33b8ea8..5db9932c1c 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8097dd425997c11934e909e050768f1131dea60f19c725a5c9aa295e6a6f6f3b
-size 113271
+oid sha256:d98e92f3427f99f5057ab30a68b82ee69f5790cb0860643ca8673ea99b406bbb
+size 113148
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_with_site_search_visitorlog.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_with_site_search_visitorlog.png
index f5b1096d43..e0428c4d74 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_with_site_search_visitorlog.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_with_site_search_visitorlog.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:bb7d254aa2b3a60ad890d54b2f1686c1f9805e824c6c35e3f0ae7ff66eaa5eb5
-size 110260
+oid sha256:658893bddff5b10cd8d9a52300b7854bbee6b72dc4bdc3b832049cbc2b196791
+size 109515
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_apidisallowed.png b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_apidisallowed.png
index 7d3579d52f..8f779e9914 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_apidisallowed.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_apidisallowed.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ac2b019ed247ac357c2cda8f7009c14c2add84e366084390e039342dafecc077
-size 51963
+oid sha256:750c30bb164fe68397b877d7556d4a8db53d9f3bacd3adc1fa14d0281f679677
+size 51089
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png
index f87692ce69..17240d640a 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1d6fbe98fbae04f3186b86acd70e269badabd1cfe8e818fe3e628a1e44571629
-size 448495
+oid sha256:e65a25e2cb17caa1c0ceb8e3a2466491e270d2c0a26c24322b6e9572fe01324d
+size 445631
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png
index 454685d2df..9510f82db0 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:924d507d83b7d46da6fd2e6d6e2f4a57cc4f125915b9358d552cf414b7393974
-size 631447
+oid sha256:a82901cf3a852302466e14f1d022c94e083eb698733a6b1b548a442058f0a231
+size 633000