summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTriatmoko2011-11-18 13:23:49 +0100
committerTriatmoko2011-11-18 13:23:49 +0100
commitb99193ba68f947802245a288940e54904ecbee61 (patch)
treedd28de19b823a1b18722c98bebec81c3a8d8e6a1
parentnagios function fully working (diff)
downloadgsm-selftest-b99193ba68f947802245a288940e54904ecbee61.tar.gz
gsm-selftest-b99193ba68f947802245a288940e54904ecbee61.tar.xz
gsm-selftest-b99193ba68f947802245a288940e54904ecbee61.zip
final version
-rw-r--r--[-rwxr-xr-x]Code/Server-Code/ClientClass.py0
-rw-r--r--[-rwxr-xr-x]Code/Server-Code/ControllerClass.py59
-rw-r--r--[-rwxr-xr-x]Code/Server-Code/DbClass.py15
-rw-r--r--Code/Server-Code/GSMHandler.py103
-rw-r--r--[-rwxr-xr-x]Code/Server-Code/LogFileClass.py0
-rw-r--r--[-rwxr-xr-x]Code/Server-Code/PingClass.py0
-rw-r--r--[-rwxr-xr-x]Code/Server-Code/SIPHandler.py138
-rw-r--r--[-rwxr-xr-x]Code/Server-Code/SSHTunnelBoxClass.py0
-rw-r--r--[-rwxr-xr-x]Code/Server-Code/ServerClass.py0
-rw-r--r--[-rwxr-xr-x]Code/Server-Code/gsmselftest.py81
-rw-r--r--Code/Server-Code/handler.txt (renamed from Under-Testing/Server-Code-New/handler.txt)0
-rw-r--r--[-rwxr-xr-x]Code/Server-Code/help.txt1
-rw-r--r--[-rwxr-xr-x]Code/Server-Code/initTestClass.py3
-rw-r--r--[-rwxr-xr-x]Code/Server-Code/startSoftware.py10
-rw-r--r--[-rwxr-xr-x]Code/Server-Code/truthtableClass.py80
-rw-r--r--[-rwxr-xr-x]Code/Server-Code/usbDetectClass.py0
-rw-r--r--Under-Testing/Box1-Code/GSMClass.py303
-rw-r--r--Under-Testing/Box1-Code/LogFileClass.py21
-rw-r--r--Under-Testing/Box1-Code/READ ME.txt19
-rw-r--r--Under-Testing/Box1-Code/ServerClass.py162
-rw-r--r--Under-Testing/Box1-Code/serverHandler.py341
-rw-r--r--Under-Testing/Box2-Code/GSMClass.py303
-rw-r--r--Under-Testing/Box2-Code/LogFileClass.py21
-rw-r--r--Under-Testing/Box2-Code/READ ME.txt20
-rw-r--r--Under-Testing/Box2-Code/ServerClass.py162
-rw-r--r--Under-Testing/Box2-Code/serverHandler.py344
-rw-r--r--Under-Testing/ReadMe.txt61
-rw-r--r--Under-Testing/Server-Code-New/.DS_Storebin6148 -> 0 bytes
-rw-r--r--Under-Testing/Server-Code-New/._.DS_Storebin4096 -> 0 bytes
-rw-r--r--Under-Testing/Server-Code-New/._handler.txtbin4096 -> 0 bytes
-rw-r--r--Under-Testing/Server-Code-New/ClientClass.py123
-rw-r--r--Under-Testing/Server-Code-New/ControllerClass.py361
-rw-r--r--Under-Testing/Server-Code-New/DbClass.py445
-rw-r--r--Under-Testing/Server-Code-New/GSMClass.py310
-rw-r--r--Under-Testing/Server-Code-New/GSMHandler.py372
-rw-r--r--Under-Testing/Server-Code-New/LogFileClass.py21
-rw-r--r--Under-Testing/Server-Code-New/PingClass.py28
-rw-r--r--Under-Testing/Server-Code-New/READ ME.txt55
-rw-r--r--Under-Testing/Server-Code-New/SIPHandler.py272
-rw-r--r--Under-Testing/Server-Code-New/SSHTunnelBoxClass.py44
-rw-r--r--Under-Testing/Server-Code-New/ServerClass.py152
-rw-r--r--Under-Testing/Server-Code-New/WebsiteCommClass.py162
-rw-r--r--Under-Testing/Server-Code-New/gsmselftest.py795
-rw-r--r--Under-Testing/Server-Code-New/help.txt18
-rw-r--r--Under-Testing/Server-Code-New/initTestClass.py122
-rw-r--r--Under-Testing/Server-Code-New/startSoftware.py21
-rw-r--r--Under-Testing/Server-Code-New/truthtableClass.py233
-rw-r--r--Under-Testing/Server-Code-New/usbDetectClass.py96
-rw-r--r--Under-Testing/Website/Images/AutoIcon.pngbin6470 -> 0 bytes
-rw-r--r--Under-Testing/Website/Images/BackGround.jpgbin156368 -> 0 bytes
-rw-r--r--Under-Testing/Website/Images/BackgroundLogin.pngbin88100 -> 0 bytes
-rw-r--r--Under-Testing/Website/Images/CheckAllButton.pngbin5425 -> 0 bytes
-rw-r--r--Under-Testing/Website/Images/ChooseIcon.pngbin12477 -> 0 bytes
-rw-r--r--Under-Testing/Website/Images/GSMTestButton.pngbin5563 -> 0 bytes
-rw-r--r--Under-Testing/Website/Images/ManualIcon.pngbin6787 -> 0 bytes
-rw-r--r--Under-Testing/Website/Images/MobilePhone.pngbin45698 -> 0 bytes
-rw-r--r--Under-Testing/Website/Images/MobilePhoneIcon.pngbin13814 -> 0 bytes
-rw-r--r--Under-Testing/Website/Images/SIPTestButton.pngbin5300 -> 0 bytes
-rw-r--r--Under-Testing/Website/Images/SmartIcon.pngbin11983 -> 0 bytes
-rw-r--r--Under-Testing/Website/Images/SubmitButton.pngbin5364 -> 0 bytes
-rw-r--r--Under-Testing/Website/Images/UncheckButton.pngbin5575 -> 0 bytes
-rw-r--r--Under-Testing/Website/Images/border1.pngbin2950 -> 0 bytes
-rw-r--r--Under-Testing/Website/TaskTest.html453
-rw-r--r--Under-Testing/Website/about.html49
-rw-r--r--Under-Testing/Website/class/pBarcode128.class.php184
-rw-r--r--Under-Testing/Website/class/pBarcode39.class.php200
-rw-r--r--Under-Testing/Website/class/pBubble.class.php283
-rw-r--r--Under-Testing/Website/class/pCache.class.php280
-rw-r--r--Under-Testing/Website/class/pData.class.php723
-rw-r--r--Under-Testing/Website/class/pDraw.class.php5799
-rw-r--r--Under-Testing/Website/class/pImage.class.php343
-rw-r--r--Under-Testing/Website/class/pIndicator.class.php241
-rw-r--r--Under-Testing/Website/class/pPie.class.php1493
-rw-r--r--Under-Testing/Website/class/pRadar.class.php669
-rw-r--r--Under-Testing/Website/class/pScatter.class.php954
-rw-r--r--Under-Testing/Website/class/pSplit.class.php131
-rw-r--r--Under-Testing/Website/class/pSpring.class.php868
-rw-r--r--Under-Testing/Website/class/pStock.class.php216
-rw-r--r--Under-Testing/Website/class/pSurface.class.php315
-rw-r--r--Under-Testing/Website/css/Critical.pngbin4795 -> 0 bytes
-rw-r--r--Under-Testing/Website/css/Help.pngbin4907 -> 0 bytes
-rw-r--r--Under-Testing/Website/css/Info.pngbin4600 -> 0 bytes
-rw-r--r--Under-Testing/Website/css/Warning.pngbin3467 -> 0 bytes
-rwxr-xr-xUnder-Testing/Website/css/chk_off.pngbin655 -> 0 bytes
-rwxr-xr-xUnder-Testing/Website/css/chk_on.pngbin537 -> 0 bytes
-rw-r--r--Under-Testing/Website/css/formCSS.css46
-rw-r--r--Under-Testing/Website/css/info_rhombus.pngbin1816 -> 0 bytes
-rw-r--r--Under-Testing/Website/css/information.pngbin2112 -> 0 bytes
-rw-r--r--Under-Testing/Website/css/link.gifbin836 -> 0 bytes
-rw-r--r--Under-Testing/Website/css/tableCSS.css147
-rw-r--r--Under-Testing/Website/css/tooltip.css33
-rw-r--r--Under-Testing/Website/css/visitedLink.gifbin838 -> 0 bytes
-rw-r--r--Under-Testing/Website/delayedLoading.js228
-rw-r--r--Under-Testing/Website/devconf.php130
-rw-r--r--Under-Testing/Website/devconfig.php67
-rw-r--r--Under-Testing/Website/devconfigAuto.php66
-rw-r--r--Under-Testing/Website/devconfigManual.php56
-rw-r--r--Under-Testing/Website/fonts/Bedizen.ttfbin42912 -> 0 bytes
-rw-r--r--Under-Testing/Website/fonts/Forgotte.ttfbin42148 -> 0 bytes
-rw-r--r--Under-Testing/Website/fonts/GeosansLight.ttfbin60072 -> 0 bytes
-rw-r--r--Under-Testing/Website/fonts/MankSans.ttfbin58492 -> 0 bytes
-rw-r--r--Under-Testing/Website/fonts/Silkscreen.ttfbin16172 -> 0 bytes
-rw-r--r--Under-Testing/Website/fonts/advent_light.ttfbin45768 -> 0 bytes
-rw-r--r--Under-Testing/Website/fonts/calibri.ttfbin811052 -> 0 bytes
-rw-r--r--Under-Testing/Website/fonts/pf_arma_five.ttfbin21936 -> 0 bytes
-rw-r--r--Under-Testing/Website/fonts/verdana.ttfbin189144 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/blackberry_dunno.pngbin1922 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/blackberry_fail.pngbin1954 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/blackberry_work.pngbin1988 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/box_dunno.pngbin1255 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/box_fail.pngbin1407 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/box_work.pngbin1420 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/server_dunno.pngbin1410 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/server_fail.pngbin1497 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/server_work.pngbin1480 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/sip_dunno.pngbin1494 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/sip_fail.pngbin1621 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/sip_work.pngbin1591 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/telephone_dunno.pngbin1798 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/telephone_fail.pngbin1871 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/telephone_work.pngbin1883 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/uni-network_dunno.pngbin3126 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/uni-network_fail.pngbin3202 -> 0 bytes
-rw-r--r--Under-Testing/Website/icons/uni-network_work.pngbin3198 -> 0 bytes
-rw-r--r--Under-Testing/Website/index.php49
-rw-r--r--Under-Testing/Website/insertData.php69
-rw-r--r--Under-Testing/Website/insertdevice.php28
-rw-r--r--Under-Testing/Website/loader.gifbin10819 -> 0 bytes
-rw-r--r--Under-Testing/Website/main.php63
-rw-r--r--Under-Testing/Website/mutexFunctions.php36
-rw-r--r--Under-Testing/Website/mutexSmartTest.php1012
-rw-r--r--Under-Testing/Website/mutexTry.php995
-rw-r--r--Under-Testing/Website/networkResult.php309
-rw-r--r--Under-Testing/Website/post.php516
-rw-r--r--Under-Testing/Website/report.pdfbin5056503 -> 0 bytes
-rw-r--r--Under-Testing/Website/testCase.php244
-rw-r--r--Under-Testing/Website/wait.gifbin2545 -> 0 bytes
-rw-r--r--Website/mutexSmartTest.php92
-rw-r--r--Website/mutexSmartTest.php_old951
-rw-r--r--Website/mutexTry.php436
-rwxr-xr-xWebsite/mutexTry.php_old966
141 files changed, 635 insertions, 24982 deletions
diff --git a/Code/Server-Code/ClientClass.py b/Code/Server-Code/ClientClass.py
index 46c3b00..46c3b00 100755..100644
--- a/Code/Server-Code/ClientClass.py
+++ b/Code/Server-Code/ClientClass.py
diff --git a/Code/Server-Code/ControllerClass.py b/Code/Server-Code/ControllerClass.py
index 4f4cef5..4ed0d9d 100755..100644
--- a/Code/Server-Code/ControllerClass.py
+++ b/Code/Server-Code/ControllerClass.py
@@ -4,6 +4,7 @@ import subprocess
import SSHTunnelBoxClass
import ClientClass
import random
+import csv
import LogFileClass
logger = LogFileClass.Logging('TestProcessLog.log')
@@ -46,6 +47,7 @@ class controller:
sleep(2)
self.callerGreeting()
+ logger.logEvent('Status Handler Connection :'+self.connected)
if self.connected == 'OK':
self.caller.sendData('CALLER|'+self.destNo)
@@ -65,8 +67,9 @@ class controller:
else:
#waiting 2 seconds if doesnt use ssh connection until handler ready
sleep(2)
- self.receiverGreeting()
-
+ self.receiverGreeting()
+
+ logger.logEvent('Status Handler Connection :'+self.connected)
if self.connected == 'OK':
self.receiver.sendData('RECEIVER')
@@ -105,7 +108,6 @@ class controller:
self.caller.sendData('TERMINATE CONNECTION')
self.caller.closeConnection()
- self.initCancelTest()
#can connect to handler but device caller not ready to do the test.
elif self.connected == 'DEVICE NOT READY':
@@ -118,6 +120,14 @@ class controller:
self.testResult = 999
logger.logEvent('999 General Handler Error: Could not connect to Caller handler')
+ def writeToFile(self, AccountInfo):
+ try:
+ with open('handler.txt', 'w') as F:
+ writer = csv.writer(F)
+ writer.writerow([AccountInfo])
+ F.close()
+ except ValueError:
+ print "can't write to file"
def initCancelTest(self):
#close SSH connection when using gsmBox and destination doesnt respond. to make sure SSH connection are terminate
@@ -134,16 +144,19 @@ class controller:
self.resultCaller = self.caller.receiveData(20)
#print 'result '+self.resultCaller+'--'+self.resultDest
if self.resultCaller == 'DEVICE NOT READY':
+ logger.logEvent('Task :'+self.callFrom+' - '+self.dest)
logger.logEvent('Caller DEVICE NOT READY')
self.testResult = 801
self.initTerminate()
elif self.dest == 'DEVICE NOT READY':
+ logger.logEvent('Task :'+self.callFrom+' - '+self.dest)
logger.logEvent('Caller DEVICE NOT READY')
self.testResult = 802
self.initTerminate()
elif self.resultCaller == 'CALL OK' and self.resultDest =='CALL OK':
+ logger.logEvent('Task :'+self.callFrom+' - '+self.dest)
logger.logEvent('Test Succeed')
self.testResult = 200
self.initTerminate()
@@ -151,17 +164,20 @@ class controller:
#build specially only for Eplus card. since they use prepaid card.
if self.dest == 'GSMExt.Eplus':
if self.resultCaller == 'CALL OK' and self.resultDest <> 'TIME OUT':
+ logger.logEvent('Task :'+self.callFrom+' - '+self.dest)
logger.logEvent('Test Failed - Eplus No credit on Eplus')
self.testResult = 402
self.initTerminate()
else:
logger.logEvent('Test Failed')
+ logger.logEvent('Task :'+self.callFrom+' - '+self.dest)
self.testResult = 486
self.initTerminate()
else:
#one or both of the handler send un success test. assign failed to this test
if self.resultCaller <> 'CALL OK' or self.resultDest <> 'CALL OK':
+ logger.logEvent('Task :'+self.callFrom+' - '+self.dest)
logger.logEvent('Test Failed')
self.testResult = 486
self.initTerminate()
@@ -172,7 +188,7 @@ class controller:
self.receiver.sendData('RECEIVE START')
self.caller.sendData('CALL START')
- def initAccount(self, account):
+ def initAccount(self, account, handler, PortName, portCom):
accConf = account
self.username = accConf[0:accConf.find(':')]
@@ -183,6 +199,9 @@ class controller:
newLine = line[line.find(':')+1:]
self.server = newLine[0:newLine.find(':')]
+ textFile = 'Account:'+str(self.username)+':'+str(self.password)+':'+str(self.server)+':'+str(handler)+':'+str(PortName)+':'+str(portCom)
+ self.writeToFile(textFile)
+
# define the caller configuration such as port name and port caller.
def initCaller(self):
logger.logEvent('init Caller')
@@ -191,12 +210,15 @@ class controller:
if self.callFrom[0:4] == 'GSMR':
if self.callFrom =="GSMRZ1":
+ self.initAccount(self.accCaller,self.callFrom, self.callPortName,self.portCaller)
self.initGSM(self.portCaller, self.callPortName, self.callFrom)
else:
- self.initAccount(self.accCaller)
+ self.initAccount(self.accCaller, self.callFrom, self.callPortName,self.portCaller)
#open SSH tunneling
+
self.boxCaller = SSHTunnelBoxClass.SSHTunneling(self.portCaller, 50008, self.server, self.username, self.password)
status = self.boxCaller.startTunneling()
+ logger.logEvent('SSH Status :'+str(status))
#check whether the SSH tunneling succes or not, 0 is failed!
if status!= 0:
@@ -204,11 +226,14 @@ class controller:
else:
self.continues = 0
elif self.callFrom[0:4] == 'GSME':
+ self.initAccount(self.accCaller,self.callFrom, self.callPortName,self.portCaller)
self.initGSM(self.portCaller, self.callPortName, self.callFrom)
else:
#open the SIP handler
- subprocess.Popen(args=["gnome-terminal", '--command=python SIPHandler.py '+self.accCaller+ ' ' +str(self.portCaller)])
+ self.initAccount(self.accCaller,self.callFrom, self.callPortName,self.portCaller)
+ script = 'SIPHandler.py'
+ subprocess.Popen(['python',script], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# define the destination configuration such as port name and port caller.
def initReceiver(self):
@@ -218,25 +243,31 @@ class controller:
if self.dest[0:4] == 'GSMR':
if self.dest =="GSMRZ1":
+ self.initAccount(self.accDest, self.dest, self.destPortName,self.portDest)
self.initGSM(self.portDest, self.destPortName, self.dest)
else:
- self.initAccount(self.accDest)
+ self.initAccount(self.accDest, self.dest, self.destPortName,self.portDest)
#open SSH tunneling
+
self.boxDest = SSHTunnelBoxClass.SSHTunneling(self.portDest, 50008, self.server, self.username, self.password)
status = self.boxDest.startTunneling()
#check whether the SSH tunneling succes or not, 0 is failed!
+ logger.logEvent('SSH Status :'+str(status))
if status!= 0:
self.continues = 1
else:
self.continues = 0
elif self.dest[0:4] == 'GSME':
- self.initGSM(self.portDest, self.destPortName, self.dest)
+ self.initAccount(self.accDest, self.dest, self.destPortName,self.portDest)
+ self.initGSM(self.portDest, self.destPortName, self.dest)
else:
- self.portDest = 50100
- subprocess.Popen(args=['gnome-terminal', '--command=python SIPHandler.py '+self.accDest+ ' ' +str(self.portDest)])
+ #self.portDest = 50100
+ self.initAccount(self.accDest, self.dest, self.destPortName,self.portDest)
+ script = 'SIPHandler.py'
+ subprocess.Popen(['python',script], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# send terminate message to Handlers
def initTerminate(self):
@@ -263,7 +294,7 @@ class controller:
#open connection to the Handler
self.caller = ClientClass.Connection('localhost',self.portCaller)
self.caller.connect()
-
+
if self.caller.connected == 1:
#connection establish and send hallo message to handler
logger.logEvent('Connected to Caller Handler')
@@ -290,10 +321,11 @@ class controller:
def receiverGreeting(self): # send greeting message to the destination handler
logger.logEvent('Receiver Greeting')
self.connected = None
+
#open connection to the Handler
self.receiver = ClientClass.Connection('localhost', self.portDest)
self.receiver.connect()
-
+
if self.receiver.connected == 1:
#connection establish and send hallo message to handler
logger.logEvent('Connected to Receiver Handler')
@@ -321,7 +353,8 @@ class controller:
def initGSM(self, portCommunication, portDevice, handler):
#open GSM Handler
logger.logEvent('Init GSM')
- subprocess.Popen(args=["gnome-terminal", '--command=python GSMHandler.py '+str(portCommunication)+ ' ' +str(portDevice)+' '+str(handler)])
+ script = 'GSMHandler.py'
+ subprocess.Popen(['python',script], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
diff --git a/Code/Server-Code/DbClass.py b/Code/Server-Code/DbClass.py
index a53987f..d937eb1 100755..100644
--- a/Code/Server-Code/DbClass.py
+++ b/Code/Server-Code/DbClass.py
@@ -4,8 +4,8 @@ import string
class DBMySQLConnection:
def __init__(self):
#initialize at the start all the user parameters
- self.usern = "selftest"
- self.passw = "selftest"
+ self.usern = "root"
+ self.passw = ""
self.host = "localhost"
self.db = "gsmselftesting"
self.connectionCreated = 0
@@ -19,7 +19,7 @@ class DBMySQLConnection:
def connectDB(self):
try:
- #try the connection
+ #try to connect
self.datBaseConn=MySQLdb.connect(self.host,self.usern, self.passw,self.db)
self.datBaseConn.paramstyle = 'format'
self.cur = self.datBaseConn.cursor() #make the cursor, used for sending queries
@@ -115,7 +115,7 @@ class DBMySQLConnection:
return 2 #the table doesn't exist
if debugMode == 1:
print str(e)
- return 3 #some error happened 07667929147--Fitri
+ return 3 #some error happened
else:
return 0 #I am not connected
def deviceList(self): # taking all device list and put it in the list
@@ -171,6 +171,13 @@ class DBMySQLConnection:
def updateGSMDevice(self, deviceName, newPortName, newNumber):
if self.connectionCreated == 1:
try:
+ try:
+ #delete old device portName which assign to this port, to prevent double port address in the table.
+ stmt = "UPDATE DeviceAddressTable SET portName = 'missing' WHERE portName = '"+newPortName+"'"
+ self.cur.execute(stmt)
+ except ValueError:
+ print "Error execute query"
+
stmt = "UPDATE DeviceAddressTable SET portName = '"+ newPortName + "', number = '"+ newNumber+ "' WHERE deviceName = '" + deviceName+ "'"
self.cur.execute(stmt)
return 1
diff --git a/Code/Server-Code/GSMHandler.py b/Code/Server-Code/GSMHandler.py
index cf9a2b4..1379fe9 100644
--- a/Code/Server-Code/GSMHandler.py
+++ b/Code/Server-Code/GSMHandler.py
@@ -4,34 +4,55 @@ import LogFileClass
from time import sleep
import sys
import setproctitle
-
+import csv
+global sipServer, username, password, handler
global portListen
global portAddress
-
-
-if len(sys.argv) <> 4:
- print "Error given command"
- sys.exit(2)
-
-
-handler = sys.argv[3]
-portAddress = sys.argv[2]
-portListen = int(sys.argv[1])
+global nameOfLogFile
def initLogfile():
global nameOfLogFile
nameOfLogFile = str(handler)+' handler.log'
+def writeToFile():
+ try:
+ string = '--'
+ with open('handler.txt', 'w') as F:
+ writer = csv.writer(F)
+ writer.writerow([string])
+ F.close()
+ except ValueError:
+ print "can't write to file"
+
+def openFile():
+ global sipServer, username, password, handler
+ global portListen
+ global portAddress
+
+ #String format: 'Account:username:password:server:handler:PortName:portCaller
+ File = open('handler.txt')
+ reader = csv.reader(File, delimiter=':')
+ for row in reader:
+ if str(row[0]) == 'Account':
+ handler = str(row[4])
+ portAddress = str(row[5])
+ portListen = int(row[6])
+ File.close()
+ writeToFile()
+
baudRate = 19200
+#Taking account information
+openFile()
+
+#start Logging
initLogfile()
logger = LogFileClass.Logging(nameOfLogFile)
+logger.logEvent('')
errorCount = 0
-logger.logEvent('')
-
whileCounter =0
#define global varibales
@@ -42,8 +63,10 @@ lastState = 0
resetState = 0
deviceError = 0
+
+
def initSystem():
- print 'init system'
+
global handlerSocket
global gsmDevice
@@ -58,20 +81,23 @@ def initSystem():
lastState = 0 #variable used to know
numberToCall = '000' #number to call
resetState = 0
-
+
handlerSocket = ServerClass.ServerHandler(portListen)
logger.logEvent('LISTEN ON PORT: '+str(portListen))
anyConnection = handlerSocket.openSocket()
- #add this if you need it
- gsmDevice = GSMClass.serialPort(portAddress, baudRate, 15)
- initDevice = gsmDevice.portInit(5)
+
+ try :
+ logger.logEvent('Trying connect to the device')
+ gsmDevice = GSMClass.serialPort(portAddress, baudRate, 15)
+ initDevice = gsmDevice.portInit(5)
+ logger.logEvent('init device ' + str(initDevice))
+
+ except ValueError:
+ logger.logEvent('Failure when trying connect to device')
+
########################################################
- #add nice formating to the log file :)
- print 'any connection ' + str(anyConnection)
- print 'initDevice ' + str(initDevice)
-
if initDevice!= 1:
deviceError = 1
else:
@@ -82,7 +108,7 @@ def initSystem():
logger.logEvent('CONNECTION ESTABLISHED AND DEVICE WORKING: ' + str(handlerSocket.connectedTo()))
return 1
- elif anyConnection == 1 and initDevice != 0:
+ elif anyConnection == 1 and initDevice != 1:
logger.logEvent('$connection established but device not working: ' + str(handlerSocket.connectedTo()))
resetState = 1
return 2
@@ -90,7 +116,10 @@ def initSystem():
logger.logEvent('$no connection')
logger.logEvent('$else case in init system' + str(anyConnection) + ' ' + str(initDevice) + ' ')
resetState = 1
- return 0
+
+ return 0
+
+
def receiveMessage(timeout):
@@ -221,12 +250,10 @@ def receiveStart():
callSuccess = 'CALL OK'
else:
callSuccess = 'CALL NOT OK'
-
-
-
- sendMessage = handlerSocket.sendData(callSuccess)
if deviceError==0:
- tryHangUp = gsmDevice.hangUp()
+ tryHangUp = gsmDevice.hangUp()
+ sendMessage = handlerSocket.sendData(callSuccess)
+
return sendMessage
############################
@@ -280,10 +307,12 @@ def callStart(numberToCall):
else:
callSuccess = 'CALL NOT OK'
- handResponse = handlerSocket.sendData(callSuccess)
-
if deviceError==0:
- tryHangUp = gsmDevice.hangUp()
+ try:
+ tryHangUp = gsmDevice.hangUp()
+ except ValueError:
+ print 'Error when try hangup the call'
+ handResponse = handlerSocket.sendData(callSuccess)
return handResponse
#########################
@@ -313,7 +342,7 @@ def other():
setproctitle.setproctitle('GSM Handler')
-while 1:
+try:
test = initSystem()
if test == 1:
@@ -328,10 +357,16 @@ while 1:
print 'initialized system but device not working'
logger.logEvent('initialized system but device not working')
handlerSocket.sendData('DEVICE NOT READY')
+
elif test ==0:
print 'nobody can connect, reboot board, restart cellphone'
logger.logEvent('nobody can connect, reboot board, restart cellphone')
-
+
+ logger.closeLogging()
del handlerSocket
del gsmDevice
+except ValueError:
+ logger.logEvent('Could not start the handler')
+ logger.closeLogging()
+
diff --git a/Code/Server-Code/LogFileClass.py b/Code/Server-Code/LogFileClass.py
index cb152f4..cb152f4 100755..100644
--- a/Code/Server-Code/LogFileClass.py
+++ b/Code/Server-Code/LogFileClass.py
diff --git a/Code/Server-Code/PingClass.py b/Code/Server-Code/PingClass.py
index e13b32b..e13b32b 100755..100644
--- a/Code/Server-Code/PingClass.py
+++ b/Code/Server-Code/PingClass.py
diff --git a/Code/Server-Code/SIPHandler.py b/Code/Server-Code/SIPHandler.py
index e446e1a..eb5302c 100755..100644
--- a/Code/Server-Code/SIPHandler.py
+++ b/Code/Server-Code/SIPHandler.py
@@ -5,6 +5,7 @@ import ServerClass
import LogFileClass
import setproctitle
from time import sleep
+import csv
def log_cb(level, str, len):
@@ -13,23 +14,22 @@ def log_cb(level, str, len):
# Receive events from incoming Call
class Account(pj.AccountCallback):
+ def __init__(self, account=None):
+ pj.AccountCallback.__init__(self, account)
+
def on_incoming_call(self, call):
global current_call
- print 'Incoming Call'
+ #print 'Incoming Call'
current_call = call
call_cb = Calling(current_call)
current_call.set_callback(call_cb)
- logger.logEvent(current_call)
+ logger.logEvent('Incoming Call')
call.answer(200)
- logger.logEvent("Answer call")
- print 'Answer Call'
- if current_call <> None:
- logger.logEvent("Hangup call")
- print 'Hangup Call'
- call.hangup()
+
+ sleep(2)
logger.logEvent('CALL OK')
@@ -44,20 +44,23 @@ class Calling(pj.CallCallback):
if self.call.info().state <> pj.CallState.DISCONNECTED:
if self.call.info().state_text == "CONNECTING":
- print 'Call Connecting'
logger.logEvent("Call Connecting")
- logger.logEvent('200')
+ try:
+ logger.logEvent('Try to hangup the call')
+ self.call.hangup()
+ logger.logEvent('Hangup OK')
+ except ValueError:
+ logger.logEvent('hangup failed, waiting destination hangup the call')
+
server.sendData('CALL OK')
if self.call.info().last_reason == "Busy Here":
- print 'Number busy or offline'
logger.logEvent('Number busy or Offline')
server.sendData('CALL NOT OK')
logger.logEvent('CALL NOT OK')
if self.call.info().state == pj.CallState.DISCONNECTED:
logger.logEvent('Call Disconnected')
- print 'Call Discont'
current_call = None
#function to make a call
@@ -68,19 +71,41 @@ def make_call(uri):
return acc.make_call(uri, cb)
except pj.Error, e:
- print "408 " + str(e)
- logger.logEvent('408')
+ logger.logEvent('Error when trying to call, 408')
+ server.sendData('CALL NOT OK')
return None
+def writeToFile():
+ try:
+ string = '--'
+ with open('handler.txt', 'w') as F:
+ writer = csv.writer(F)
+ writer.writerow([string])
+ F.close()
+ except ValueError:
+ print "can't write to file"
+
+def openFile():
+ global sipServer, username, password, ip, portadd
+ global port
+
+ #file format: 'Account:username:password:server:handler:PortName:portCommunication
+ File = open('handler.txt')
+ reader = csv.reader(File, delimiter=':')
+ for row in reader:
+ if str(row[0]) == 'Account':
+ username = str(row[1])
+ password = str(row[2])
+ sipServer = str(row[3])
+ port = int(row[6])
+ File.close()
+ writeToFile()
+
#send greeting message to the controller
def greeting():
- global server
- global status
- global port
- port = sys.argv[2]
+ global server
server = None
- status = None
# create socket communication object
server = ServerClass.ServerHandler(port)
@@ -88,15 +113,15 @@ def greeting():
conn = server.openSocket()
if server.connected == 1:
- #connection to the controller esatablish
+ #connection to the controller establish
+ logger.logEvent('Connection Establish')
if server.receiveData(25) == 'HELLO HANDLER':
- print 'GREETING'
server.sendData('HELLO CONTROLLER')
- status = 'OK'
+ return 1
else:
- status = 'NOT OK'
logger.logEvent('Cant connect to Controller')
- sys.exit(1)
+ del server
+ return 0
def initLogFile(sipServer):
@@ -104,15 +129,15 @@ def initLogFile(sipServer):
if sipServer == '132.230.4.8':
nameOfLogFile = 'SIP handler.log'
- print '--SIP Asterisk--'
+ #print '--SIP Asterisk--'
elif sipServer == 'sipgate.de':
nameOfLogFile = 'Landline handler.log'
- print '--Landline--'
+ #print '--Landline--'
elif sipServer == '132.230.252.228':
nameOfLogFile = 'University SIP handler.log'
- print '--university tephone network--'
+ #print '--university tephone network--'
logger = LogFileClass.Logging(nameOfLogFile)
@@ -127,7 +152,6 @@ def initState():
if message == 'RECEIVER':
state = 'RECEIVER'
-
elif message[0:6] == 'CALLER':
state = 'CALLER'
no = message[7:]
@@ -137,30 +161,13 @@ def initState():
num = no[7:]
else:
num = no
- print 'INIT STATE', state
-
-def initHandler():
- global sipServer
- global username
- global password
-
-
- accConf = sys.argv[1]
- username = accConf[0:accConf.find(':')]
-
- line = accConf[accConf.find(':')+1:]
- password = line[0:line.find(':')]
-
- newLine = line[line.find(':')+1:]
- sipServer = newLine[0:newLine.find(':')]
-
lib = pj.Lib()
stop = False
print 'INIT SYSTEM'
-initHandler()
+openFile()
setproctitle.setproctitle('SIP Handler')
initLogFile(sipServer)
@@ -176,9 +183,9 @@ while stop <> True:
lib.start()
lib.set_null_snd_dev()
- greeting()
-
-
+ if greeting() != 1:
+ lib.destroy()
+ break
try:
initState()
acc_cfg = pj.AccountConfig(str(sipServer),str(username),str(password))
@@ -201,7 +208,7 @@ while stop <> True:
print data
logger.logEvent(data)
- #shutting down message
+ #get shutting down message
if data == 'TERMINATE CONNECTION':
print data
logger.logEvent('Terminate')
@@ -218,13 +225,12 @@ while stop <> True:
#start the call
if data == 'CALL START':
- print data
+ #print data
if num <> '':
sleep(3)
logger.logEvent(data)
logger.logEvent('Make a call to: ' + num)
number = "sip:"+num+"@"+sipServer
- print number
make_call(number)
else:
logger.logEvent('No number to call')
@@ -232,7 +238,7 @@ while stop <> True:
#shutting down message
if data == 'TERMINATE CONNECTION':
- print data
+ #print data
stop = True
logger.logEvent('Terminate')
break
@@ -240,21 +246,27 @@ while stop <> True:
else:
logger.logEvent('Unknow Message')
server.sendData('Unknow Message')
- server.closeConnection()
- sys.exit(0.5)
+ break
else:
logger.logEvent("488 Not Acceptable Here")
- lib.destroy()
+ server.sendData('DEVICE NOT READY')
+ break
- except ValueError:
- print "401 Unauthorized " + str(e)
+ except ValueError:
logger.logEvent("401 Unauthorized ")
+ break
logger.logEvent("Goodbye")
-acc.delete()
-lib.destroy()
-server.closeConnection()
-lib = None
-acc = None
+logger.closeLogging()
+# trying to clean everything before shutting down
+try:
+ acc.delete()
+ lib.destroy()
+ lib = None
+ acc = None
+ server.closeConnection()
+ del server
+except ValueError:
+ message = 'trying failure'
diff --git a/Code/Server-Code/SSHTunnelBoxClass.py b/Code/Server-Code/SSHTunnelBoxClass.py
index 1b76d0b..1b76d0b 100755..100644
--- a/Code/Server-Code/SSHTunnelBoxClass.py
+++ b/Code/Server-Code/SSHTunnelBoxClass.py
diff --git a/Code/Server-Code/ServerClass.py b/Code/Server-Code/ServerClass.py
index 93c2f8e..93c2f8e 100755..100644
--- a/Code/Server-Code/ServerClass.py
+++ b/Code/Server-Code/ServerClass.py
diff --git a/Code/Server-Code/gsmselftest.py b/Code/Server-Code/gsmselftest.py
index 61d4246..082b19f 100755..100644
--- a/Code/Server-Code/gsmselftest.py
+++ b/Code/Server-Code/gsmselftest.py
@@ -11,6 +11,9 @@ import WebsiteCommClass
import signal
import random
from time import sleep
+import setproctitle
+
+setproctitle.setproctitle('Controller Software')
class bcolors:
HEADER = '\033[95m'
@@ -76,7 +79,22 @@ def initDB(): # function for connection database
db.connectDB()
dbStatus = db.connectDB()
if dbStatus == 1:
- print 'Lock the mutex: ' + str(db.lockMutex(600))
+ db.lockMutex(600)
+
+def initNagiosString(x):
+
+ initResult = truthtableClass.trueTable(x)
+ initResult.initNagiosResult()
+
+ if int(initResult.FAILED) != 0:
+ print "GSM CRITICAL - Number of test "+str(initResult.testMount)+'; Failure '+str(initResult.FAILED)+'; Unknown '+str(initResult.handlerError)
+ elif int(initResult.handlerError) != 0:
+ print "GSM WARNING - Number of test "+str(initResult.testMount)+'; Failure '+str(initResult.FAILED)+'; Unknown '+str(initResult.handlerError)
+ elif int(initResult.FAILED) == 0 and int(initResult.handlerError) == 0:
+ print "GSM OK - Number of test "+str(initResult.testMount)+'; Failure '+str(initResult.FAILED)+'; Unknown '+str(initResult.handlerError)
+ else:
+
+ print "unknown error"
def initTrueTable(x):
@@ -86,7 +104,6 @@ def initTrueTable(x):
print '\n'
openBSC = None
asterikServer = None
- finalResult = list()
for x in initResult.nanoBts:
name = x[0]
@@ -136,7 +153,7 @@ def initTrueTable(x):
def errorCodes(callFrom, callTo, result):
message = '|' + str(callFrom) + '|' + str(callTo) + '|' + str(result) + '|' + str(db.errorCode(result))
- print message
+
sendResultWebsite(message)
# function to search in the list
@@ -151,7 +168,7 @@ def isThere(keyword,lists):
def testDest(callFrom, callTo, tried):
- makeTest.initTest(callFrom,callTo)#xxxx
+ makeTest.initTest(callFrom,callTo)
db.insertTask(taskNum,callFrom,callTo)
smartResultList.append([callFrom,callTo, makeTest.result,tried])
taskID = db.maxTaskID()
@@ -192,8 +209,7 @@ def smartTest():
testDest(callFrom, callTo, 1)
gsmRZList.remove(callTo)
destList.remove(callTo)
-
-
+
for callFrom in gsmRZList:
i = random.randint(0, len(destList)-1) #Check whether the caller and dest are same
@@ -228,10 +244,11 @@ def smartTest():
#checking unsuccess call, to make sure that destination are really unreachable
for dest in smartResultList:
#check unsuccess call and did the test have already tried, 2 means has been check
- if int(dest[2]) == 486 or int(dest[2]) == 999 or int(dest[2]) == 998 or int(dest[2]) == 801 or int(dest[2]) == 802:
+ if int(dest[2]) == 486 or int(dest[2]) == 999 or int(dest[2]) == 998 or int(dest[2]) == 801 or int(dest[2]) == 802:
+
if int(dest[3]) != 2 and dest[1] != 'sip':
testDestination = True
- founds = False
+ testFromRZ = False
testCaller = True
# make sure that destination have not tested by another part and give success result.
for test in smartResultList:
@@ -242,28 +259,24 @@ def smartTest():
if int(test[2]) == 200:
testCaller = False
#if destination have not tested by other part. try to test from RZ GSM
- if int(test[2]) == 200:
+ if int(test[2]) == 200 and testFromRZ != True:
for caller in cpgsmRZList:
if caller == test[0] or caller == test[1]:
callFrom = caller
- founds = True
+ testFromRZ = True
- if dest[0] != 'sip':
- founds = False
-
if testDestination == True:
- if founds != True:
+ if testFromRZ != True:
callFrom = 'sip'
callTo = dest[1]
- if dest[0] != 'sip':
- testDest(callFrom, callTo, 2)
- rem.append(dest)
+ testDest(callFrom, callTo, 2)
+ rem.append(dest)
#check unsuccess call because caller handler having problem
#destination handler having problem, we should make test also to the caller
if int(dest[2]) == 998 or int(dest[2]) == 802 or int(dest[2]) == 486:
if testCaller == True:
- if founds != True:
+ if testFromRZ != True:
callFrom = 'sip'
callTo = dest[0]
testDest(callFrom, callTo, 2)
@@ -272,10 +285,15 @@ def smartTest():
caller = dest[0] # to test nanobts if the test come from RZ GSM but fehler
if caller[0:5] == 'GSMRZ' and int(dest[3]) != 2 and dest[1] != 'sip':
+ repeatTest = True
+ for test in smartResultList:
+ if test[1] == caller or test[0] == caller:
+ repeatTest = False
if int(dest[2]) == 486 or int(dest[2]) == 402:
- callFrom = 'sip'
- testDest(callFrom, dest[0], 2)
- rem.append(dest)
+ if repeatTest == True:
+ callFrom = 'sip'
+ testDest(callFrom, dest[0], 2)
+ rem.append(dest)
# test to make sure nanoBTS working or not. sice probably that nanotbts seems error but actually not.
for RZ in cpgsmRZList:
@@ -321,18 +339,25 @@ def smartTest():
return smartResultList
def doSmartTest(status):
- global taskNum
+ global taskNum, printMessage
global WebStatus
initDB()
taskNum = db.maxTaskNo()
global makeTest
if status == True:
WebStatus = True
+
else:
WebStatus = False
+
makeTest = initTestClass.initTesting()
result = smartTest()
- initTrueTable(result)
+ if status == 'NAGIOS':
+ initNagiosString(result)
+
+ elif status == False:
+ initTrueTable(result)
+
if status == True:
sendFinishMessage()
@@ -643,8 +668,6 @@ def closeFunction(dbConn,serverSocket):
if len(sys.argv) > 1:
command = sys.argv[1]
-
- print ' '
if command == '--all':
resultsList = list()
@@ -674,6 +697,14 @@ if len(sys.argv) > 1:
db.updatePingResult(taskNo, sipServer, sipGate, unisip, gsmBox1, gsmBox2)
doSmartTest(False)
+ elif command == '--nagios':
+ initDB()
+ resultsList = list()
+ allPing()
+ taskNo = db.maxTaskNo()
+ db.updatePingResult(taskNo, sipServer, sipGate, unisip, gsmBox1, gsmBox2)
+ doSmartTest('NAGIOS')
+
elif command == '--devconf':
updateDevice()
diff --git a/Under-Testing/Server-Code-New/handler.txt b/Code/Server-Code/handler.txt
index 45b50ac..45b50ac 100644
--- a/Under-Testing/Server-Code-New/handler.txt
+++ b/Code/Server-Code/handler.txt
diff --git a/Code/Server-Code/help.txt b/Code/Server-Code/help.txt
index 5491f26..1a3b843 100755..100644
--- a/Code/Server-Code/help.txt
+++ b/Code/Server-Code/help.txt
@@ -11,6 +11,7 @@ Options and arguments (and corresponding environment variables):
--incoming : To check incoming calls from Landline
--smart : To test only important points in the network and to identify the problems
--devconf : To configure the USB device on the server
+--nagios : Execute smart test but only for Nagios plugin
example : ./gsmselftest.py --devconf
./gsmselftest.py --smart
diff --git a/Code/Server-Code/initTestClass.py b/Code/Server-Code/initTestClass.py
index b3414e2..568f840 100755..100644
--- a/Code/Server-Code/initTestClass.py
+++ b/Code/Server-Code/initTestClass.py
@@ -79,6 +79,8 @@ class initTesting:
self.initaccount(dest,callTo)
if self.status == 1:
+ #string = 'Account:username:password:server:ipaddress:portaddress:portnumber'
+
callPortName = caller[0]
accCaller = caller[2]+':'+caller[3]+':'+caller[4]+':'
@@ -91,6 +93,7 @@ class initTesting:
makeTest.FuncTest()
self.result = str(makeTest.testResult)
+
else:
self.result = 100
else:
diff --git a/Code/Server-Code/startSoftware.py b/Code/Server-Code/startSoftware.py
index 18863be..b2beb58 100755..100644
--- a/Code/Server-Code/startSoftware.py
+++ b/Code/Server-Code/startSoftware.py
@@ -1,7 +1,9 @@
#! /usr/bin/env python
import ServerClass
-import subprocess
+import subprocess
+import setproctitle
+setproctitle.setproctitle('Start Software')
while 1:
# try connect to website
server = ServerClass.ServerHandler(34600)
@@ -9,7 +11,11 @@ while 1:
test = server.receiveData(2)
if test == 'START APP':
print 'start'
- subprocess.Popen(args=['gnome-terminal','--command= python gsmselftest.py'])
+ try:
+ script = 'gsmselftest.py'
+ subprocess.Popen(['python',script], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ except ValueError:
+ print " - can't start controller software -"
server.closeConnection()
del server
diff --git a/Code/Server-Code/truthtableClass.py b/Code/Server-Code/truthtableClass.py
index 0d7a633..c45ab4d 100755..100644
--- a/Code/Server-Code/truthtableClass.py
+++ b/Code/Server-Code/truthtableClass.py
@@ -9,6 +9,11 @@ class trueTable:
self.incomingRZ = None
self.openBSC = None
self.nanoBTS = None
+ self.deviceStatus = list()
+ self.testMount = len(resultsList)
+ self.OK = 0
+ self.FAILED = 0
+ self.handlerError = 0
def initDB(self):
# function for connect to database
@@ -27,6 +32,64 @@ class trueTable:
self.found = True
return self.found
+ def findStatusInList(self,key):
+
+ if len(self.deviceStatus) == 0:
+ update = False
+ else:
+ update = False
+ for item in self.deviceStatus:
+ if key == item[0] and str(item[1]) != 'OK':
+ update = True
+ return update
+
+ def initNagiosResult(self):
+ self.initDB()
+ deviceLists = self.db.deviceList()
+ self.db.closeDBConn()
+
+ for items in deviceLists:
+ device = items[0]
+ for result in self.resultsList:
+ if device == result[0] or device == result[1]:
+ if int(result[2]) == 200:
+ if self.findStatusInList(device) == True:
+ try:
+ self.deviceStatus.remove([device,'NOT OK'])
+ except:
+ try:
+ self.deviceStatus.remove([device,'UNKNOWN'])
+ except:
+ continue
+ self.deviceStatus.append([device,'OK'])
+ else:
+ self.deviceStatus.append([device,'OK'])
+
+ elif int(result[2]) == 486:
+ found = False
+ for item in self.deviceStatus:
+ if device == item[0]:
+ if str(item[1]) != 'OK' or str(item[1]) == 'OK':
+ found = True
+ if found == False:
+ self.deviceStatus.append([device,'NOT OK'])
+ else:
+ found = False
+ for item in self.deviceStatus:
+ if device == item[0]:
+ if str(item[1]) != 'OK' or str(item[1]) == 'OK':
+ found = True
+ if found == False:
+ self.deviceStatus.append([device,'UNKNOWN'])
+ for status in self.deviceStatus:
+
+ if status[1] == 'OK':
+ self.OK = self.OK+1
+ elif status[1] == 'NOT OK':
+ self.FAILED = self.FAILED+1
+ else:
+ self.handlerError = self.handlerError+1
+
def initTrueTable(self):
global btsName
self.initDB()
@@ -39,7 +102,7 @@ class trueTable:
if device[0:5] == 'GSMEx' or device == 'landline':
externalRZList.append(device) # fetch into the list
self.db.closeDBConn()
- lists = self.resultsList
+ lists = self.resultsList
self.nanoBts = list()
gsmResultList = list()
@@ -113,25 +176,16 @@ class trueTable:
if found != True:
self.nanoBts.append([btsName,False])
- elif str(result) == '801' and key == call:
+ elif (str(result) == '801' or str(result) == '999') and key == call:
self.lookingBTSname(key)
if self.found != True:
self.nanoBts.append([key,result])
- elif str(result) == '802'and key == dest:
- self.lookingBTSname(key)
- if self.found != True:
- self.nanoBts.append([key,result])
-
- if str(result) == '998' and key == dest:
+ elif (str(result) == '802' or str(result) == '998') and key == dest:
self.lookingBTSname(key)
if self.found != True:
self.nanoBts.append([key,result])
-
- if str(result) == '999' and key == call:
- self.lookingBTSname(key)
- if self.found != True:
- self.nanoBts.append([key,result])
+
j = j+1
elif j == i:
stop = True
diff --git a/Code/Server-Code/usbDetectClass.py b/Code/Server-Code/usbDetectClass.py
index d64e328..d64e328 100755..100644
--- a/Code/Server-Code/usbDetectClass.py
+++ b/Code/Server-Code/usbDetectClass.py
diff --git a/Under-Testing/Box1-Code/GSMClass.py b/Under-Testing/Box1-Code/GSMClass.py
deleted file mode 100644
index d89f652..0000000
--- a/Under-Testing/Box1-Code/GSMClass.py
+++ /dev/null
@@ -1,303 +0,0 @@
-from serial import * #serial port library
-import string
-import sys
-import signal
-
-class TimeoutException(Exception):
- pass
-
-class serialPort():
-
- def __init__(self, portAddress, baudRate, timeout):
- self.portAddress = portAddress
- self.portExist = 0
- self.ser = 0
- self.baudRate = baudRate
- self.signalStrength = 0
-
- self.timer = timeout
- self.timer1 = timeout
- self.start = 0
-
- self.debugMode = 0
-
- def portInit(self, timeout1):
- portName = self.portAddress[-4:]
- portExist = os.popen('dmesg | grep ' + portName).read()
- self.timer = timeout1
- if portExist == '':
- return 0
- else:
- try:
- self.ser = Serial(
- port=self.portAddress,
- baudrate=self.baudRate,
- bytesize=EIGHTBITS,
- parity=PARITY_NONE,
- stopbits=STOPBITS_ONE
- )
- self.ser.flushOutput() #clean the output buffer from the serial port
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('AT\r')
-
- received = self.__receiveData()
- self.start=1
- if received == 'OK':
- self.portExist = 1
- return 1 #cellphone is OK, receives commands
- elif received == 'TIMEOUT':
- return 'TIMEOUT'
- else:
- return 2 #cellphone has an error
-
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
-
- self.portExist = 3
- return 3
-
- def callNumber(self,numberToCall):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('ATD'+str(numberToCall)+';\r')
- if self.__receiveData() == 'OK':
- return 1
- else:
- return 4
-
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
-
- return 3
- else:
- return 0
-
-
- def hangUp(self):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('AT+CHUP\r')
- received = self.__receiveData()
- if received == 'OK':
- return 1
- elif received == 'ERROR':
- return 2 #other side hang up the call
- else:
- return 4
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
- return 3
- else:
- return 0
-
-
- def closePort(self):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.close()
- return 1
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
- return 3
- else:
- return 0
-
- def getSignalQuality(self):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('AT+CSQ\r')
- if self.__receiveData() == 'OK':
- if self.__receiveData == 'SIGNAL':
- return 1
- else:
- return 4
- else:
- return 2
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
- return 3
-
- else:
- return 0
-
- def receiveCall(self):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- if self.__receiveData() == 'RING':
- self.ser.write('ATA\r')
- if self.__receiveData()=='OK':
- return 1
- else:
- return 4
- else:
- return 2
-
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
- return 3
- else:
- return 0
-
- def currentCall(self):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('AT+CLCC\r')
- received = self.__receiveData()
- if received == 'OK':
- return 2 #not yet in a call
- elif received == 'ACTIVE':
- return 1 #in a call
- elif received == 'HELD':
- return 5 #held call
- elif received == 'DIALING':
- return 6 #dialing
- elif received == 'ALERTING':
- return 7 #alerting the call
- elif received == 'INCOMING':
- return 8 #incoming call
- elif received == 'WAITING':
- return 9 #waiting for a call
-
- else:
- return received #in some other state
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
- return 3
- else:
- return 0
-
- def __receiveData(self):
- def timeout_handler(signum, frame):
- raise TimeoutException()
- if self.start == 0:
- self.timer = 5
- else:
- self.timer = self.timer1
-
- old_handler = signal.signal(signal.SIGALRM, timeout_handler)
- signal.alarm(self.timer)
-
- bufferData = ''
- lines = ''
- line = ''
-
- try:
- while True:
- bufferData = bufferData + self.ser.read(self.ser.inWaiting()) #read the serial port and add it to the buffer variable
- if '\n' in bufferData: #if a new line character is found in the buffer then the cellphone has sent something
- lines = bufferData.split('\n') #parse the buffer variable with the new line character
- last_received = lines.pop(0) #put into last_received variable the first content from lines (FIFO)
-
- bufferData = '\n'.join(lines) #add a new line to the buffer variable
-
- last_received=last_received.split('\n') #parse the last received value with new lines
- line = last_received[0].replace(chr(13), '') #remove \r from the first parsed value in last_received and return me a nicely parsed value :)
- if self.debugMode == 1:
- if len(line) > 0:
- print line
-
- if line == 'OK':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'OK'
-
- elif line == 'ERROR':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'ERROR'
-
- elif line[0:11] == '+CME ERROR:':
- if self.debugMode == 1:
- print 'ERROR:', line
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'ERROR'
-
- elif line == 'RING':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'RING'
-
- elif line[0:5] == '+CSQ:':
- space = int(string.find(line,' '))+1 #find the (space) sign
- coma = int(string.find(line,',')) #find the , (coma) sign
- self.signalStrength = (int(line[space:coma])*2)-113
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'SIGNAL'
-
- elif line == 'NO CARRIER':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'NO CARRIER'
-
- elif line == 'BUSY':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'BUSY'
-
- elif line[0:6] == '+CLCC:':
-
- if line[11:12] == '0':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'ACTIVE'
- elif line[11:12] == '1':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'HELD'
- elif line[11:12] == '2':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'DIALING'
- elif line[11:12] == '3':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'ALERTING'
- elif line[11:12] == '4':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'INCOMING'
- elif line[11:12] == '5':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'WAITING'
-
- except TimeoutException:
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'TIMEOUT'
-
- except Exception, e:
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- print 'NO GOOD'
- print e
- return 3
diff --git a/Under-Testing/Box1-Code/LogFileClass.py b/Under-Testing/Box1-Code/LogFileClass.py
deleted file mode 100644
index cb152f4..0000000
--- a/Under-Testing/Box1-Code/LogFileClass.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import string
-import datetime
-
-class Logging:
-
- def __init__(self, logFileName):
- self.writeToFile = open(logFileName, 'a')
- self.justStarted = 1
-
- def logEvent(self, event):
- now = str(datetime.datetime.now())
- if self.justStarted == 1:
- self.writeToFile.write('\n\n------------------STARTED THE LOGGING '+ now + ' ------------------\n')
- self.justStarted = 0
- else:
- self.writeToFile.write('On: '+ now + '\t' + 'Event: ' +str(event) + '\n')
-
- def closeLogging(self):
- now = str(datetime.datetime.now())
- self.writeToFile.write('------------------FINISHED THE LOGGING '+ now + ' ------------------')
- self.writeToFile.close()
diff --git a/Under-Testing/Box1-Code/READ ME.txt b/Under-Testing/Box1-Code/READ ME.txt
deleted file mode 100644
index 65be275..0000000
--- a/Under-Testing/Box1-Code/READ ME.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-
-Class files:
-
- - ServerClass.py
- This class file is used by handlers as socket communication class to communicate with the controller.
-
- - GSMClass.py
- This class file is used by GSM Handlers to control and talk to the mobile devices.
-
- - LogFileClass.py
- This class is used to make the log files.
-
-Handler files:
-
- - serverHandler.py
-
-How to start the server Handler:
- - you can use SSH connection to the box and type:
- - $ sudo python serverHandler.py $
diff --git a/Under-Testing/Box1-Code/ServerClass.py b/Under-Testing/Box1-Code/ServerClass.py
deleted file mode 100644
index 088a2ae..0000000
--- a/Under-Testing/Box1-Code/ServerClass.py
+++ /dev/null
@@ -1,162 +0,0 @@
-import socket
-import sys
-import os
-import string
-import signal
-import fcntl
-import struct
-
-class TimeoutException(Exception):
- pass
-
-class ServerHandler:
-
- def __init__(self,p):
- self.port = p
- ifname = 'eth0' #define here the interface you want to find the ip address
-
- #code for getting our public addresss so I can make the SSH tunneling work
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- publicAddress = socket.inet_ntoa(fcntl.ioctl(
- s.fileno(),0x8915, # SIOCGIFADDR
- struct.pack('256s', ifname[:15]))[20:24])
-
- self.host = publicAddress #None #'127.0.0.1' #symbolic name meaning all available interfaces
- self.s = None
- self.connected = 0
- self.address = "127.0.0.1" #address of the main controller
- self.onceConnected = 0
- self.error = 'No error'
-
- self.debugMode = 0
-
- def openSocket(self):
- self.error = 'No error'
- for res in socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC,
- socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
- af, socktype, proto, canonname, sa = res
-
- try:
- self.s = socket.socket(af, socktype, proto)
- self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #this resolves the bug with live packets
- except socket.error, msg:
- self.s = None
- self.connected = 0
- self.error = str(msg)
- continue
-
- try:
- self.s.bind(sa)
- self.s.listen(1)
- except socket.error, msg:
- self.s.close()
- self.s = None
- self.connected = 0
- self.error = str(msg)
- continue
- break
-
- if self.s is None:
- self.connected = 0
- return 0
- else: #accept the connection
- self.connection, self.address = self.s.accept()
- self.connected = 1
- self.onceConnected = 1
- return 1
-
- def connectedTo(self):
- return self.address
-
- def receiveData(self, timeout):
- if self.connected == 1:
-
- def timeout_handler(signum, frame):
- raise TimeoutException()
-
- try:
-
- old_handler = signal.signal(signal.SIGALRM, timeout_handler)
- signal.alarm(timeout) #start the timeout alarm, for timeout seconds
-
- data = self.connection.recv(1024)
-
- #stop the timeout function
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
-
- if not data:
- self.connected = 0
- return 'NO DATA'
- else:
- return data
-
- except TimeoutException:
- #timeout happened
- signal.signal(signal.SIGALRM, old_handler)
-
- return 'TIMEOUT'
-
- except Exception, e:
- #stop the timeout timer
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
-
- if self.debugMode == 1:
- import traceback
- print traceback.format_exc()
- print e
- self.connected = 0
- if error[0:11] == '[Errno 104]':
- return 3 #the other side reset the connection,[Errno 104] Connection reset by peer
-
- return 2
- else:
- return 0
-
- def sendData(self, data):
- if self.connected == 1:
- try:
- self.connection.send(data)
- return 1
-
- except Exception, e:
- if self.debugMode == 1:
- import traceback
- print traceback.format_exc()
- print e
- self.connecected = 0
- return 2
- else:
- return 0
-
- def closeConnection(self):
- if self.onceConnected == 1:
- try:
- self.connected = 0
- SHUT_RDWR = 2
- self.connection.shutdown(SHUT_RDWR)
- self.connection.close()
- return 1
- except Exception, e:
- self.connected = 0
- error = str(e)
- if self.debugMode == 1:
- import traceback
- print traceback.format_exc()
- print e
- if error[0:11] == '[Errno 107]':
- return 3 #the other side closed the connection before us [Errno 107] Transport endpoint is not connected
- return 2
- else:
- return 0
-
- def killPort(self):
- killResult = os.popen('lsof -i tcp:' + str(self.port) + ' | grep "python " | awk -F" " ' + "'{print $2}'").read()
- killResult = killResult.replace('\n','')
- print killResult
- if killResult!='':
- print killResult
- killPort = os.popen("kill -9 " + killResult).read()
- return 1
- return 0
diff --git a/Under-Testing/Box1-Code/serverHandler.py b/Under-Testing/Box1-Code/serverHandler.py
deleted file mode 100644
index accfc1d..0000000
--- a/Under-Testing/Box1-Code/serverHandler.py
+++ /dev/null
@@ -1,341 +0,0 @@
-import ServerClass
-import GSMClass
-import LogFileClass
-import sys
-import os
-from time import sleep
-def restart_program():
- """Restarts the current program.
- Note: this function does not return. Any cleanup action (like
- saving data) must be done before calling this function."""
- python = sys.executable
- os.execl(python, python, * sys.argv)
-
-################################
-################################
-######SET THESE PARAMETERS######
-################################
-portListen = 50008 #port number of handler
-nameOfLogFile = 'handler.log' #name of the log file
-portAddress = '/dev/ttyUSB0'
-baudRate = 19200
-################################
-################################
-################################
-
-#create the log file class
-logger = LogFileClass.Logging(nameOfLogFile)
-#use this variable as the error counter
-errorCount = 0
-#start logging all events
-logger.logEvent('')
-#counter how many time we were in the while loop
-whileCounter =0
-
-#define global varibales
-global lastState
-global resetState
-global deviceError
-lastState = 0
-resetState = 0
-deviceError = 0
-
-def initSystem():
- print 'init system'
-
- global handlerSocket
- global gsmDevice
- global initTalkVar
- global lastState
- global initDevice
- global numberToCall
- global resetState
- global deviceError
-
- initTalkVar = 0 #variable used to know if we initialized the start talk
- lastState = 0 #variable used to know
- numberToCall = '000' #number to call
- resetState = 0
-
- handlerSocket = ServerClass.ServerHandler(portListen)
- logger.logEvent('LISTEN ON PORT: '+str(portListen))
- anyConnection = handlerSocket.openSocket()
- #add this if you need it
- gsmDevice = GSMClass.serialPort(portAddress, baudRate, 15)
- initDevice = gsmDevice.portInit(5)
- ########################################################
-
- #add nice formating to the log file :)
-
- print 'any connection ' + str(anyConnection)
- print 'initDevice ' + str(initDevice)
-
- if initDevice!= 1:
- deviceError = 1
- else:
- deviceError = 0
-
-
- if anyConnection == 1 and initDevice == 1:
- logger.logEvent('CONNECTION ESTABLISHED AND DEVICE WORKING: ' + str(handlerSocket.connectedTo()))
- return 1
-
- elif anyConnection == 1 and initDevice != 0:
- logger.logEvent('$connection established but device not working: ' + str(handlerSocket.connectedTo()))
- return 2
- else:
- logger.logEvent('$no connection')
- logger.logEvent('$else case in init system' + str(anyConnection) + ' ' + str(initDevice) + ' ')
- resetState = 1
- return 0
-
-def receiveMessage(timeout):
-
- message = str(handlerSocket.receiveData(timeout))
- print 'I RECEIVED THE FOLLOWING MESSAGE' + message
- if message == 'NO DATA':
- print 'try to close the connection' + str(handlerSocket.closeConnection())
- global resetState
- resetState = 1
- return 1
- if message != '0' and message !='NO DATA':
- print 'in receive message', message, lastState
-
- if message == 'HELLO HANDLER' and lastState == 0:
- outcome = initTalk()
- if outcome == 1:
- logger.logEvent('TALK INITIALIZATION SENT')
- else:
- logger.logEvent('$talk initialization not sent: ' + str(outcome))
-
- elif message == 'RECEIVER' and lastState == 1:
- outcome = initReceiver()
- if outcome == 1:
- logger.logEvent('RECEIVER READY SENT')
- else:
- logger.logEvent('$receiver ready not sent: ' + str(outcome))
- return 7
-
- elif message == 'RECEIVE START' and lastState == 2:
- outcome = receiveStart()
- print 'outcome ' + str(outcome)
- if outcome == 1:
- logger.logEvent('RECEIVE STATUS REPORTED')
- return 2
- else:
- logger.logEvent('$receive status not reported: ' + str(outcome))
- return 3
-
- elif message[0:6] == 'CALLER' and lastState == 1:
- outcome = initCaller()
-
- global numberToCall
- numberToCall = message[7:]
- if outcome == 1:
- logger.logEvent('CALLER READY SENT')
- else:
- logger.logEvent('$caller ready not sent: ' + str(outcome))
- return 6
-
- elif message == 'CALL START' and lastState == 4:
- outcome = callStart(numberToCall)
- print 'outcome ' + str(outcome)
- if outcome == 1:
- logger.logEvent('CALLER STATUS SENT')
- return 4
- else:
- logger.logEvent('$caller status not sent: ' + str(outcome))
- return 5
-
- elif message == 'TERMINATE CONNECTION' and (lastState == 5 or lastState == 3):
- outcome = terminateConnection()
- if outcome == 1:
- logger.logEvent('TERMINATED THE CONNECTION AFTER TEST')
- else:
- logger.logEvent('$connection could not be terminated after the test: ' + str(outcome))
-
- elif message == 'TERMINATE CONNECTION':
- outcome = terminateConnection()
- if outcome == 1:
- logger.logEvent('TERMINATED THE CONNECTION IN MIDDLE. IN STATE: ' + str(lastState) )
- else:
- logger.logEvent('$connection could not be terminated in middle: ' + str(outcome) + ' in state: ' + str(lastState))
- else:
- print message
- outcome = other()
- logger.logEvent('other appeared')
-
- return 1
-
-########INIT TALK PART########
-def initTalk():
- print 'init talk'
- #initialize the talk between handler and controller
- global lastState
- test = gsmDevice.portInit(2)
- if test != 1:
- test = gsmDevice.portInit(2)
- if test != 1:
- sendMessage = handlerSocket.sendData('DEVICE NOT READY')
- else:
- lastState = 1
- sendMessage = handlerSocket.sendData('HELLO CONTROLLER')
- else:
- lastState = 1
- sendMessage = handlerSocket.sendData('HELLO CONTROLLER')
- return sendMessage
-##############################
-
-
-########RECEIVE PART########
-def initReceiver():
- print 'initReceiver'
-
- #init function to initialize the receiver
- global lastState
- lastState = 2
- sendMessage = handlerSocket.sendData('RECEIVER READY')
- return sendMessage
-
-def receiveStart():
- print 'receiveStart'
-
- #wait for a call and report if you received it and it was successfull or not
- global lastState
- global deviceError
- lastState = 3
- if deviceError == 0:
- receiveCall = gsmDevice.receiveCall()
- if receiveCall == 'TIMEOUT':
- deviceError = 1
- print 'device error in RECEIVE'
- else:
- receiveCall = 0
-
- if deviceError == 0:
- if receiveCall == 1:
- callSuccess = 'CALL OK'
- else:
- callSuccess = 'CALL NOT OK'
-
-
-
- sendMessage = handlerSocket.sendData(callSuccess)
- if deviceError==0:
- tryHangUp = gsmDevice.hangUp()
- return sendMessage
-############################
-
-
-########CALL PART########
-def initCaller():
- print 'initCaller1'
-
- #initialize caller here
- global lastState
- lastState = 4
- sendMessage = handlerSocket.sendData('CALLER READY')
- return sendMessage
-
-def callStart(numberToCall):
- print 'initCaller2'
-
- #call the number here
- global lastState
- global deviceError
- lastState = 5
-
- callSuccess = 'CALL NOT OK'
-
- if deviceError==0:
- tryCall = gsmDevice.callNumber(numberToCall)
- if tryCall == 'TIMEOUT':
- deviceError = 1
- print 'device error in CALL'
- else:
- tryCall=0
-
-
- if tryCall != 1:
- callSuccess = 'CALL NOT OK'
- else:
- print 'try call result'+ str(tryCall)
- if tryCall != 'TIMEOUT':
- sleep(2)
- activeCall = gsmDevice.currentCall()
- counter = 0
- while(activeCall!=1):
- sleep(1)
- activeCall = gsmDevice.currentCall()
- if counter == 10:
- break
- counter += 1
-
- if activeCall == 1:
- callSuccess = 'CALL OK'
- else:
- callSuccess = 'CALL NOT OK'
-
- handResponse = handlerSocket.sendData(callSuccess)
-
- if deviceError==0:
- tryHangUp = gsmDevice.hangUp()
-
- return handResponse
-#########################
-
-
-########TERMINATE PART########
-def terminateConnection():
- print 'terminate connection'
- global resetState
- close = handlerSocket.closeConnection()
- resetState = 1
- return close
-##############################
-
-########TERMINATE PART########
-def other():
- print 'other'
- global lastState
- global resetState
-
- close = handlerSocket.closeConnection()
- lastState = 8
- resetState = 1
- return 1
-##############################
-
-
-
-while 1:
-
- test = initSystem()
- if test == 1:
- print 'initialized system'
- receivedMessage = 0
- while receivedMessage < 8 and resetState!= 1:
- if receivedMessage == 4 or receivedMessage == 5 or receivedMessage == 2 or receivedMessage == 3:
- receivedMessage = receiveMessage(20)
- else:
- receivedMessage = receiveMessage(30)
- elif test ==2:
- print 'initialized system but device not working'
- logger.logEvent('initialized system but device not working')
- receivedMessage = 0
- while receivedMessage < 4 and resetState!= 1:
- handlerSocket.sendData('DEVICE NOT READY')
- if receivedMessage == 4 or receivedMessage == 5 or receivedMessage == 2 or receivedMessage == 3:
- receivedMessage = receiveMessage(20)
- else:
- receivedMessage = receiveMessage(30)
-
- elif test ==0:
- print 'nobody can connect, reboot board, restart cellphone'
- logger.logEvent('nobody can connect, reboot board, restart cellphone')
- logger.closeLogging();
- del handlerSocket
- del gsmDevice
- del logger
- restart_program()
-
diff --git a/Under-Testing/Box2-Code/GSMClass.py b/Under-Testing/Box2-Code/GSMClass.py
deleted file mode 100644
index 126446e..0000000
--- a/Under-Testing/Box2-Code/GSMClass.py
+++ /dev/null
@@ -1,303 +0,0 @@
-from serial import * #serial port library
-import string
-import sys
-import signal
-
-class TimeoutException(Exception):
- pass
-
-class serialPort():
-
- def __init__(self, portAddress, baudRate, timeout):
- self.portAddress = portAddress
- self.portExist = 0
- self.ser = 0
- self.baudRate = baudRate
- self.signalStrength = 0
-
- self.timer = timeout
- self.timer1 = timeout
- self.start = 0
-
- self.debugMode = 0
-
- def portInit(self, timeout1):
- portName = self.portAddress[-4:]
- portExist = os.popen('dmesg | grep ' + portName).read()
- self.timer = timeout1
- if portExist == '':
- return 0
- else:
- try:
- self.ser = Serial(
- port=self.portAddress,
- baudrate=self.baudRate,
- bytesize=EIGHTBITS,
- parity=PARITY_NONE,
- stopbits=STOPBITS_ONE
- )
- self.ser.flushOutput() #clean the output buffer from the serial port
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('AT\r')
-
- received = self.__receiveData()
- self.start=1
- if received == 'OK':
- self.portExist = 1
- return 1 #cellphone is OK, receives commands
- elif received == 'TIMEOUT':
- return 'TIMEOUT'
- else:
- return 2 #cellphone has an error
-
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
-
- self.portExist = 3
- return 3
-
- def callNumber(self,numberToCall):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('ATD'+str(numberToCall)+';\r')
- if self.__receiveData() == 'OK':
- return 1
- else:
- return 4
-
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
-
- return 3
- else:
- return 0
-
-
- def hangUp(self):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('AT+CHUP\r')
- received = self.__receiveData()
- if received == 'OK':
- return 1
- elif received == 'ERROR':
- return 2 #other side hang up the call
- else:
- return 4
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
- return 3
- else:
- return 0
-
-
- def closePort(self):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.close()
- return 1
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
- return 3
- else:
- return 0
-
- def getSignalQuality(self):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('AT+CSQ\r')
- if self.__receiveData() == 'OK':
- if self.__receiveData == 'SIGNAL':
- return 1
- else:
- return 4
- else:
- return 2
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
- return 3
-
- else:
- return 0
-
- def receiveCall(self):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- if self.__receiveData() == 'RING':
- self.ser.write('ATA\r')
- if self.__receiveData()=='OK':
- return 1
- else:
- return 4
- else:
- return 2
-
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
- return 3
- else:
- return 0
-
- def currentCall(self):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('AT+CLCC\r')
- received = self.__receiveData()
- if received == 'OK':
- return 2 #not yet in a call
- elif received == 'ACTIVE':
- return 1 #in a call
- elif received == 'HELD':
- return 5 #held call
- elif received == 'DIALING':
- return 6 #dialing
- elif received == 'ALERTING':
- return 7 #alerting the call
- elif received == 'INCOMING':
- return 8 #incoming call
- elif received == 'WAITING':
- return 9 #waiting for a call
-
- else:
- return received #in some other state
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
- return 3
- else:
- return 0
-
- def __receiveData(self):
- def timeout_handler(signum, frame):
- raise TimeoutException()
- if self.start == 0:
- self.timer = 5
- else:
- self.timer = self.timer1
-
- old_handler = signal.signal(signal.SIGALRM, timeout_handler)
- signal.alarm(self.timer)
-
- bufferData = ''
- lines = ''
- line = ''
-
- try:
- while True:
- bufferData = bufferData + self.ser.read(self.ser.inWaiting()) #read the serial port and add it to the buffer variable
- if '\n' in bufferData: #if a new line character is found in the buffer then the cellphone has sent something
- lines = bufferData.split('\n') #parse the buffer variable with the new line character
- last_received = lines.pop(0) #put into last_received variable the first content from lines (FIFO)
-
- bufferData = '\n'.join(lines) #add a new line to the buffer variable
-
- last_received=last_received.split('\n') #parse the last received value with new lines
- line = last_received[0].replace(chr(13), '') #remove \r from the first parsed value in last_received and return me a nicely parsed value :)
- if self.debugMode == 1:
- if len(line) > 0:
- print line
-
- if line == 'OK':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'OK'
-
- elif line == 'ERROR':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'ERROR'
-
- elif line[0:11] == '+CME ERROR:':
- if self.debugMode == 1:
- print 'ERROR:', line
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'ERROR'
-
- elif line == 'RING':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'RING'
-
- elif line[0:5] == '+CSQ:': #+CSQ:
- space = int(string.find(line,' '))+1 #find the (space) sign
- coma = int(string.find(line,',')) #find the , (coma) sign
- self.signalStrength = (int(line[space:coma])*2)-113
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'SIGNAL'
-
- elif line == 'NO CARRIER':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'NO CARRIER'
-
- elif line == 'BUSY':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'BUSY'
-
- elif line[0:6] == '+CLCC:':
-
- if line[11:12] == '0':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'ACTIVE'
- elif line[11:12] == '1':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'HELD'
- elif line[11:12] == '2':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'DIALING'
- elif line[11:12] == '3':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'ALERTING'
- elif line[11:12] == '4':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'INCOMING'
- elif line[11:12] == '5':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'WAITING'
-
- except TimeoutException:
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'TIMEOUT'
-
- except Exception, e:
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- print 'NO GOOD'
- print e
- return 3
diff --git a/Under-Testing/Box2-Code/LogFileClass.py b/Under-Testing/Box2-Code/LogFileClass.py
deleted file mode 100644
index cb152f4..0000000
--- a/Under-Testing/Box2-Code/LogFileClass.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import string
-import datetime
-
-class Logging:
-
- def __init__(self, logFileName):
- self.writeToFile = open(logFileName, 'a')
- self.justStarted = 1
-
- def logEvent(self, event):
- now = str(datetime.datetime.now())
- if self.justStarted == 1:
- self.writeToFile.write('\n\n------------------STARTED THE LOGGING '+ now + ' ------------------\n')
- self.justStarted = 0
- else:
- self.writeToFile.write('On: '+ now + '\t' + 'Event: ' +str(event) + '\n')
-
- def closeLogging(self):
- now = str(datetime.datetime.now())
- self.writeToFile.write('------------------FINISHED THE LOGGING '+ now + ' ------------------')
- self.writeToFile.close()
diff --git a/Under-Testing/Box2-Code/READ ME.txt b/Under-Testing/Box2-Code/READ ME.txt
deleted file mode 100644
index 654b1f2..0000000
--- a/Under-Testing/Box2-Code/READ ME.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-
-Class files:
-
- - ServerClass.py
- This class file is used by handlers as socket communication class to communicate with the controller.
-
- - GSMClass.py
- This class file is used by GSM Handlers to control and talk to the mobile devices.
-
- - LogFileClass.py
- This class is used to make the log files.
-
-Handler files:
-
- - serverHandler.py
-
-How to start the server Handler:
- - you can use SSH connection to the box and type:
- - $ sudo python serverHandler.py $
-
diff --git a/Under-Testing/Box2-Code/ServerClass.py b/Under-Testing/Box2-Code/ServerClass.py
deleted file mode 100644
index 088a2ae..0000000
--- a/Under-Testing/Box2-Code/ServerClass.py
+++ /dev/null
@@ -1,162 +0,0 @@
-import socket
-import sys
-import os
-import string
-import signal
-import fcntl
-import struct
-
-class TimeoutException(Exception):
- pass
-
-class ServerHandler:
-
- def __init__(self,p):
- self.port = p
- ifname = 'eth0' #define here the interface you want to find the ip address
-
- #code for getting our public addresss so I can make the SSH tunneling work
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- publicAddress = socket.inet_ntoa(fcntl.ioctl(
- s.fileno(),0x8915, # SIOCGIFADDR
- struct.pack('256s', ifname[:15]))[20:24])
-
- self.host = publicAddress #None #'127.0.0.1' #symbolic name meaning all available interfaces
- self.s = None
- self.connected = 0
- self.address = "127.0.0.1" #address of the main controller
- self.onceConnected = 0
- self.error = 'No error'
-
- self.debugMode = 0
-
- def openSocket(self):
- self.error = 'No error'
- for res in socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC,
- socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
- af, socktype, proto, canonname, sa = res
-
- try:
- self.s = socket.socket(af, socktype, proto)
- self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #this resolves the bug with live packets
- except socket.error, msg:
- self.s = None
- self.connected = 0
- self.error = str(msg)
- continue
-
- try:
- self.s.bind(sa)
- self.s.listen(1)
- except socket.error, msg:
- self.s.close()
- self.s = None
- self.connected = 0
- self.error = str(msg)
- continue
- break
-
- if self.s is None:
- self.connected = 0
- return 0
- else: #accept the connection
- self.connection, self.address = self.s.accept()
- self.connected = 1
- self.onceConnected = 1
- return 1
-
- def connectedTo(self):
- return self.address
-
- def receiveData(self, timeout):
- if self.connected == 1:
-
- def timeout_handler(signum, frame):
- raise TimeoutException()
-
- try:
-
- old_handler = signal.signal(signal.SIGALRM, timeout_handler)
- signal.alarm(timeout) #start the timeout alarm, for timeout seconds
-
- data = self.connection.recv(1024)
-
- #stop the timeout function
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
-
- if not data:
- self.connected = 0
- return 'NO DATA'
- else:
- return data
-
- except TimeoutException:
- #timeout happened
- signal.signal(signal.SIGALRM, old_handler)
-
- return 'TIMEOUT'
-
- except Exception, e:
- #stop the timeout timer
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
-
- if self.debugMode == 1:
- import traceback
- print traceback.format_exc()
- print e
- self.connected = 0
- if error[0:11] == '[Errno 104]':
- return 3 #the other side reset the connection,[Errno 104] Connection reset by peer
-
- return 2
- else:
- return 0
-
- def sendData(self, data):
- if self.connected == 1:
- try:
- self.connection.send(data)
- return 1
-
- except Exception, e:
- if self.debugMode == 1:
- import traceback
- print traceback.format_exc()
- print e
- self.connecected = 0
- return 2
- else:
- return 0
-
- def closeConnection(self):
- if self.onceConnected == 1:
- try:
- self.connected = 0
- SHUT_RDWR = 2
- self.connection.shutdown(SHUT_RDWR)
- self.connection.close()
- return 1
- except Exception, e:
- self.connected = 0
- error = str(e)
- if self.debugMode == 1:
- import traceback
- print traceback.format_exc()
- print e
- if error[0:11] == '[Errno 107]':
- return 3 #the other side closed the connection before us [Errno 107] Transport endpoint is not connected
- return 2
- else:
- return 0
-
- def killPort(self):
- killResult = os.popen('lsof -i tcp:' + str(self.port) + ' | grep "python " | awk -F" " ' + "'{print $2}'").read()
- killResult = killResult.replace('\n','')
- print killResult
- if killResult!='':
- print killResult
- killPort = os.popen("kill -9 " + killResult).read()
- return 1
- return 0
diff --git a/Under-Testing/Box2-Code/serverHandler.py b/Under-Testing/Box2-Code/serverHandler.py
deleted file mode 100644
index 37cab37..0000000
--- a/Under-Testing/Box2-Code/serverHandler.py
+++ /dev/null
@@ -1,344 +0,0 @@
-import ServerClass
-import GSMClass
-import LogFileClass
-import sys
-import os
-from time import sleep
-def restart_program():
- """Restarts the current program.
- Note: this function does not return. Any cleanup action (like
- saving data) must be done before calling this function."""
- python = sys.executable
- os.execl(python, python, * sys.argv)
-
-
-################################
-################################
-######SET THESE PARAMETERS######
-################################
-portListen = 50008 #port number of handler
-nameOfLogFile = 'handler.log' #name of the log file
-portAddress = '/dev/ttyUSB0'
-baudRate = 19200
-################################
-################################
-################################
-
-#create the log file class
-logger = LogFileClass.Logging(nameOfLogFile)
-#use this variable as the error counter
-errorCount = 0
-#start logging all events
-logger.logEvent('')
-#counter how many time we were in the while loop
-whileCounter =0
-
-#define global varibales
-global lastState
-global resetState
-global deviceError
-lastState = 0
-resetState = 0
-deviceError = 0
-
-def initSystem():
- print 'init system'
-
- global handlerSocket
- global gsmDevice
- global initTalkVar
- global lastState
- global initDevice
- global numberToCall
- global resetState
- global deviceError
-
- initTalkVar = 0 #variable used to know if we initialized the start talk
- lastState = 0 #variable used to know
- numberToCall = '000' #number to call
- resetState = 0
-
- handlerSocket = ServerClass.ServerHandler(portListen)
- logger.logEvent('LISTEN ON PORT: '+str(portListen))
- anyConnection = handlerSocket.openSocket()
- #add this if you need it
- gsmDevice = GSMClass.serialPort(portAddress, baudRate, 15)
- initDevice = gsmDevice.portInit(5)
- ########################################################
-
- #add nice formating to the log file :)
-
- print 'any connection ' + str(anyConnection)
- print 'initDevice ' + str(initDevice)
-
- if initDevice!= 1:
- deviceError = 1
- else:
- deviceError = 0
-
-
- if anyConnection == 1 and initDevice == 1:
- logger.logEvent('CONNECTION ESTABLISHED AND DEVICE WORKING: ' + str(handlerSocket.connectedTo()))
- return 1
-
- elif anyConnection == 1 and initDevice != 0:
- logger.logEvent('$connection established but device not working: ' + str(handlerSocket.connectedTo()))
- return 2
- else:
- logger.logEvent('$no connection')
- logger.logEvent('$else case in init system' + str(anyConnection) + ' ' + str(initDevice) + ' ')
- resetState = 1
- return 0
-
-def receiveMessage(timeout):
-
- message = str(handlerSocket.receiveData(timeout))
- print 'I RECEIVED THE FOLLOWING MESSAGE' + message
- if message == 'NO DATA':
- print 'try to close the connection' + str(handlerSocket.closeConnection())
- global resetState
- resetState = 1
- return 1
- if message != '0' and message !='NO DATA':
- print 'in receive message', message, lastState
-
- if message == 'HELLO HANDLER' and lastState == 0:
- outcome = initTalk()
- if outcome == 1:
- logger.logEvent('TALK INITIALIZATION SENT')
- else:
- logger.logEvent('$talk initialization not sent: ' + str(outcome))
-
- elif message == 'RECEIVER' and lastState == 1:
- outcome = initReceiver()
- if outcome == 1:
- logger.logEvent('RECEIVER READY SENT')
- else:
- logger.logEvent('$receiver ready not sent: ' + str(outcome))
- return 7
-
- elif message == 'RECEIVE START' and lastState == 2:
- outcome = receiveStart()
- print 'outcome ' + str(outcome)
- if outcome == 1:
- logger.logEvent('RECEIVE STATUS REPORTED')
- return 2
- else:
- logger.logEvent('$receive status not reported: ' + str(outcome))
- return 3
-
- elif message[0:6] == 'CALLER' and lastState == 1:
- outcome = initCaller()
-
- global numberToCall
- numberToCall = message[7:]
- if outcome == 1:
- logger.logEvent('CALLER READY SENT')
- else:
- logger.logEvent('$caller ready not sent: ' + str(outcome))
- return 6
-
- elif message == 'CALL START' and lastState == 4:
- outcome = callStart(numberToCall)
- print 'outcome ' + str(outcome)
- if outcome == 1:
- logger.logEvent('CALLER STATUS SENT')
- return 4
- else:
- logger.logEvent('$caller status not sent: ' + str(outcome))
- return 5
-
- elif message == 'TERMINATE CONNECTION' and (lastState == 5 or lastState == 3):
- outcome = terminateConnection()
- if outcome == 1:
- logger.logEvent('TERMINATED THE CONNECTION AFTER TEST')
- else:
- logger.logEvent('$connection could not be terminated after the test: ' + str(outcome))
-
- elif message == 'TERMINATE CONNECTION':
- outcome = terminateConnection()
- if outcome == 1:
- logger.logEvent('TERMINATED THE CONNECTION IN MIDDLE. IN STATE: ' + str(lastState) )
- else:
- logger.logEvent('$connection could not be terminated in middle: ' + str(outcome) + ' in state: ' + str(lastState))
- else:
- print message
- outcome = other()
- logger.logEvent('other appeared')
-
- return 1
-
-########INIT TALK PART########
-def initTalk():
- print 'init talk'
- #initialize the talk between handler and controller
- global lastState
- test = gsmDevice.portInit(2)
- if test != 1:
- test = gsmDevice.portInit(2)
- if test != 1:
- sendMessage = handlerSocket.sendData('DEVICE NOT READY')
- else:
- lastState = 1
- sendMessage = handlerSocket.sendData('HELLO CONTROLLER')
- else:
- lastState = 1
- sendMessage = handlerSocket.sendData('HELLO CONTROLLER')
- return sendMessage
-##############################
-
-
-########RECEIVE PART########
-def initReceiver():
- print 'initReceiver'
-
- #init function to initialize the receiver
- global lastState
- lastState = 2
- sendMessage = handlerSocket.sendData('RECEIVER READY')
- return sendMessage
-
-def receiveStart():
- print 'receiveStart'
-
- #wait for a call and report if you received it and it was successfull or not
- global lastState
- global deviceError
- lastState = 3
- if deviceError == 0:
- receiveCall = gsmDevice.receiveCall()
- if receiveCall == 'TIMEOUT':
- deviceError = 1
- print 'device error in RECEIVE'
- else:
- receiveCall = 0
-
- if deviceError == 0:
- if receiveCall == 1:
- callSuccess = 'CALL OK'
- else:
- callSuccess = 'CALL NOT OK'
-
-
-
- sendMessage = handlerSocket.sendData(callSuccess)
- if deviceError==0:
- tryHangUp = gsmDevice.hangUp()
- return sendMessage
-############################
-
-
-########CALL PART########
-def initCaller():
- print 'initCaller1'
-
- #initialize caller here
- global lastState
- lastState = 4
- sendMessage = handlerSocket.sendData('CALLER READY')
- return sendMessage
-
-def callStart(numberToCall):
- print 'initCaller2'
-
- #call the number here
- global lastState
- global deviceError
- lastState = 5
-
- callSuccess = 'CALL NOT OK'
-
- if deviceError==0:
- tryCall = gsmDevice.callNumber(numberToCall)
- if tryCall == 'TIMEOUT':
- deviceError = 1
- print 'device error in CALL'
- else:
- tryCall=0
-
-
- if tryCall != 1:
- callSuccess = 'CALL NOT OK'
- else:
- print 'try call result'+ str(tryCall)
- if tryCall != 'TIMEOUT':
- sleep(2)
- activeCall = gsmDevice.currentCall()
- counter = 0
- while(activeCall!=1):
- sleep(1)
- activeCall = gsmDevice.currentCall()
- if counter == 10:
- break
- counter += 1
-
- if activeCall == 1:
- callSuccess = 'CALL OK'
- else:
- callSuccess = 'CALL NOT OK'
-
- handResponse = handlerSocket.sendData(callSuccess)
-
- if deviceError==0:
- tryHangUp = gsmDevice.hangUp()
-
- return handResponse
-#########################
-
-
-########TERMINATE PART########
-def terminateConnection():
- print 'terminate connection'
- global resetState
- close = handlerSocket.closeConnection()
- resetState = 1
- return close
-##############################
-
-########TERMINATE PART########
-def other():
- print 'other'
- global lastState
- global resetState
-
- close = handlerSocket.closeConnection()
- lastState = 8
- resetState = 1
- return 1
-##############################
-
-
-
-while 1:
-
- test = initSystem()
- if test == 1:
- print 'initialized system'
- receivedMessage = 0
- while receivedMessage < 8 and resetState!= 1:
- if receivedMessage == 4 or receivedMessage == 5 or receivedMessage == 2 or receivedMessage == 3:
- receivedMessage = receiveMessage(20)
- else:
- receivedMessage = receiveMessage(30)
- elif test ==2:
- print 'initialized system but device not working'
- logger.logEvent('initialized system but device not working')
- receivedMessage = 0
- print 'reset state: ', resetState
- while receivedMessage < 4 and resetState!= 1:
- handlerSocket.sendData('DEVICE NOT READY')
- print 'I AM IN THIS WHILE LOOP'
-
- if receivedMessage == 4 or receivedMessage == 5 or receivedMessage == 2 or receivedMessage == 3:
- receivedMessage = receiveMessage(20)
- else:
- receivedMessage = receiveMessage(30)
-
- elif test ==0:
- print 'nobody can connect, reboot board, restart cellphone'
- logger.logEvent('nobody can connect, reboot board, restart cellphone')
- logger.closeLogging()
- del logger
- del handlerSocket
- del gsmDevice
- restart_program()
diff --git a/Under-Testing/ReadMe.txt b/Under-Testing/ReadMe.txt
deleted file mode 100644
index 065326e..0000000
--- a/Under-Testing/ReadMe.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-
-How to install the software on a new system:
-(More infromation and details can be found in the report, in chapter 9 (Employing the test Software system) and chapter 7.1 (Encryption on the communication chanels)
-
-1. You need to install the required libraries which are used by the software:
- (http://lab.ks.uni-freiburg.de/projects/gsm-selftest/wiki/Library_req)
-
- 1.a. PJSIP Library.
- - First you need to have The Utilities Packets and compilers, e.g. make, gcc, and binutils.
- - Second you need to have the Python development package, to build the C extension. "python2.4-dev or python2.5-dev". The name depends on the installed version of python on the system. (we suggest python 2.7)
- - Third, dowload the required library package for PJSIP. http://www.pjsip.org/download.htm
- - Using Python build script:
- 1. Build the PJSIP libraries first with the usual "./configure && make dep && make" commands.
- 2. Go to pjsip-apps/src/python directory.
- 3. Run "sudo python ./setup.py install" or just "sudo make"
- 4. $ cd your-pjsip-root-dir
- 5. $ ./configure && make dep && make
- 6. $ cd pjsip-apps/src/python
- 7. $ sudo make
- - Test the installation of the library by typing:
- $ python
- > import pjsua
- > ^Z
- $
- - If you don't get any error message while importing the library, you are done.
-
- 1.b. Setproctile library
- - You need to install "easy_install" first:
- $ sudo apt-get install python-setuptools
-
- - Now install setproctile using the following command:
- $ sudo easy_install setproctitle
-
- 1.c. Install socket library for python:
- - $ sudo apt-get install python-serial
-
- 1.d. Installing PhpMyAdmin:
- - $ sudo apt-get install phpmyadmin
-
- 1.e. Install MySQL Server:
- - $ sudo apt-get install mysql-server
-
- 1.f. Install MySQLDB library for python:
- - $ sudo apt-get install python-mysqldb
-
-2. Configuration of the SSH to make a virtual tunnel with the GSMBoxes.
- Tutorials how to configure the SSH tunneling are in the report, chapter 7.1 or you can see it on the given link which we used as well:
- http://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id/
-
- - The software communicates with the Beagle box using the port number 7884. If you have some problems on the beagle board and need to reinstall the system, please make sure that the SSH port is 7884.
-
-3. Configuring HTTPS and .htaccess on the server. You can find the tutorials how to configure HTTPS and .htaccess in the report, section 7.2.
-
-4. The username and password for MySQL.
- The default username and password are stored in these files: initTestClass.py, GsmSelfTest.py, UsbDetectClass.py and truthtableClass.py in the initDB() function. You need to edit your login information for the database in these files.
-
-5. To start the software testing, you need first to start manually startSoftware.py:
- - $ python startSoftware.py
-
-
-
diff --git a/Under-Testing/Server-Code-New/.DS_Store b/Under-Testing/Server-Code-New/.DS_Store
deleted file mode 100644
index 5008ddf..0000000
--- a/Under-Testing/Server-Code-New/.DS_Store
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Server-Code-New/._.DS_Store b/Under-Testing/Server-Code-New/._.DS_Store
deleted file mode 100644
index 941570a..0000000
--- a/Under-Testing/Server-Code-New/._.DS_Store
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Server-Code-New/._handler.txt b/Under-Testing/Server-Code-New/._handler.txt
deleted file mode 100644
index a322a67..0000000
--- a/Under-Testing/Server-Code-New/._handler.txt
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Server-Code-New/ClientClass.py b/Under-Testing/Server-Code-New/ClientClass.py
deleted file mode 100644
index 46c3b00..0000000
--- a/Under-Testing/Server-Code-New/ClientClass.py
+++ /dev/null
@@ -1,123 +0,0 @@
-import socket
-import sys
-import os
-import string
-import signal
-
-class TimeoutException(Exception):
- pass
-
-class Connection:
- def __init__(self, h, p):
- self.host = h
- self.port = p
- self.s = None
- self.connected = 0
-
- self.debugMode = 0
-
- def connect(self):
- self.s = None
-
- for res in socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC, socket.SOCK_STREAM):
- af, socktype, proto, canonname, sa = res
- try:
- self.s = socket.socket(af, socktype, proto)
- self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #this resolves the bug with live packets
- except socket.error, msg:
- self.s = None
- self.connected = 0
- continue
- try:
- self.s.connect(sa)
- except socket.error, msg:
- self.s.close()
- self.connected = 0
- self.s = None
- continue
- break
- if self.s is None:
- self.connected = 0
- return 0 #couldn't connect to the server
- else:
- self.connected = 1
- return 1 #successfully connected to the server
-
- def sendData(self, data):
- if self.connected == 1:
- try:
- self.s.send(data)
- return 1
- except Exception, e:
- if self.debugMode == 1:
- import traceback
- print traceback.format_exc()
- print e
- self.connected = 0
- return 2
-
- else:
- return 0
-
- def receiveData(self, timeout):
- if self.connected == 1:
-
- def timeout_handler(signum, frame):
- raise TimeoutException()
-
- old_handler = signal.signal(signal.SIGALRM, timeout_handler)
- signal.alarm(timeout) #start the timeout alarm, for timeout seconds
- try:
- data = self.s.recv(1024)
-
- #stop the timeout function
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
-
- return data
-
-
- except TimeoutException:
- #timeout happened
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'TIMEOUT'
-
- except Exception, e:
-
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
-
- error = str(e)
- if self.debugMode == 1:
- import traceback
- print traceback.format_exc()
- print e
- self.connected = 0
- if error[0:11] == '[Errno 104]':
- return 3 #the other side reset the connection,[Errno 104] Connection reset by peer
-
- return 2
- else:
- return 0
-
- def closeConnection(self):
- if self.connected == 1:
- try:
- self.connected = 0
- SHUT_RDWR = 2
- self.s.shutdown(SHUT_RDWR)
- self.s.close()
- return 1
- except Exception, e:
- self.connected = 0
- error = str(e)
- if self.debugMode == 1:
- import traceback
- print traceback.format_exc()
- print e
- if error[0:11] == '[Errno 107]':
- return 3 #the other side closed the connection before us, [Errno 107] Transport endpoint is not connected
- return 2
- else:
- return 0
diff --git a/Under-Testing/Server-Code-New/ControllerClass.py b/Under-Testing/Server-Code-New/ControllerClass.py
deleted file mode 100644
index 4ed0d9d..0000000
--- a/Under-Testing/Server-Code-New/ControllerClass.py
+++ /dev/null
@@ -1,361 +0,0 @@
-import sys
-import os
-import subprocess
-import SSHTunnelBoxClass
-import ClientClass
-import random
-import csv
-
-import LogFileClass
-logger = LogFileClass.Logging('TestProcessLog.log')
-
-from time import sleep
-
-
-class controller:
-
- def __init__(self, callFrom, callPortName, accCaller, callTo, destPortName, destNo, accDest):
-
- self.callFrom = callFrom
- self.dest = callTo
- self.destNo = destNo
- self.accDest = accDest
- self.accCaller = accCaller
- self.callPortName = callPortName
- self.destPortName = destPortName
- self.portCaller = None
- self.portDest = None
- self.resultCaller = None
- self.resultDest = None
- self.testResult = None
-
- def FuncTest(self):
-
- logger.logEvent(' -- -X- --')
-
- self.initCaller()
-
- if self.callFrom =="GSMRZ3" or self.callFrom =="GSMRZ2": # wait until ssh connection establish
- if self.continues == 1:
- #putting 6 seconds sleep to prevent unsuccess login using SSH since we have problem with duration time loging into beagle board
- sleep(6)
- self.callerGreeting()
- else:
- self.connected = 'NOT OK'
- else:
- #waiting 2 seconds if doesnt use ssh connection until handler ready
- sleep(2)
- self.callerGreeting()
-
- logger.logEvent('Status Handler Connection :'+self.connected)
- if self.connected == 'OK':
-
- self.caller.sendData('CALLER|'+self.destNo)
- callerHandler = self.caller.receiveData(25)
- #waiting ready message from caller
-
- if callerHandler == "CALLER READY":
- logger.logEvent('Caller handler : Ready')
- self.initReceiver()
- if self.dest =="GSMRZ3" or self.dest =="GSMRZ2": # wait until ssh connection establish
- if self.continues == 1:
- #putting 6 seconds sleep to prevent unsuccess login using SSH since we have problem with duration time loging into beagle board
- sleep(6)
- self.receiverGreeting()
- else:
- self.connected = 'NOT OK'
- else:
- #waiting 2 seconds if doesnt use ssh connection until handler ready
- sleep(2)
- self.receiverGreeting()
-
- logger.logEvent('Status Handler Connection :'+self.connected)
- if self.connected == 'OK':
-
- self.receiver.sendData('RECEIVER')
- destHandler = self.receiver.receiveData(25)
- #waiting ready message from destination
-
- if destHandler == 'RECEIVER READY':
- logger.logEvent('Receiver handler : Ready')
- self.startCall()
- self.waitingFeedback()
-
- #Device destination having error after handler ready to receive call.
- elif destHandler == 'DEVICE NOT READY':
- self.testResult == 802
- logger.logEvent('802 General Device Error: Destination device no respond timeout')
- self.initTerminate()
- else:
- self.testResult = 604
- logger.logEvent('604 General Handler Error: Destination handler no respond timeout')
- self.initTerminate()
-
- #can connect to handler but device destination not ready to do the test.
- elif self.connected == 'DEVICE NOT READY':
- self.testResult = 802
- logger.logEvent('802 General Device Error: Destination device no respond timeout')
- self.initTerminate()
- else:
- logger.logEvent('998 General Handler Error: Could not connect Destination handler')
- self.testResult = 998
- self.caller.sendData('TERMINATE CONNECTION')
- self.caller.closeConnection()
- self.initCancelTest()
- else:
- self.testResult = 605
- logger.logEvent('605 General Handler Error: caller handler no respond timeout')
-
- self.caller.sendData('TERMINATE CONNECTION')
- self.caller.closeConnection()
-
- #can connect to handler but device caller not ready to do the test.
- elif self.connected == 'DEVICE NOT READY':
- self.testResult = 801
- self.caller.sendData('TERMINATE CONNECTION')
- self.caller.closeConnection()
- logger.logEvent('802 General Device Error: Caller device no respond timeout')
- self.initCancelTest()
- else:
- self.testResult = 999
- logger.logEvent('999 General Handler Error: Could not connect to Caller handler')
-
- def writeToFile(self, AccountInfo):
- try:
- with open('handler.txt', 'w') as F:
- writer = csv.writer(F)
- writer.writerow([AccountInfo])
- F.close()
- except ValueError:
- print "can't write to file"
-
- def initCancelTest(self):
- #close SSH connection when using gsmBox and destination doesnt respond. to make sure SSH connection are terminate
- logger.logEvent('init Cancel test')
- if self.callFrom[0:5] == 'GSMRZ':
- if self.callFrom != 'GSMRZ1':
- # close SSH tunneling
- self.boxCaller.killTunneling()
-
- # waiting results state
- def waitingFeedback(self):
- logger.logEvent('Waiting Feedback')
- self.resultDest = self.receiver.receiveData(20)
- self.resultCaller = self.caller.receiveData(20)
- #print 'result '+self.resultCaller+'--'+self.resultDest
- if self.resultCaller == 'DEVICE NOT READY':
- logger.logEvent('Task :'+self.callFrom+' - '+self.dest)
- logger.logEvent('Caller DEVICE NOT READY')
- self.testResult = 801
- self.initTerminate()
-
- elif self.dest == 'DEVICE NOT READY':
- logger.logEvent('Task :'+self.callFrom+' - '+self.dest)
- logger.logEvent('Caller DEVICE NOT READY')
- self.testResult = 802
- self.initTerminate()
-
- elif self.resultCaller == 'CALL OK' and self.resultDest =='CALL OK':
- logger.logEvent('Task :'+self.callFrom+' - '+self.dest)
- logger.logEvent('Test Succeed')
- self.testResult = 200
- self.initTerminate()
- else:
- #build specially only for Eplus card. since they use prepaid card.
- if self.dest == 'GSMExt.Eplus':
- if self.resultCaller == 'CALL OK' and self.resultDest <> 'TIME OUT':
- logger.logEvent('Task :'+self.callFrom+' - '+self.dest)
- logger.logEvent('Test Failed - Eplus No credit on Eplus')
- self.testResult = 402
- self.initTerminate()
- else:
- logger.logEvent('Test Failed')
- logger.logEvent('Task :'+self.callFrom+' - '+self.dest)
- self.testResult = 486
- self.initTerminate()
-
- else:
- #one or both of the handler send un success test. assign failed to this test
- if self.resultCaller <> 'CALL OK' or self.resultDest <> 'CALL OK':
- logger.logEvent('Task :'+self.callFrom+' - '+self.dest)
- logger.logEvent('Test Failed')
- self.testResult = 486
- self.initTerminate()
-
- #send start call message to caller
- def startCall(self):
- logger.logEvent('Start Call')
- self.receiver.sendData('RECEIVE START')
- self.caller.sendData('CALL START')
-
- def initAccount(self, account, handler, PortName, portCom):
-
- accConf = account
- self.username = accConf[0:accConf.find(':')]
-
- line = accConf[accConf.find(':')+1:]
- self.password = line[0:line.find(':')]
-
- newLine = line[line.find(':')+1:]
- self.server = newLine[0:newLine.find(':')]
-
- textFile = 'Account:'+str(self.username)+':'+str(self.password)+':'+str(self.server)+':'+str(handler)+':'+str(PortName)+':'+str(portCom)
- self.writeToFile(textFile)
-
- # define the caller configuration such as port name and port caller.
- def initCaller(self):
- logger.logEvent('init Caller')
- logger.logEvent(self.callFrom)
- self.portCaller = random.randint(30000,60000)
-
- if self.callFrom[0:4] == 'GSMR':
- if self.callFrom =="GSMRZ1":
- self.initAccount(self.accCaller,self.callFrom, self.callPortName,self.portCaller)
- self.initGSM(self.portCaller, self.callPortName, self.callFrom)
- else:
- self.initAccount(self.accCaller, self.callFrom, self.callPortName,self.portCaller)
- #open SSH tunneling
-
- self.boxCaller = SSHTunnelBoxClass.SSHTunneling(self.portCaller, 50008, self.server, self.username, self.password)
- status = self.boxCaller.startTunneling()
- logger.logEvent('SSH Status :'+str(status))
-
- #check whether the SSH tunneling succes or not, 0 is failed!
- if status!= 0:
- self.continues = 1
- else:
- self.continues = 0
- elif self.callFrom[0:4] == 'GSME':
- self.initAccount(self.accCaller,self.callFrom, self.callPortName,self.portCaller)
- self.initGSM(self.portCaller, self.callPortName, self.callFrom)
-
- else:
- #open the SIP handler
- self.initAccount(self.accCaller,self.callFrom, self.callPortName,self.portCaller)
- script = 'SIPHandler.py'
- subprocess.Popen(['python',script], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-
- # define the destination configuration such as port name and port caller.
- def initReceiver(self):
- logger.logEvent('init Receiver')
- logger.logEvent(self.dest)
- self.portDest = random.randint(30000,60000)
-
- if self.dest[0:4] == 'GSMR':
- if self.dest =="GSMRZ1":
- self.initAccount(self.accDest, self.dest, self.destPortName,self.portDest)
- self.initGSM(self.portDest, self.destPortName, self.dest)
- else:
- self.initAccount(self.accDest, self.dest, self.destPortName,self.portDest)
- #open SSH tunneling
-
- self.boxDest = SSHTunnelBoxClass.SSHTunneling(self.portDest, 50008, self.server, self.username, self.password)
- status = self.boxDest.startTunneling()
-
- #check whether the SSH tunneling succes or not, 0 is failed!
- logger.logEvent('SSH Status :'+str(status))
- if status!= 0:
- self.continues = 1
- else:
- self.continues = 0
-
- elif self.dest[0:4] == 'GSME':
- self.initAccount(self.accDest, self.dest, self.destPortName,self.portDest)
- self.initGSM(self.portDest, self.destPortName, self.dest)
-
- else:
- #self.portDest = 50100
- self.initAccount(self.accDest, self.dest, self.destPortName,self.portDest)
- script = 'SIPHandler.py'
- subprocess.Popen(['python',script], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-
- # send terminate message to Handlers
- def initTerminate(self):
- logger.logEvent('TERMINATE CONNECTION')
- self.caller.sendData('TERMINATE CONNECTION')
- self.receiver.sendData('TERMINATE CONNECTION')
-
- if self.callFrom[0:5] == 'GSMRZ':
- if self.callFrom != 'GSMRZ1':
- # close SSH tunneling
- self.boxCaller.killTunneling()
- if self.dest[0:5] == 'GSMRZ':
- if self.dest != 'GSMRZ1':
- # close SSH tunneling
- self.boxDest.killTunneling()
-
- #close port communication
- self.receiver.closeConnection()
- self.caller.closeConnection()
-
- def callerGreeting(self): # send greeting message to the caller handler
- logger.logEvent('Caller Greeting')
- self.connected = None
- #open connection to the Handler
- self.caller = ClientClass.Connection('localhost',self.portCaller)
- self.caller.connect()
-
- if self.caller.connected == 1:
- #connection establish and send hallo message to handler
- logger.logEvent('Connected to Caller Handler')
- self.caller.sendData('HELLO HANDLER')
- #waiting handler respond
- message = self.caller.receiveData(20)
-
- if message == 'HELLO CONTROLLER':
- # caller handler send hello message
- logger.logEvent('Caller Handler respond')
- self.connected = 'OK'
- elif message == 'DEVICE NOT READY':
- # the handler found the device not ready to making test.
- logger.logEvent('Connect to Caller but device doesnt work')
- self.connected = 'DEVICE NOT READY'
- else:
- logger.logEvent('Cannt connect to Caller')
- self.connected = 'NOT OK'
- else:
- #can't connect to caller handler
- logger.logEvent('Cannt connect to Caller')
- self.connected = 'NOT OK'
-
- def receiverGreeting(self): # send greeting message to the destination handler
- logger.logEvent('Receiver Greeting')
- self.connected = None
-
- #open connection to the Handler
- self.receiver = ClientClass.Connection('localhost', self.portDest)
- self.receiver.connect()
-
- if self.receiver.connected == 1:
- #connection establish and send hallo message to handler
- logger.logEvent('Connected to Receiver Handler')
- self.receiver.sendData('HELLO HANDLER')
- #waiting handler respond
- message = self.receiver.receiveData(20)
-
- # destination handler send hello message
- if message == 'HELLO CONTROLLER':
- logger.logEvent('Receiver Handler respond')
- self.connected = 'OK'
-
- # the handler found the device not ready to making test.
- elif message == 'DEVICE NOT READY':
- logger.logEvent('Connect to Caller but device doesnt work')
- self.connected = 'DEVICE NOT READY'
- else:
- logger.logEvent('receiver handler not respond')
- self.connected = 'NOT OK'
- else:
- #can't connect to destintaion handler
- logger.logEvent('Cannt connect to Receiver')
- self.connected = 'NOT OK'
-
- def initGSM(self, portCommunication, portDevice, handler):
- #open GSM Handler
- logger.logEvent('Init GSM')
- script = 'GSMHandler.py'
- subprocess.Popen(['python',script], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-
-
-
-
diff --git a/Under-Testing/Server-Code-New/DbClass.py b/Under-Testing/Server-Code-New/DbClass.py
deleted file mode 100644
index d937eb1..0000000
--- a/Under-Testing/Server-Code-New/DbClass.py
+++ /dev/null
@@ -1,445 +0,0 @@
-import MySQLdb
-import string
-
-class DBMySQLConnection:
- def __init__(self):
- #initialize at the start all the user parameters
- self.usern = "root"
- self.passw = ""
- self.host = "localhost"
- self.db = "gsmselftesting"
- self.connectionCreated = 0
- self.tasksList = list()
- self.callerLists = list()
- self.errCode = None
- self.deviceUpdate = None
- self.lockSet = 0
- global debugMode
- debugMode = 0
-
- def connectDB(self):
- try:
- #try to connect
- self.datBaseConn=MySQLdb.connect(self.host,self.usern, self.passw,self.db)
- self.datBaseConn.paramstyle = 'format'
- self.cur = self.datBaseConn.cursor() #make the cursor, used for sending queries
- self.connectionCreated = 1 #use it as an indicator that the connection was created
- return 1
-
- except MySQLdb.Error, e:
- #if we have an error then try to catch it
- error=str(e)
- if error[1:5] == '1045':
- #wrong username or password
- return 0
- elif error[1:5] == '2002':
- #can't connect to mysql, mysql shutdown or wrong host
- return 2
- else:
- if debugMode == 1:
- print error
- return 3
-
- def closeDBConn(self):
- #close the connection to the database here
- if self.connectionCreated == 1:
- try:
- #close the cursor and then the connection to the DB
- self.cur.close()
- self.datBaseConn.close()
- return 1
- except MySQLdb.Error, e:
- #in case of an error
- if debugMode == 1:
- error = str(e)
- print error
- return 3
- else:
- #I never really had a connection
- return 0
-
- def anyTasksToDo(self):
- #see are there any jobs to be executed and make a list out of it
- if self.connectionCreated == 1:
- try:
- self.cur.execute("SELECT * FROM TempTaskTable")
- output = self.cur.fetchall() #get the mysql response
- #parse the output from the mysql by creating a list
- #with lists where each attribue(column) gets independent
- #element of the list
- for record in output:
- columns = list()
- for entry in record:
- columns.append(str(entry))
- #columns.append(str(0))
- self.tasksList.append(columns)
-
- if not self.tasksList:
- return 0
- else:
- return 1
- except MySQLdb.Error, e:
- error = str(e)
- if error[1:5] == '1146':
- return 2 #the table doesn't exist
- if debugMode == 1:
- print str(e)
- return 3
- else:
- return 0
-
- def cleanTasksList(self):
- if self.connectionCreated == 1:
- del self.tasksList[:]
- return 1
- else:
- return 0
-
-
- def deviceAddress(self,deviceName):
- if self.connectionCreated == 1:
- try:
- successful = self.cur.execute("SELECT `portName`,`number`, `username`, `password`, `server` FROM DeviceAddressTable where `deviceName`=%s", deviceName)
- output = self.cur.fetchall()
- deviceAddr = ''
- for record in output:
- columns = list()
- for entry in record:
- columns.append(str(entry))
- deviceAddr = columns
-
- return deviceAddr
- except MySQLdb.Error, e:
- error = str(e)
- if error[1:5] == '1146':
- return 2 #the table doesn't exist
- if debugMode == 1:
- print str(e)
- return 3 #some error happened
- else:
- return 0 #I am not connected
- def deviceList(self): # taking all device list and put it in the list
- deviceLists = list()
- if self.connectionCreated == 1:
- try:
- tuple = self.cur.execute("SELECT `deviceName` FROM DeviceAddressTable")
- output = self.cur.fetchall()
-
- for record in output:
- columns = list()
- for entry in record:
- columns.append(str(entry))
- deviceLists.append(columns)
- return deviceLists
-
-#return deviceAddr
- except MySQLdb.Error, e:
- error = str(e)
- if error[1:5] == '1146':
- return 2 #the table doesn't exist
- if debugMode == 1:
- print str(e)
- return 3 #some error happened
- else:
- print 'not conn'
- return 0 #I am not connected
-
- def GSMPrefix(self):
- if self.connectionCreated == 1:
- try:
- successful = self.cur.execute("SELECT * FROM GSMPrefix")
- output = self.cur.fetchall() #get the mysql response
- GSMListPrefix = list()
- for record in output:
- columns = list()
- for entry in record:
- columns.append(str(entry))
- GSMListPrefix.append(columns)
-
- return GSMListPrefix
-
- except MySQLdb.Error, e:
- error = str(e)
- if error[1:5] == '1146':
- return 2 #the table doesn't exist
- if debugMode == 1:
- print str(e)
- return 3 #some error happened
- else:
- return 0 #I am not connected
-
- def updateGSMDevice(self, deviceName, newPortName, newNumber):
- if self.connectionCreated == 1:
- try:
- try:
- #delete old device portName which assign to this port, to prevent double port address in the table.
- stmt = "UPDATE DeviceAddressTable SET portName = 'missing' WHERE portName = '"+newPortName+"'"
- self.cur.execute(stmt)
- except ValueError:
- print "Error execute query"
-
- stmt = "UPDATE DeviceAddressTable SET portName = '"+ newPortName + "', number = '"+ newNumber+ "' WHERE deviceName = '" + deviceName+ "'"
- self.cur.execute(stmt)
- return 1
-
- except MySQLdb.Error, e:
- if debugMode == 1:
- print str(e)
- return 3
- else:
- return 0
-
- def updatePingResult(self, taskNo, sipServer, sipGate, unisip, gsmBox1, gsmBox2):
- if self.connectionCreated == 1:
- try:
- successful = self.cur.execute("INSERT INTO PingResultTable(taskNo, sipServer, sipGate, unisip, gsmBox1, gsmBox2) VALUES ('%i', '%i','%i', '%i','%i','%i')"%( int(taskNo),int(sipServer), int(sipGate), int(unisip), int(gsmBox1), int(gsmBox2)))
-
- output = self.cur.fetchone()
-
- if debugMode == 1:
- print output
- if successful == 0:
- return 1 #ping table updated
- else:
- return 4 #the taskNo didn't exist
-
-
- except MySQLdb.Error, e:
- if debugMode == 1:
- print str(e)
- return 3
- else:
- return 0
-
- def deleteTempTask(self, taskID):
- if self.connectionCreated == 1:
- try:
- successful = self.cur.execute("DELETE FROM TempTaskTable WHERE taskID=%i"%(int(taskID)))
- output = self.cur.fetchone()
-
- if debugMode == 1:
- print output
-
- if successful == 1:
- return 1 #deleted it
- else:
- return 4 #that taskID didn't exist or something else
- except MySQLdb.Error, e:
- if debugMode == 1:
- print str(e)
- return 3
-
- else:
- return 0
-
- def addResult(self, taskID, result):
- if self.connectionCreated == 1:
- try:
- successful = self.cur.execute("INSERT INTO ResultTable(taskID, result) VALUES ('%i', '%i')"%(int(taskID), int(result)))
- output = self.cur.fetchone()
-
- if debugMode == 1:
- print output
- if successful == 1:
- return 1 #successfully added the result
- else:
- return 4 #hmmm
- except MySQLdb.Error, e:
- error = str(e)
- if error[1:5] == '1062':
- return 2 #duplicate entry for the key
- if debugMode == 1:
- print str(e)
- return 3
- else:
- return 0
-
-
- def errorCode(self,code):
- if self.connectionCreated == 1:
- try:
- successful = self.cur.execute("SELECT description FROM ErrorCodeTable where `respondCode`=%s", code)
- data = self.cur.fetchone()
- self.errCode = data[0]
- return self.errCode
-
- except MySQLdb.Error, e:
- error = str(e)
- if error[1:5] == '1146':
- return 2 #the table doesn't exist
- if debugMode == 1:
- print str(e)
- return 3 #some error happened
- else:
- return 0 #I am not connected
-
- def lockMutex(self, seconds):
- if self.connectionCreated == 1:
- try:
- successful = self.cur.execute("SELECT IS_FREE_LOCK('SoftwareStarted')")
- output = self.cur.fetchone()
- if output[0] == 1:
- #resource is free which means software is not started yet
- successful = self.cur.execute("SELECT GET_LOCK('SoftwareStarted', %i)"%(int(seconds)))
-
- output1 = self.cur.fetchone()
- if output1[0] == 1:
- #I got the lock now
- self.lockSet = 1
- return 1
- elif output1[0] == 0:
- return 7 #if the attempt timed out (for example, because another client has previously locked the name)
- else:
- return 6 # if an error occurred (such as running out of memory or the thread was killed with
- elif output[0] ==0:
- return 4 #software is already running and somebody has allocated the mutex
- else:
- #means some not so good bug
- return 5 # if an error occurs (such as an incorrect argument).
- except MySQLdb.Error, e:
- error = str(e)
- if error[1:5] == '1062':
- return 2 #duplicate entry for the key
- if debugMode == 1:
- print str(e)
- return 3
- else:
- return 0
-
- def maxTaskNo(self):
- if self.connectionCreated == 1:
- try:
- succ = self.cur.execute("SELECT max(taskNo) FROM TaskTable")
- taskNo = self.cur.fetchone()
- self.taskNo = taskNo[0]
- if self.taskNo == None or self.taskNo == '0' or self.taskNo == '' or self.taskNo == 0:
- self.taskNo = 1
- else:
- self.taskNo = int(self.taskNo) +1
- return self.taskNo
-
- except MySQLdb.Error, e:
- error = str(e)
- message = 'error'
- if debugMode == 1:
- print str(e)
- if error[1:5] == '1062':
- return message #duplicate entry for the key
-
- return message
- else:
- return 0
-
- def maxTaskID(self):
- if self.connectionCreated == 1:
- try:
- succ = self.cur.execute("SELECT max(taskID) FROM TaskTable")
- taskID = self.cur.fetchone()
- self.taskID = taskID[0]
- if self.taskID == None or self.taskID == '0' or self.taskID == '' or self.taskID == 0:
- self.taskID = 1
- return self.taskID
-
- except MySQLdb.Error, e:
- error = str(e)
- message = 'error'
- if debugMode == 1:
- print str(e)
- if error[1:5] == '1062':
- return message #duplicate entry for the key
-
- return message
- else:
- return 0
-
- def insertTask(self, taskNo, fromDevice, toDevice):
- if self.connectionCreated == 1:
- try:
- newQuery = ("INSERT INTO `TaskTable` (`taskNo`,`from`,`to`) VALUES ('"+str(taskNo)+"','" +str(fromDevice)+ "', '"+str(toDevice)+"')")
- successful = self.cur.execute(newQuery)
- output = self.cur.fetchone()
-
- return 1
-
- if debugMode == 1:
- print output
-
- except MySQLdb.Error, e:
- error = str(e)
- if debugMode == 1:
- print str(e)
- if error[1:5] == '1062':
- return 2 #duplicate entry for the key
- return 3
- else:
- return 0
- def insertTaskIn2(self, fromDevice, toDevice, taskNo):
- if self.connectionCreated == 1:
- try:
- #we used here a transaction since I want the mysql to execute a few commands and tell me was it successful rather than to execute some and there happens a mistake and one part is updated and the other isn't
- newQuery = "START TRANSACTION; INSERT INTO `TaskTable` (`taskNo`, `from`, `to`) VALUES ('" + str(taskNo) + "', '" + str(fromDevice) + "', '" + str(toDevice) +"'); SELECT @taskID := LAST_INSERT_ID(); INSERT INTO `TempTaskTable` (`taskID`, `taskNo`, `from`, `to`) VALUES (@taskID, '" + str(taskNo) + "', '" + str(fromDevice) + "', '"+ str(toDevice) + "'); COMMIT;"
-
- successful = self.cur.execute(newQuery)
- output = self.cur.fetchone()
- while self.cur.nextset() is not None: pass
-
- return 1
-
- if debugMode == 1:
- print output
-
- except MySQLdb.Error, e:
- error = str(e)
- if debugMode == 1:
- print str(e)
- if error[1:5] == '1062':
- return 2 #duplicate entry for the key
- return 3
- else:
- return 0
- def releaseMutex(self):
- if self.connectionCreated == 1:
- try:
- if self.lockSet == 1:
- successful = self.cur.execute("SELECT IS_FREE_LOCK('SoftwareStarted')")
- output = self.cur.fetchone()
- if output[0] == 1:
- #the lock seems to be free
- self.lockSet = 0
- return 4
-
- elif output[0] == 0:
-
- #try to release the lock
- successful = self.cur.execute("SELECT RELEASE_LOCK('SoftwareStarted')")
- output1 = self.cur.fetchone()
- self.lockSet = 0
- if output1[0] == 1:
- #the lock was released successfully
- return 1
-
- elif output1[0] == 0:
- # if the lock was not established by this thread (in which case the lock is not released)
- return 5
- else:
- # and NULL if the named lock did not exist. The lock does not exist if it was never obtained by a call to GET_LOCK() or if it has previously been released.
- return 6
- else:
- #some serious problem
- #and NULL if an error occurs (such as an incorrect argument).
- return 5
-
- else:
- return 7 #the lock wasn't set
-
- except MySQLdb.Error, e:
- error = str(e)
- if error[1:5] == '1062':
- return 2 #duplicate entry for the key
- if debugMode == 1:
- print str(e)
- return 3
- else:
- return 0
-
-
diff --git a/Under-Testing/Server-Code-New/GSMClass.py b/Under-Testing/Server-Code-New/GSMClass.py
deleted file mode 100644
index b932ab5..0000000
--- a/Under-Testing/Server-Code-New/GSMClass.py
+++ /dev/null
@@ -1,310 +0,0 @@
-from serial import * #serial port library
-import string
-import sys
-import signal
-
-class TimeoutException(Exception):
- pass
-
-class serialPort():
-
- def __init__(self, portAddress, baudRate, timeout):
- self.portAddress = portAddress
- self.portExist = 0
- self.ser = 0
- self.baudRate = baudRate
- self.signalStrength = 0
- #self.callerConnected = -1
- self.timer = timeout
- self.timer1 = timeout
- self.start = 0
-
- self.debugMode = 0
-
- def portInit(self, timeout1):
- portName = self.portAddress[-4:]
- portExist = os.popen('dmesg | grep ' + portName).read()
- self.timer = timeout1
- if portExist == '':
- return 0
- else:
- try:
- self.ser = Serial(
- port=self.portAddress,
- baudrate=self.baudRate,
- bytesize=EIGHTBITS,
- parity=PARITY_NONE,
- stopbits=STOPBITS_ONE
- #timeout=0,
- #writeTimeout=0
- #xonxoff=0,
- #rtscts=0
- #interCharTimeout=None
- #I didn't need to set these variables :)
- )
- self.ser.flushOutput() #clean the output buffer from the serial port
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('AT\r')
-
- received = self.__receiveData()
- self.start=1
- if received == 'OK':
- self.portExist = 1
- return 1 #cellphone is OK, receives commands
- elif received == 'TIMEOUT':
- return 'TIMEOUT'
- else:
- return 2 #cellphone has an error
-
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
-
- self.portExist = 3
- return 3
-
- def callNumber(self,numberToCall):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('ATD'+str(numberToCall)+';\r')
- if self.__receiveData() == 'OK':
- return 1
- else:
- return 4
-
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
-
- return 3
- else:
- return 0
-
-
- def hangUp(self):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('AT+CHUP\r')
- received = self.__receiveData()
- if received == 'OK':
- return 1
- elif received == 'ERROR':
- return 2 #other side hang up the call
- else:
- return 4
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
- return 3
- else:
- return 0
-
-
- def closePort(self):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.close()
- return 1
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
- return 3
- else:
- return 0
-
- def getSignalQuality(self):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('AT+CSQ\r')
- if self.__receiveData() == 'OK':
- if self.__receiveData == 'SIGNAL':
- return 1
- else:
- return 4
- else:
- return 2
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
- return 3
-
- else:
- return 0
-
- def receiveCall(self):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- if self.__receiveData() == 'RING':
- self.ser.write('ATA\r')
- if self.__receiveData()=='OK':
- return 1
- else:
- return 4
- else:
- return 2
-
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
- return 3
- else:
- return 0
-
- def currentCall(self):
- if self.portExist == 1:
- try:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('AT+CLCC\r')
- received = self.__receiveData()
- if received == 'OK':
- return 2 #not yet in a call
- elif received == 'ACTIVE':
- return 1 #in a call
- elif received == 'HELD':
- return 5 #held call
- elif received == 'DIALING':
- return 6 #dialing
- elif received == 'ALERTING':
- return 7 #alerting the call
- elif received == 'INCOMING':
- return 8 #incoming call
- elif received == 'WAITING':
- return 9 #waiting for a call
-
- else:
- return received #in some other state
- except Exception, e:
- import traceback
- if self.debugMode == 1:
- print e
- print traceback.format_exc()
- return 3
- else:
- return 0
-
- def __receiveData(self):
- def timeout_handler(signum, frame):
- raise TimeoutException()
- if self.start == 0:
- self.timer = 5
- else:
- self.timer = self.timer1
-
- old_handler = signal.signal(signal.SIGALRM, timeout_handler)
- signal.alarm(self.timer)
-
- bufferData = ''
- lines = ''
- line = ''
-
- try:
- while True:
- bufferData = bufferData + self.ser.read(self.ser.inWaiting()) #read the serial port and add it to the buffer variable
- if '\n' in bufferData: #if a new line character is found in the buffer then the cellphone has sent something
- lines = bufferData.split('\n') #parse the buffer variable with the new line character
- last_received = lines.pop(0) #put into last_received variable the first content from lines (FIFO)
-
- bufferData = '\n'.join(lines) #add a new line to the buffer variable
-
- last_received=last_received.split('\n') #parse the last received value with new lines
- line = last_received[0].replace(chr(13), '') #remove \r from the first parsed value in last_received and return me a nicely parsed value :)
- if self.debugMode == 1:
- if len(line) > 0:
- print line
-
- if line == 'OK':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'OK'
-
- elif line == 'ERROR':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'ERROR'
-
- elif line[0:11] == '+CME ERROR:':
- if self.debugMode == 1:
- print 'ERROR:', line
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'ERROR'
-
- elif line == 'RING':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'RING'
-
- elif line[0:5] == '+CSQ:': #+CSQ:
- space = int(string.find(line,' '))+1 #find the (space) sign
- coma = int(string.find(line,',')) #find the , (coma) sign
- self.signalStrength = (int(line[space:coma])*2)-113
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'SIGNAL'
-
- elif line == 'NO CARRIER':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'NO CARRIER'
-
- elif line == 'BUSY':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'BUSY'
-
- elif line[0:6] == '+CLCC:':
- #+CLCC: 1,0,
- #self.ser.flushInput()
- if line[11:12] == '0':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'ACTIVE'
- elif line[11:12] == '1':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'HELD'
- elif line[11:12] == '2':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'DIALING'
- elif line[11:12] == '3':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'ALERTING'
- elif line[11:12] == '4':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'INCOMING'
- elif line[11:12] == '5':
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'WAITING'
-
- except TimeoutException:
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'TIMEOUT'
-
- except Exception, e:
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- print 'NO GOOD'
- print e
- return 3
diff --git a/Under-Testing/Server-Code-New/GSMHandler.py b/Under-Testing/Server-Code-New/GSMHandler.py
deleted file mode 100644
index 1379fe9..0000000
--- a/Under-Testing/Server-Code-New/GSMHandler.py
+++ /dev/null
@@ -1,372 +0,0 @@
-import ServerClass
-import GSMClass
-import LogFileClass
-from time import sleep
-import sys
-import setproctitle
-import csv
-global sipServer, username, password, handler
-global portListen
-global portAddress
-global nameOfLogFile
-
-def initLogfile():
- global nameOfLogFile
-
- nameOfLogFile = str(handler)+' handler.log'
-
-def writeToFile():
- try:
- string = '--'
- with open('handler.txt', 'w') as F:
- writer = csv.writer(F)
- writer.writerow([string])
- F.close()
- except ValueError:
- print "can't write to file"
-
-def openFile():
- global sipServer, username, password, handler
- global portListen
- global portAddress
-
- #String format: 'Account:username:password:server:handler:PortName:portCaller
- File = open('handler.txt')
- reader = csv.reader(File, delimiter=':')
- for row in reader:
- if str(row[0]) == 'Account':
- handler = str(row[4])
- portAddress = str(row[5])
- portListen = int(row[6])
- File.close()
- writeToFile()
-
-baudRate = 19200
-
-#Taking account information
-openFile()
-
-#start Logging
-initLogfile()
-logger = LogFileClass.Logging(nameOfLogFile)
-logger.logEvent('')
-
-errorCount = 0
-
-whileCounter =0
-
-#define global varibales
-global lastState
-global resetState
-global deviceError
-lastState = 0
-resetState = 0
-deviceError = 0
-
-
-
-def initSystem():
-
-
- global handlerSocket
- global gsmDevice
- global initTalkVar
- global lastState
- global initDevice
- global numberToCall
- global resetState
- global deviceError
-
- initTalkVar = 0 #variable used to know if we initialized the start talk
- lastState = 0 #variable used to know
- numberToCall = '000' #number to call
- resetState = 0
-
- handlerSocket = ServerClass.ServerHandler(portListen)
- logger.logEvent('LISTEN ON PORT: '+str(portListen))
- anyConnection = handlerSocket.openSocket()
-
- try :
- logger.logEvent('Trying connect to the device')
- gsmDevice = GSMClass.serialPort(portAddress, baudRate, 15)
- initDevice = gsmDevice.portInit(5)
- logger.logEvent('init device ' + str(initDevice))
-
- except ValueError:
- logger.logEvent('Failure when trying connect to device')
-
- ########################################################
-
-
- if initDevice!= 1:
- deviceError = 1
- else:
- deviceError = 0
-
-
- if anyConnection == 1 and initDevice == 1:
- logger.logEvent('CONNECTION ESTABLISHED AND DEVICE WORKING: ' + str(handlerSocket.connectedTo()))
- return 1
-
- elif anyConnection == 1 and initDevice != 1:
- logger.logEvent('$connection established but device not working: ' + str(handlerSocket.connectedTo()))
- resetState = 1
- return 2
- else:
- logger.logEvent('$no connection')
- logger.logEvent('$else case in init system' + str(anyConnection) + ' ' + str(initDevice) + ' ')
- resetState = 1
-
- return 0
-
-
-
-def receiveMessage(timeout):
-
- message = str(handlerSocket.receiveData(timeout))
- print 'I RECEIVED THE FOLLOWING MESSAGE' + message
- if message == 'NO DATA':
- print 'try to close the connection' + str(handlerSocket.closeConnection())
- global resetState
- resetState = 1
- return 1
- if message != '0' and message !='NO DATA':
- print 'in receive message', message, lastState
-
- if message == 'HELLO HANDLER' and lastState == 0:
- outcome = initTalk()
- if outcome == 1:
- logger.logEvent('TALK INITIALIZATION SENT')
- else:
- logger.logEvent('$talk initialization not sent: ' + str(outcome))
-
- elif message == 'RECEIVER' and lastState == 1:
- outcome = initReceiver()
- if outcome == 1:
- logger.logEvent('RECEIVER READY SENT')
- else:
- logger.logEvent('$receiver ready not sent: ' + str(outcome))
- return 7
-
- elif message == 'RECEIVE START' and lastState == 2:
- outcome = receiveStart()
- print 'outcome ' + str(outcome)
- if outcome == 1:
- logger.logEvent('RECEIVE STATUS REPORTED')
- return 2
- else:
- logger.logEvent('$receive status not reported: ' + str(outcome))
- return 3
-
- elif message[0:6] == 'CALLER' and lastState == 1:
- outcome = initCaller()
-
- global numberToCall
- numberToCall = message[7:]
- if outcome == 1:
- logger.logEvent('CALLER READY SENT')
- else:
- logger.logEvent('$caller ready not sent: ' + str(outcome))
- return 6
-
- elif message == 'CALL START' and lastState == 4:
- outcome = callStart(numberToCall)
- print 'outcome ' + str(outcome)
- if outcome == 1:
- logger.logEvent('CALLER STATUS SENT')
- return 4
- else:
- logger.logEvent('$caller status not sent: ' + str(outcome))
- return 5
-
- elif message == 'TERMINATE CONNECTION' and (lastState == 5 or lastState == 3):
- outcome = terminateConnection()
- if outcome == 1:
- logger.logEvent('TERMINATED THE CONNECTION AFTER TEST')
- else:
- logger.logEvent('$connection could not be terminated after the test: ' + str(outcome))
-
- elif message == 'TERMINATE CONNECTION':
- outcome = terminateConnection()
- if outcome == 1:
- logger.logEvent('TERMINATED THE CONNECTION IN MIDDLE. IN STATE: ' + str(lastState) )
- else:
- logger.logEvent('$connection could not be terminated in middle: ' + str(outcome) + ' in state: ' + str(lastState))
- else:
- print message
- outcome = other()
- logger.logEvent('other appeared')
-
- return 1
- #return 0
-
-########INIT TALK PART########
-def initTalk():
- print 'init talk'
- #initialize the talk between handler and controller
- global lastState
- test = gsmDevice.portInit(2)
- if test != 1:
- test = gsmDevice.portInit(2)
- if test != 1:
- sendMessage = handlerSocket.sendData('DEVICE NOT READY')
- else:
- lastState = 1
- sendMessage = handlerSocket.sendData('HELLO CONTROLLER')
- else:
- lastState = 1
- sendMessage = handlerSocket.sendData('HELLO CONTROLLER')
- return sendMessage
-##############################
-
-
-########RECEIVE PART########
-def initReceiver():
- print 'initReceiver'
-
- #init function to initialize the receiver
- global lastState
- lastState = 2
- sendMessage = handlerSocket.sendData('RECEIVER READY')
- return sendMessage
-
-def receiveStart():
- print 'receiveStart'
-
- #wait for a call and report if you received it and it was successfull or not
- global lastState
- global deviceError
- lastState = 3
- if deviceError == 0:
- receiveCall = gsmDevice.receiveCall()
- if receiveCall == 'TIMEOUT':
- deviceError = 1
- print 'device error in RECEIVE'
- else:
- receiveCall = 0
-
- if deviceError == 0:
- if receiveCall == 1:
- callSuccess = 'CALL OK'
- else:
- callSuccess = 'CALL NOT OK'
- if deviceError==0:
- tryHangUp = gsmDevice.hangUp()
- sendMessage = handlerSocket.sendData(callSuccess)
-
- return sendMessage
-############################
-
-
-########CALL PART########
-def initCaller():
- print 'initCaller1'
-
- #initialize caller here
- global lastState
- lastState = 4
- sendMessage = handlerSocket.sendData('CALLER READY')
- return sendMessage
-
-def callStart(numberToCall):
- print 'initCaller2'
-
- #call the number here
- global lastState
- global deviceError
- lastState = 5
-
- callSuccess = 'CALL NOT OK'
-
- if deviceError==0:
- tryCall = gsmDevice.callNumber(numberToCall)
- if tryCall == 'TIMEOUT':
- deviceError = 1
- print 'device error in CALL'
- else:
- tryCall=0
-
-
- if tryCall != 1:
- callSuccess = 'CALL NOT OK'
- else:
- print 'try call result'+ str(tryCall)
- if tryCall != 'TIMEOUT':
- sleep(2)
- activeCall = gsmDevice.currentCall()
- counter = 0
- while(activeCall!=1):
- sleep(1)
- activeCall = gsmDevice.currentCall()
- if counter == 10:
- break
- counter += 1
-
- if activeCall == 1:
- callSuccess = 'CALL OK'
- else:
- callSuccess = 'CALL NOT OK'
-
- if deviceError==0:
- try:
- tryHangUp = gsmDevice.hangUp()
- except ValueError:
- print 'Error when try hangup the call'
- handResponse = handlerSocket.sendData(callSuccess)
-
- return handResponse
-#########################
-
-
-########TERMINATE PART########
-def terminateConnection():
- print 'terminate connection'
- global resetState
- close = handlerSocket.closeConnection()
- resetState = 1
- sys.exit(0.5)
- return close
-##############################
-
-########TERMINATE PART########
-def other():
- print 'other'
- global lastState
- global resetState
-
- close = handlerSocket.closeConnection()
- lastState = 8
- resetState = 1
- return 1
-##############################
-
-setproctitle.setproctitle('GSM Handler')
-
-try:
-
- test = initSystem()
- if test == 1:
- print 'initialized system'
- receivedMessage = 0
- while receivedMessage < 8 and resetState!= 1:
- if receivedMessage == 4 or receivedMessage == 5 or receivedMessage == 2 or receivedMessage == 3:
- receivedMessage = receiveMessage(20)
- else:
- receivedMessage = receiveMessage(30)
- elif test ==2:
- print 'initialized system but device not working'
- logger.logEvent('initialized system but device not working')
- handlerSocket.sendData('DEVICE NOT READY')
-
-
- elif test ==0:
- print 'nobody can connect, reboot board, restart cellphone'
- logger.logEvent('nobody can connect, reboot board, restart cellphone')
-
- logger.closeLogging()
- del handlerSocket
- del gsmDevice
-except ValueError:
- logger.logEvent('Could not start the handler')
- logger.closeLogging()
-
diff --git a/Under-Testing/Server-Code-New/LogFileClass.py b/Under-Testing/Server-Code-New/LogFileClass.py
deleted file mode 100644
index cb152f4..0000000
--- a/Under-Testing/Server-Code-New/LogFileClass.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import string
-import datetime
-
-class Logging:
-
- def __init__(self, logFileName):
- self.writeToFile = open(logFileName, 'a')
- self.justStarted = 1
-
- def logEvent(self, event):
- now = str(datetime.datetime.now())
- if self.justStarted == 1:
- self.writeToFile.write('\n\n------------------STARTED THE LOGGING '+ now + ' ------------------\n')
- self.justStarted = 0
- else:
- self.writeToFile.write('On: '+ now + '\t' + 'Event: ' +str(event) + '\n')
-
- def closeLogging(self):
- now = str(datetime.datetime.now())
- self.writeToFile.write('------------------FINISHED THE LOGGING '+ now + ' ------------------')
- self.writeToFile.close()
diff --git a/Under-Testing/Server-Code-New/PingClass.py b/Under-Testing/Server-Code-New/PingClass.py
deleted file mode 100644
index e13b32b..0000000
--- a/Under-Testing/Server-Code-New/PingClass.py
+++ /dev/null
@@ -1,28 +0,0 @@
-import subprocess
-import string
-
-class Ping:
-
- def __init__(self, pingAddress):
- self.pingAddress = pingAddress
-
- def ping(self,numberTries):
- tried = 1
- while numberTries >= tried:
- tried += 1
- #the parameter c 1 means only one ping to be sent, parameter W 3 means how many seconds the time out should be, 3 seconds
- ping_cmd = subprocess.Popen(['ping', self.pingAddress, '-c', '1', '-W', '2'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate()[0]
-
- pingAlive = int(string.find(ping_cmd, '1 received'))
- unknownHost = int(string.find(ping_cmd, 'unknown host'))
-
-
- if pingAlive != -1:
- break
-
- if unknownHost != -1:
- return 2 #unknown host
- if pingAlive != -1:
- return 1 #ping works fine
- else:
- return 0 #no ping response
diff --git a/Under-Testing/Server-Code-New/READ ME.txt b/Under-Testing/Server-Code-New/READ ME.txt
deleted file mode 100644
index 0e2ff54..0000000
--- a/Under-Testing/Server-Code-New/READ ME.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-
-Class files:
-
- - ClientClass.py
- This class file is used by the controller as socket communication class to communicate with the Handlers.
-
- - ServerClass.py
- This class file is used by handlers as socket communication class to communicate with the controller.
-
- - GSMClass.py
- This class file is used by GSM Handlers to control and talk to the mobile devices.
-
- - PingClass.py
- This class file is used to ping GSMBoxes and servers in the system.
-
- - truthtableClass.py
- This class file is used by the controller to find out how many nanoBTS's are installed in the University tecommunication network and it finds out the working (or not working) state of the University telecommunication network.
-
- - ControllerClass.py
- This class file is used by the software to assign the tasks and start the handlers.
-
- - initTestClass.py
- This class is used by the software to parse information from database class and to send the right device information to the controller class.
-
- - SSHTunnelBoxClass.py
- This class is used by the software to communicate with the GSMBoxes (using SSH tunnel port forwarding).
-
- - usbDetectClass.py
- This class is used to identify the right mobile device, port address and phone number.
-
- - DbClass.py
- This class is used to fetch information from the database.
-
- - LogFileClass.py
- This class is used to make the log files.
-
- - WebsiteCommClass.py
- This class is used by the controller to communicate with the Website.
-
-Handler files:
-
- - GSMHandler.py
- - SIPHandler.py
-
-Main Software:
-
- - startSoftware.py
- This script file should be run manually after you login on the server machine. This script file is used to receive the message from the website and then it tries to start the controller software (main test software).
-
- - gsmselftest.py
- This is the main software which is controlling the handlers, it also assigns tasks for the tests.
-
-Help file:
- - help.txt
- That file is used to find out more information about how to use the software manually using the terminal.
diff --git a/Under-Testing/Server-Code-New/SIPHandler.py b/Under-Testing/Server-Code-New/SIPHandler.py
deleted file mode 100644
index eb5302c..0000000
--- a/Under-Testing/Server-Code-New/SIPHandler.py
+++ /dev/null
@@ -1,272 +0,0 @@
-import sys
-import string
-import pjsua as pj
-import ServerClass
-import LogFileClass
-import setproctitle
-from time import sleep
-import csv
-
-def log_cb(level, str, len):
-
- print ""
-
-# Receive events from incoming Call
-class Account(pj.AccountCallback):
-
- def __init__(self, account=None):
- pj.AccountCallback.__init__(self, account)
-
- def on_incoming_call(self, call):
- global current_call
-
- #print 'Incoming Call'
- current_call = call
- call_cb = Calling(current_call)
- current_call.set_callback(call_cb)
-
- logger.logEvent('Incoming Call')
-
- call.answer(200)
-
- sleep(2)
-
- logger.logEvent('CALL OK')
-
-#creating object for calling
-class Calling(pj.CallCallback):
-
- def __init__(self, call=None):
- pj.CallCallback.__init__(self, call)
-
- def on_state(self):
- global current_call
-
- if self.call.info().state <> pj.CallState.DISCONNECTED:
- if self.call.info().state_text == "CONNECTING":
- logger.logEvent("Call Connecting")
- try:
- logger.logEvent('Try to hangup the call')
- self.call.hangup()
- logger.logEvent('Hangup OK')
- except ValueError:
- logger.logEvent('hangup failed, waiting destination hangup the call')
-
- server.sendData('CALL OK')
-
- if self.call.info().last_reason == "Busy Here":
- logger.logEvent('Number busy or Offline')
- server.sendData('CALL NOT OK')
- logger.logEvent('CALL NOT OK')
-
- if self.call.info().state == pj.CallState.DISCONNECTED:
- logger.logEvent('Call Disconnected')
- current_call = None
-
-#function to make a call
-def make_call(uri):
-
- try:
- cb=Calling()
- return acc.make_call(uri, cb)
-
- except pj.Error, e:
- logger.logEvent('Error when trying to call, 408')
- server.sendData('CALL NOT OK')
- return None
-
-def writeToFile():
- try:
- string = '--'
- with open('handler.txt', 'w') as F:
- writer = csv.writer(F)
- writer.writerow([string])
- F.close()
- except ValueError:
- print "can't write to file"
-
-def openFile():
- global sipServer, username, password, ip, portadd
- global port
-
- #file format: 'Account:username:password:server:handler:PortName:portCommunication
- File = open('handler.txt')
- reader = csv.reader(File, delimiter=':')
- for row in reader:
- if str(row[0]) == 'Account':
- username = str(row[1])
- password = str(row[2])
- sipServer = str(row[3])
- port = int(row[6])
- File.close()
- writeToFile()
-
-#send greeting message to the controller
-def greeting():
-
- global server
- server = None
-
- # create socket communication object
- server = ServerClass.ServerHandler(port)
- logger.logEvent('try to Connect to Controller')
- conn = server.openSocket()
-
- if server.connected == 1:
- #connection to the controller establish
- logger.logEvent('Connection Establish')
- if server.receiveData(25) == 'HELLO HANDLER':
- server.sendData('HELLO CONTROLLER')
- return 1
- else:
- logger.logEvent('Cant connect to Controller')
- del server
- return 0
-
-def initLogFile(sipServer):
-
- global logger
-
- if sipServer == '132.230.4.8':
- nameOfLogFile = 'SIP handler.log'
- #print '--SIP Asterisk--'
-
- elif sipServer == 'sipgate.de':
- nameOfLogFile = 'Landline handler.log'
- #print '--Landline--'
-
- elif sipServer == '132.230.252.228':
- nameOfLogFile = 'University SIP handler.log'
- #print '--university tephone network--'
-
- logger = LogFileClass.Logging(nameOfLogFile)
-
-def initState():
- global message
- global state
- global num
-
- logger.logEvent('init state')
- message = server.receiveData(30)
-
- if message == 'RECEIVER':
- state = 'RECEIVER'
-
- elif message[0:6] == 'CALLER':
- state = 'CALLER'
- no = message[7:]
-
- # need special handle for calling from unisip account
- if sipServer == '132.230.252.228':
- num = no[7:]
- else:
- num = no
-
-lib = pj.Lib()
-stop = False
-
-print 'INIT SYSTEM'
-
-openFile()
-setproctitle.setproctitle('SIP Handler')
-initLogFile(sipServer)
-
-logger.logEvent('')
-
-while stop <> True:
-
- acc_cfg = None
-
- lib.init(log_cfg = pj.LogConfig(level=1, callback=log_cb))
- transport = lib.create_transport(pj.TransportType.UDP, pj.TransportConfig(0))
-
- lib.start()
- lib.set_null_snd_dev()
-
- if greeting() != 1:
- lib.destroy()
- break
- try:
- initState()
- acc_cfg = pj.AccountConfig(str(sipServer),str(username),str(password))
- logger.logEvent('Register Account to SIP server')
- acc = lib.create_account(acc_cfg, cb=Account())
-
- if acc.info().reg_status < 700:
-
- # being receiver state
- if state =='RECEIVER':
- logger.logEvent(acc.info().reg_status)
- server.sendData('RECEIVER READY')
- logger.logEvent('Receiver Handler Ready')
-
- #waiting state
- while 1:
-
- data = server.receiveData(1)
- if data == 'RECEIVE START':
- print data
- logger.logEvent(data)
-
- #get shutting down message
- if data == 'TERMINATE CONNECTION':
- print data
- logger.logEvent('Terminate')
- stop = True
- break
- #being caller state
- elif state =='CALLER':
- logger.logEvent(acc.info().reg_status)
- server.sendData('CALLER READY')
- logger.logEvent('Caller Handler Ready')
-
- while 1:
- data = server.receiveData(1)
-
- #start the call
- if data == 'CALL START':
- #print data
- if num <> '':
- sleep(3)
- logger.logEvent(data)
- logger.logEvent('Make a call to: ' + num)
- number = "sip:"+num+"@"+sipServer
- make_call(number)
- else:
- logger.logEvent('No number to call')
- logger.logEvent('CALL NOT OK')
-
- #shutting down message
- if data == 'TERMINATE CONNECTION':
- #print data
- stop = True
- logger.logEvent('Terminate')
- break
-
- else:
- logger.logEvent('Unknow Message')
- server.sendData('Unknow Message')
- break
-
- else:
- logger.logEvent("488 Not Acceptable Here")
- server.sendData('DEVICE NOT READY')
- break
-
- except ValueError:
- logger.logEvent("401 Unauthorized ")
- break
-
-logger.logEvent("Goodbye")
-logger.closeLogging()
-# trying to clean everything before shutting down
-try:
- acc.delete()
- lib.destroy()
- lib = None
- acc = None
- server.closeConnection()
- del server
-except ValueError:
- message = 'trying failure'
-
diff --git a/Under-Testing/Server-Code-New/SSHTunnelBoxClass.py b/Under-Testing/Server-Code-New/SSHTunnelBoxClass.py
deleted file mode 100644
index 1b76d0b..0000000
--- a/Under-Testing/Server-Code-New/SSHTunnelBoxClass.py
+++ /dev/null
@@ -1,44 +0,0 @@
-#Here is a tutorial how to generate and copy your RSA SSH public key :)
-#>>> http://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id/
-import subprocess
-from time import sleep
-
-class SSHTunneling:
-
- def __init__(self, localPort, remotePort, remoteServer, username, password):
- self.lPort = localPort
- self.rPort = remotePort
- self.rServer = remoteServer
-
- self.usern = username
- self.passw = password
-
- self.__tunnelStarted = 0
- self.__sshTunnel = 1
-
- def startTunneling(self):
- if self.__tunnelStarted == 0:
- command = str(self.lPort) + ':' + self.rServer + ':' + str(self.rPort)
- uad = self.usern + '@' + self.rServer
-
- try:
- self.__sshTunnel = subprocess.Popen(['ssh','-p','7884','-N', '-L', command, uad], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
- sleep(2)
- self.__tunnelStarted = 1
- return 1
- except Exception, e:
- error = str(e)
- return 0
-
- def killTunneling(self):
- if self.__tunnelStarted == 1:
- try:
- self.__sshTunnel.kill()
- self.__tunnelStarted = 0
- return 1
-
- except Exception, e:
- error = str(e)
- return 0
-
-
diff --git a/Under-Testing/Server-Code-New/ServerClass.py b/Under-Testing/Server-Code-New/ServerClass.py
deleted file mode 100644
index 93c2f8e..0000000
--- a/Under-Testing/Server-Code-New/ServerClass.py
+++ /dev/null
@@ -1,152 +0,0 @@
-import socket
-import sys
-import os
-import string
-import signal
-
-class TimeoutException(Exception):
- pass
-
-class ServerHandler:
-
- def __init__(self,p):
- self.port = p
- self.host = None #symbolic name meaning all available interfaces
- self.s = None
- self.connected = 0
- self.address = "127.0.0.1" #address of the main controller
- self.onceConnected = 0
- self.error = 'No error'
-
- self.debugMode = 0
-
- def openSocket(self):
- self.error = 'No error'
- for res in socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC,
- socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
- af, socktype, proto, canonname, sa = res
-
- try:
- self.s = socket.socket(af, socktype, proto)
- self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #this resolves the bug with live packets
- except socket.error, msg:
- self.s = None
- self.connected = 0
- self.error = str(msg)
- continue
-
- try:
- self.s.bind(sa)
- self.s.listen(1)
- except socket.error, msg:
- self.s.close()
- self.s = None
- self.connected = 0
- self.error = str(msg)
- continue
- break
-
- if self.s is None:
- self.connected = 0
- return 0
- else: #accept the connection
- self.connection, self.address = self.s.accept()
- self.connected = 1
- self.onceConnected = 1
- return 1
-
- def connectedTo(self):
- return self.address
-
- def receiveData(self, timeout):
- if self.connected == 1:
-
- def timeout_handler(signum, frame):
- raise TimeoutException()
-
- try:
-
- old_handler = signal.signal(signal.SIGALRM, timeout_handler)
- signal.alarm(timeout) #start the timeout alarm, for timeout seconds
-
- data = self.connection.recv(1024)
-
- #stop the timeout function
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
-
- if not data:
- self.connected = 0
- return 'NO DATA'
- else:
- return data
-
- except TimeoutException:
- #timeout happened
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'TIMEOUT'
-
- except Exception, e:
- #stop the timeout timer
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
-
- if self.debugMode == 1:
- import traceback
- print traceback.format_exc()
- print e
- self.connected = 0
- if error[0:11] == '[Errno 104]':
- return 3 #the other side reset the connection,[Errno 104] Connection reset by peer
-
- return 2
- else:
- return 0
-
- def sendData(self, data):
- if self.connected == 1:
- try:
- self.connection.send(data)
- return 1
-
- except Exception, e:
- if self.debugMode == 1:
- import traceback
- print traceback.format_exc()
- print e
- self.connecected = 0
- return 2
- else:
- return 0
-
- def closeConnection(self):
- if self.onceConnected == 1:
- try:
- self.connected = 0
- SHUT_RDWR = 2
- self.connection.shutdown(SHUT_RDWR)
- self.connection.close()
- return 1
- except Exception, e:
- self.connected = 0
- error = str(e)
- if self.debugMode == 1:
- import traceback
- print traceback.format_exc()
- print e
- if error[0:11] == '[Errno 107]':
- return 3 #the other side closed the connection before us [Errno 107] Transport endpoint is not connected
- return 2
- else:
- return 0
-
- def killPort(self):
- killResult = os.popen('lsof -i tcp:' + str(self.port) + ' | grep "python " | awk -F" " ' + "'{print $2}'").read()
- killResult = killResult.replace('\n','')
- print killResult
- if killResult!='':
- print killResult
- killPort = os.popen("kill -9 " + killResult).read()
- return 1
- return 0
diff --git a/Under-Testing/Server-Code-New/WebsiteCommClass.py b/Under-Testing/Server-Code-New/WebsiteCommClass.py
deleted file mode 100644
index 206411e..0000000
--- a/Under-Testing/Server-Code-New/WebsiteCommClass.py
+++ /dev/null
@@ -1,162 +0,0 @@
-import socket
-import sys
-import os
-import string
-import signal
-
-class TimeoutException(Exception):
- pass
-
-class ServerHandlerSoftware:
-
- def __init__(self,p):
- self.port = p
- self.host = None #symbolic name meaning all available interfaces
- self.s = None
- self.connected = 0
- self.address = "127.0.0.1" #address of the main controller
- self.onceConnected = 0
- self.error = 'No error'
-
- self.debugMode = 0
-
- def openSocket(self, timeoutVar):
- self.error = 'No error'
- for res in socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC,
- socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
- af, socktype, proto, canonname, sa = res
-
-
- try:
-
- self.s = socket.socket(af, socktype, proto)
- self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #this resolves the bug with live packets
- self.s.settimeout(timeoutVar)
-
- except socket.error, msg:
- self.s = None
- self.connected = 0
- self.error = str(msg)
- continue
-
- try:
- self.s.bind(sa)
- self.s.listen(1)
-
- except socket.error, msg:
- self.s.close()
- self.s = None
- self.connected = 0
- self.error = str(msg)
- continue
-
- break
-
- if self.s is None:
- self.connected = 0
- return 0
- else: #accept the connection
- try:
- self.connection, self.address = self.s.accept()
- self.s.settimeout(0)
- self.connected = 1
- self.onceConnected = 1
- return 1
- except socket.timeout:
- return 'TIMEOUT'
-
- def connectedTo(self):
- return self.address
-
- def receiveData(self, timeout):
- if self.connected == 1:
-
- def timeout_handler(signum, frame):
- raise TimeoutException()
-
- try:
-
- old_handler = signal.signal(signal.SIGALRM, timeout_handler)
- signal.alarm(timeout) #start the timeout alarm, for timeout seconds
-
- data = self.connection.recv(1024)
-
- #stop the timeout function
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
-
- if not data:
- self.connected = 0
- return 'NO DATA'
- else:
- return data
-
- except TimeoutException:
- #timeout happened
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- return 'TIMEOUT'
-
- except Exception, e:
- #stop the timeout timer
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
-
- if self.debugMode == 1:
- import traceback
- print traceback.format_exc()
- print e
- self.connected = 0
- if error[0:11] == '[Errno 104]':
- return 3 #the other side reset the connection,[Errno 104] Connection reset by peer
-
- return 2
- else:
- return 0
-
- def sendData(self, data):
- if self.connected == 1:
- try:
- self.connection.send(data)
- return 1
-
- except Exception, e:
- if self.debugMode == 1:
- import traceback
- print traceback.format_exc()
- print e
- self.connecected = 0
- return 2
- else:
- return 0
-
- def closeConnection(self):
- if self.onceConnected == 1:
- try:
- self.connected = 0
- SHUT_RDWR = 2
- self.connection.shutdown(SHUT_RDWR)
- self.connection.close()
- return 1
- except Exception, e:
- self.connected = 0
- error = str(e)
- if self.debugMode == 1:
- import traceback
- print traceback.format_exc()
- print e
- if error[0:11] == '[Errno 107]':
- return 3 #the other side closed the connection before us [Errno 107] Transport endpoint is not connected
- return 2
- else:
- return 0
-
- def killPort(self):
- killResult = os.popen('lsof -i tcp:' + str(self.port) + ' | grep "python " | awk -F" " ' + "'{print $2}'").read()
- killResult = killResult.replace('\n','')
- print killResult
- if killResult!='':
- print killResult
- killPort = os.popen("kill -9 " + killResult).read()
- return 1
- return 0
diff --git a/Under-Testing/Server-Code-New/gsmselftest.py b/Under-Testing/Server-Code-New/gsmselftest.py
deleted file mode 100644
index 082b19f..0000000
--- a/Under-Testing/Server-Code-New/gsmselftest.py
+++ /dev/null
@@ -1,795 +0,0 @@
-#! /usr/bin/env python
-from serial import * #serial port library
-import sys
-import ControllerClass
-import DbClass
-import PingClass
-import truthtableClass
-import initTestClass
-import usbDetectClass
-import WebsiteCommClass
-import signal
-import random
-from time import sleep
-import setproctitle
-
-setproctitle.setproctitle('Controller Software')
-
-class bcolors:
- HEADER = '\033[95m'
- OKBLUE = '\033[94m'
- OKGREEN = '\033[92m'
- WARNING = '\033[93m'
- FAIL = '\033[91m'
- ENDC = '\033[0m'
-
- def disable(self):
- self.HEADER = ''
- self.OKBLUE = ''
- self.OKGREEN = ''
- self.WARNING = ''
- self.FAIL = ''
- self.ENDC = ''
-class TimeoutException(Exception):
- pass
-
-global resultsList
-resultsList = list()
-global taskNo
-dbStatus = None
-global caller
-global callee
-
-def timeout_handler(signum, frame):
- raise TimeoutException()
-
-def allPing(): #ping all existing devices
-
- global sipGate
- global sipServer
- global unisip
- global gsmBox1
- global gsmBox2
-
- serverAdd = db.deviceAddress(str('landline'))
- server = PingClass.Ping(str(serverAdd[4]))
- sipGate = server.ping(1)
-
- serverAdd = db.deviceAddress(str('sip'))
- server = PingClass.Ping(str(serverAdd[4]))
- sipServer = server.ping(1)
-
- serverAdd = db.deviceAddress(str('unisip'))
- server = PingClass.Ping(str(serverAdd[4]))
- unisip = server.ping(1)
-
- serverAdd = db.deviceAddress(str('GSMRZ2'))
- server = PingClass.Ping(str(serverAdd[4]))
- gsmBox1 = server.ping(1)
-
- serverAdd = db.deviceAddress(str('GSMRZ3'))
- server = PingClass.Ping(str(serverAdd[4]))
- gsmBox2 = server.ping(1)
-
-def initDB(): # function for connection database
- global dbStatus
- global db
- if dbStatus != 1:
- db = DbClass.DBMySQLConnection()
- db.connectDB()
- dbStatus = db.connectDB()
- if dbStatus == 1:
- db.lockMutex(600)
-
-def initNagiosString(x):
-
- initResult = truthtableClass.trueTable(x)
- initResult.initNagiosResult()
-
- if int(initResult.FAILED) != 0:
- print "GSM CRITICAL - Number of test "+str(initResult.testMount)+'; Failure '+str(initResult.FAILED)+'; Unknown '+str(initResult.handlerError)
- elif int(initResult.handlerError) != 0:
- print "GSM WARNING - Number of test "+str(initResult.testMount)+'; Failure '+str(initResult.FAILED)+'; Unknown '+str(initResult.handlerError)
- elif int(initResult.FAILED) == 0 and int(initResult.handlerError) == 0:
- print "GSM OK - Number of test "+str(initResult.testMount)+'; Failure '+str(initResult.FAILED)+'; Unknown '+str(initResult.handlerError)
- else:
-
- print "unknown error"
-
-def initTrueTable(x):
-
- initResult = truthtableClass.trueTable(x)
- initResult.initTrueTable()
-
- print '\n'
- openBSC = None
- asterikServer = None
- for x in initResult.nanoBts:
-
- name = x[0]
- if x[1] == True:
- openBSC = True
- asterikServer = True
- print bcolors.OKGREEN +name+ ' Working'+ bcolors.ENDC
-
- else:
- if int(x[1]) == 486:
- print bcolors.FAIL+name+ ' not Working' + bcolors.ENDC
- elif int(x[1]) == 200:
- print bcolors.OKGREEN +name+ ' Working'
- asterikServer = True
- elif int(x[1]) == 402:
- print bcolors.WARNING +name+ ' not Working need top up the credit'
- asterikServer = True
- elif int(x[1]) == 998 or int(x[1]) == 999:
- print bcolors.FAIL+name+ ' not Working, handler error'+ bcolors.ENDC
- elif int(x[1]) == 801 or int(x[1]) == 802:
- print bcolors.FAIL+name+ ' Device Error, Check the device'+ bcolors.ENDC
- else:
- print bcolors.OKGREEN +name+ ' not Working'+ bcolors.ENDC
-
- print ''
- if openBSC != None:
- if openBSC == True:
- print bcolors.OKGREEN +'openBSC working'+ bcolors.ENDC
- else:
- print bcolors.FAIL+'openBSC doesnt work'+ bcolors.ENDC
- print ''
-
- if initResult.asteriskServer == True or asterikServer == True:
- print bcolors.OKGREEN +'asterik server is working'+ bcolors.ENDC
- print ''
-
- if initResult.outGoingRZ == True:
- print bcolors.OKGREEN +'Outgoing call from RZ is working'+ bcolors.ENDC
- elif initResult.outGoingRZ == False:
- print bcolors.FAIL+'Outgoing call from RZ is not working'+ bcolors.ENDC
-
- if initResult.incomingRZ == True:
- print bcolors.OKGREEN +'incoming call from outside RZ to GSM RZ is working'+ bcolors.ENDC
- elif initResult.incomingRZ == False:
- print bcolors.FAIL+'incoming call from outside RZ to GSM RZ is not working'+ bcolors.ENDC
- print '\n'
-
-def errorCodes(callFrom, callTo, result):
- message = '|' + str(callFrom) + '|' + str(callTo) + '|' + str(result) + '|' + str(db.errorCode(result))
-
- sendResultWebsite(message)
-
- # function to search in the list
-def isThere(keyword,lists):
- x = 0
- for item in lists:
-
- if item == keyword:
- return 1
- else:
- x = x+1
-
-def testDest(callFrom, callTo, tried):
-
- makeTest.initTest(callFrom,callTo)
- db.insertTask(taskNum,callFrom,callTo)
- smartResultList.append([callFrom,callTo, makeTest.result,tried])
- taskID = db.maxTaskID()
- db.addResult(taskID, makeTest.result)
- if WebStatus == True:
- errorCodes(callFrom, callTo, makeTest.result)
-
-def smartTest():
- global smartResultList
- smartResultList = list()
- deviceLists = db.deviceList()
- gsmList = list()
- gsmRZList = list()
- sipList = list()
- destList = list()
- rem = list()
- item = list()
-
- cpgsmRZList = list()
-
- for lists in deviceLists: #define category of the device
- device = lists[0]
- if device[0:5] == 'GSMRZ':
- gsmRZList.append(device)
- cpgsmRZList.append(device)
- elif device[0:5] == 'GSMEx':
- gsmList.append(device)
- else:
- sipList.append(device)
-
- if device[0:5] == 'GSMRZ' or device[0:5] == 'GSMEx' or device == 'sip':
- destList.append(device)
-
- #first test from university telphone network to random GSM RZ avaliable
- i = random.randint(0, len(gsmRZList)-1)
- callTo = gsmRZList[i]
- callFrom = 'unisip'
- testDest(callFrom, callTo, 1)
- gsmRZList.remove(callTo)
- destList.remove(callTo)
-
-
- for callFrom in gsmRZList:
- i = random.randint(0, len(destList)-1) #Check whether the caller and dest are same
- callTo = destList[i]
- if callFrom == callTo: #Check whether the caller and dest are same
- if i == 0:
- i = i+1 # if it in the first list, change to be the second list else, just back on step.
- else:
- i = i-1
- callTo = destList[i]
-
- destList.remove(callTo)
- destList.remove(callFrom)
- gsmRZList.remove(callFrom)
- testDest(callFrom, callTo, 1)
-
-
- # test incoming call from outside rz network to gsm rz
- i = random.randint(0, len(gsmRZList)-1) #
- callTo = gsmRZList[i]
- callFrom = 'landline'
-
- if isThere(callTo,destList) == 1: # Checking whether caller at gsmrz list in the destination list, if yes delete it.
- destList.remove(callTo)
- testDest(callFrom, callTo, 1)
-
- for callTo in destList:
- callFrom = 'sip'
- if callFrom != callTo:
- testDest(callFrom, callTo, 1)
-
- #checking unsuccess call, to make sure that destination are really unreachable
- for dest in smartResultList:
- #check unsuccess call and did the test have already tried, 2 means has been check
- if int(dest[2]) == 486 or int(dest[2]) == 999 or int(dest[2]) == 998 or int(dest[2]) == 801 or int(dest[2]) == 802:
-
- if int(dest[3]) != 2 and dest[1] != 'sip':
- testDestination = True
- testFromRZ = False
- testCaller = True
- # make sure that destination have not tested by another part and give success result.
- for test in smartResultList:
- if test[1] == dest[1] or test[0] == dest[1]:
- if int(test[2]) == 200:
- testDestination = False
- if test[1] == dest[0] or test[0] == dest[0]:
- if int(test[2]) == 200:
- testCaller = False
- #if destination have not tested by other part. try to test from RZ GSM
- if int(test[2]) == 200 and testFromRZ != True:
- for caller in cpgsmRZList:
- if caller == test[0] or caller == test[1]:
- callFrom = caller
- testFromRZ = True
-
- if testDestination == True:
- if testFromRZ != True:
- callFrom = 'sip'
- callTo = dest[1]
- testDest(callFrom, callTo, 2)
- rem.append(dest)
-
- #check unsuccess call because caller handler having problem
- #destination handler having problem, we should make test also to the caller
- if int(dest[2]) == 998 or int(dest[2]) == 802 or int(dest[2]) == 486:
- if testCaller == True:
- if testFromRZ != True:
- callFrom = 'sip'
- callTo = dest[0]
- testDest(callFrom, callTo, 2)
- rem.append(dest)
-
-
- caller = dest[0] # to test nanobts if the test come from RZ GSM but fehler
- if caller[0:5] == 'GSMRZ' and int(dest[3]) != 2 and dest[1] != 'sip':
- repeatTest = True
- for test in smartResultList:
- if test[1] == caller or test[0] == caller:
- repeatTest = False
- if int(dest[2]) == 486 or int(dest[2]) == 402:
- if repeatTest == True:
- callFrom = 'sip'
- testDest(callFrom, dest[0], 2)
- rem.append(dest)
-
- # test to make sure nanoBTS working or not. sice probably that nanotbts seems error but actually not.
- for RZ in cpgsmRZList:
- repeat = False
- for gsmrzResult in smartResultList:
- if gsmrzResult[0] == RZ or gsmrzResult[1] == RZ:
- if int(gsmrzResult[2]) == 486 or int(gsmrzResult[2]) == 801 or int(gsmrzResult[2]) == 802:
- repeat = True
- From = gsmrzResult[0]
- To = gsmrzResult[1]
- result = gsmrzResult[2]
- if int(gsmrzResult[2]) == 200:
- repeat = False
- if gsmrzResult[1] == RZ and int(gsmrzResult[2]) == 998:
- try:
- cpgsmRZList.remove(RZ)
- except ValueError:
- message = 'Error'
- if gsmrzResult[0] == RZ and int(gsmrzResult[2]) == 999:
- try:
- cpgsmRZList.remove(RZ)
- except ValueError:
- message = 'Error'
-
- if len(cpgsmRZList) > 1:
- if repeat == True:
- i = random.randint(0, len(cpgsmRZList)-1) #
- if i == 0:
- x = i+1
- else:
- x = i-1
- testDest(cpgsmRZList[x], cpgsmRZList[i], 2)
- item = '['+str(From)+','+str(callTo)+','+str(result)+','+str(1)+']'
- rem.append(item)
-
- for remov in rem:
- for x in smartResultList:
- if x == remov:
- try:
- smartResultList.remove(x)
- except ValueError:
- message = 'Error'
- return smartResultList
-
-def doSmartTest(status):
- global taskNum, printMessage
- global WebStatus
- initDB()
- taskNum = db.maxTaskNo()
- global makeTest
- if status == True:
- WebStatus = True
-
- else:
- WebStatus = False
-
- makeTest = initTestClass.initTesting()
- result = smartTest()
- if status == 'NAGIOS':
- initNagiosString(result)
-
- elif status == False:
- initTrueTable(result)
-
- if status == True:
- sendFinishMessage()
-
-
-def doSipTest():
- destList = ['landline', 'unisip']
- doTest = initTestClass.initTesting()
- for callTo in destList:
-
- callFrom = 'sip'
- doTest.initTest(callFrom,callTo)
- resultsList.append([callFrom, callTo, doTest.result])
- initTrueTable(resultsList)
-def doIncomingTest(): #incoming call to RZ network
-
- destList = ['GSMRZ1','unisip', 'GSMRZ2','GSMRZ3']
- doTest = initTestClass.initTesting()
- for callTo in destList:
- callFrom = 'landline'
- doTest.initTest(callFrom,callTo)
- resultsList.append([callFrom, callTo, doTest.result])
- initTrueTable(resultsList)
-
-def doGsmrzTest():
-
- destList = ['GSMRZ1','GSMRZ2', 'GSMRZ3']
- callList = ['sip']
- doTest = initTestClass.initTesting()
-
- for callFrom in callList:
- for callTo in destList:
- doTest.initTest(callFrom,callTo)
- resultsList.append([callFrom, callTo, doTest.result])
- initTrueTable(resultsList)
-
-def doGsmExtTest():
-
- destList = ['GSMExt.O2', 'GSMExt.Voda', 'GSMExt.Eplus', 'GSMExt.Tm']
- callList = ['sip']
-
- doTest = initTestClass.initTesting()
-
- for callFrom in callList:
- for callTo in destList:
- doTest.initTest(callFrom,callTo)
- resultsList.append([callFrom, callTo, doTest.result])
- initTrueTable(resultsList)
-
-def doAllTest():
-
- doSipTest()
- doIncomingTest()
- doGsmrzTest()
- doGsmExtTest()
-
-
-def sendResultWebsite(message):
- if server.sendData(message+ chr(10)) == 1:
- print 'data sent successfully'
- test = server.receiveData(5)
- if test == 'TIMEOUT':
- closeFunction(db,server)
- sys.exit(2)
- if test == 'CONTINUE':
- print 'continue'
-
-def sendFinishMessage():
- if server.connected == 1:
- server.sendData('TEST DONE\n')
- test = server.receiveData(5)
- if test == 'TIMEOUT':
- closeFunction(db,server)
- if test == 'DISCONNECT':
- close = server.closeConnection()
- if close == 1:
- print 'Closed connection successfully'
-
- print 'release mutex says ', db.releaseMutex()
-
-def withDB(x):
-
- initDB()
-
- if x == False:
- deviceLists = db.deviceList()
- callerFound = False
- calleeFound = False
- for device in deviceLists:
- if caller == device[0]:
- callerFound = True
- break
-
- for device in deviceLists:
- if callee == device[0]:
- calleeFound = True
- break
- if callerFound != True or calleeFound != True:
- if callerFound != True:
- print 'No device with name', caller
- db.closeDBConn()
- sys.exit(1)
- if calleeFound != True:
- print 'No device with name', callee
- db.closeDBConn()
- sys.exit(1)
- if callerFound == True and calleeFound == True:
- taskNumber = db.maxTaskNo()
- db.insertTaskIn2(caller, callee, taskNumber)
- resultsList = list()
- if dbStatus == 1: # Checking connection to database
- if db.anyTasksToDo() == 1: # Checking task on the table
-
- allPing()
- i=0
- makeTest = initTestClass.initTesting()
-
- for item in db.tasksList:
-
- taskID = item[0]
- taskNo = item[1]
- callFrom = item[2]
- callTo = item[3]
-
- if i == 0:
- db.updatePingResult(taskNo, sipServer, sipGate, unisip, gsmBox1, gsmBox2)
- print '\n'
- print 'Task ID :', taskID
- print 'Calling From :', callFrom
- print 'To :', callTo
-
-
- makeTest.initTest(callFrom,callTo)
-
- db.addResult(taskID, makeTest.result)
-
- resultsList.append([callFrom, callTo, makeTest.result])
-
- db.errorCode(makeTest.result)
-
- if int(makeTest.result) == 200:
- print bcolors.OKGREEN +'Result : ' +str(makeTest.result)+ ' ' +db.errCode + bcolors.ENDC
- else:
- print bcolors.FAIL+'Result : ' +str(makeTest.result)+ ' ' +db.errCode + bcolors.ENDC
-
- if x == True: # if x = True means that this function call by website
-
- message = '|' + str(callFrom) + '|' + str(callTo) + '|' + str(makeTest.result) + '|' + str(db.errCode)
- sendResultWebsite(message) # send result to website
-
- db.deleteTempTask(taskID)
- i = i+1
-
- db.cleanTasksList()
-
- if x == True:
- sendFinishMessage() #send finish message to website and close the connection
-
- print '\n'
-
- initTrueTable(resultsList) # fetch result list and make adjustment about the result
- db.closeDBConn()
- else:
- print bcolors.FAIL+"--- No job at all ---" + bcolors.ENDC
- db.closeDBConn()
- else:
- print bcolors.FAIL+'Cant connect to database'+ bcolors.ENDC
- sys.exit(1)
-
-def findPort(portName): # take information in existing usb port
- global connect
- global prefix
- global num
- global IMEI
- global portClass
- sleep(0.5)
- portLog = os.popen('dmesg | grep \'pl2303 converter now attached to '+portName+'\'').read()
- sleep(0.5)
- if portLog != '':
- connect = 1
- portClass = usbDetectClass.serialPort(portName)
- portClass.findNumber()
- portClass.findIMEI()
- IMEI = portClass.IMEI
- num = portClass.number
- number = portClass.number
- prefix = number[0:4]
- else:
- connect = 0
-
-def initDevice(deviceName):
- print 'Device Name :',deviceName
- print ' Device IMEI : ',
- imei = sys.stdin.readline().rstrip("\r\n")
- print 'Phone number : ',
- number = sys.stdin.readline().rstrip("\r\n")
- print 'Port Name : /dev/',
- portName = sys.stdin.readline().rstrip("\r\n")
- print ''
-
- if imei == '' or portName == '':
- print bcolors.FAIL+' == cant save device configuration, please fill IMEI / port name of the device =='+ bcolors.ENDC
- else:
- findPort(portName)
- if connect == 1:
- if str(IMEI) != str(imei) and str(num) != str(number):
- print bcolors.FAIL+'== error, device not found =='+ bcolors.ENDC
- elif str(IMEI) == str(imei):
- portClass.initUpdate(deviceName, portName, number)
- print bcolors.OKGREEN +'== Device succeced added =='+ bcolors.ENDC
- elif str(num) == str(number) and str(IMEI) != str(imei):
- portClass.initUpdate(deviceName, portName, number)
- print bcolors.WARNING+'== Device succeced added, but have different IMEI =='+ bcolors.ENDC
- else:
- print bcolors.FAIL+'== error, no device connected =='+ bcolors.ENDC
-
-def autoUpdateDevice(status):
- initDB()
- GSMListPrefix = list()
- GSMListPrefix = db.GSMPrefix()
- i = 0
- x = 0
- count = 0
- while i !=10:
- portName ='ttyUSB'+str(i) #checking usb connection
-
- i=i+1
- old_handler = signal.signal(signal.SIGALRM, timeout_handler)
- signal.alarm(15)
- try:
- findPort(portName)
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- if connect == 1:
- for listNum in GSMListPrefix:
- if prefix == listNum[1]:
- print 'Device Name :',listNum[0]
- print 'IMEI :',IMEI
- print 'Phone Number :',num
- print 'Port Name : /dev/'+portName
- x=x+1
- newPortName = '/dev/'+portName
- portClass.initUpdate(listNum[0], newPortName, num)
- print '\n'
- except TimeoutException:
- signal.signal(signal.SIGALRM, old_handler)
- signal.alarm(0)
- count = count + 1
- message = "Timeout"
- if status == True:
- sendFinishMessage()
- else:
-
- print '== FINISH =='
- print 'Found '+str(x)+' devices'
-
-def updateDevice(): #update port name list of device on DB
- quit = False
- while quit != True:
- print ''
- print "Mobile device configuration"
- print "Menu: a = automatic device configuration, m = Manual configuration, q = quit : ",
- input = sys.stdin.readline().rstrip("\r\n")
- print ''
- if input == 'm': # manual configuration
-
- while True:
- print ''
- print "Mobile device name: "
- print " 1. GSM O2"
- print " 2. GSM Vodafone"
- print " 3. GSM Eplus"
- print " 4. GSM T-Mobile"
- print " 5. GSM RZ 1"
- print " 6. Back to menu"
- print ""
- print "your choise : ",
- input = sys.stdin.readline().rstrip("\r\n")
-
- if input == '6':
- break
- elif input == '1':
- initDevice('GSMExt.O2')
- elif input == '2':
- initDevice('GSMExt.Voda')
- elif input == '3':
- initDevice('GSMExt.Eplus')
- elif input == '4':
- initDevice('GSMExt.Tm')
- elif input == '5':
- initDevice('GSMRZ1')
- else:
- print 'please choose between 1-6'
-
- if input == 'a': #automatic configuration
- autoUpdateDevice(False)
-
- if input == "q":
- break
- sys.exit()
-
-def closeFunction(dbConn,serverSocket):
- print 'Release the mutex: ' + str(dbConn.releaseMutex())
- print 'Close the DB Connection: ' + str(dbConn.closeDBConn())
- del dbConn
- del serverSocket
- sys.exit()
-
-if len(sys.argv) > 1:
-
- command = sys.argv[1]
-
- if command == '--all':
- resultsList = list()
- doAllTest()
-
- elif command == '--sip':
- resultsList = list()
- doSipTest()
-
- elif command == '--gsmrz':
- resultsList = list()
- doGsmrzTest()
-
- elif command == '--gsmext':
- resultsList = list()
- doGsmExtTest()
-
- elif command == '--incoming':
- resultsList = list()
- doIncomingTest()
-
- elif command == '--smart':
- initDB()
- resultsList = list()
- allPing()
- taskNo = db.maxTaskNo()
- db.updatePingResult(taskNo, sipServer, sipGate, unisip, gsmBox1, gsmBox2)
- doSmartTest(False)
-
- elif command == '--nagios':
- initDB()
- resultsList = list()
- allPing()
- taskNo = db.maxTaskNo()
- db.updatePingResult(taskNo, sipServer, sipGate, unisip, gsmBox1, gsmBox2)
- doSmartTest('NAGIOS')
-
- elif command == '--devconf':
- updateDevice()
-
- elif command == '--db':
- if len(sys.argv) > 2:
- try:
- caller = sys.argv[2]
- callee = sys.argv[3]
-
- except ValueError:
- print "Error given caller and destination. Type '--help' for more information."
- else:
- print "Error given caller and destination. Type '--help' for more information."
- sys.exit()
- resultsList = list()
- withDB(False)
-
- elif command == '--help':
- file = open('help.txt', 'r')
- print file.read()
-
- else:
- print "command not found, Type '--help' for more information."
- print '\n'
-else:
- global server
- global tried
-
-
- initDB() # should put db condition
- server = WebsiteCommClass.ServerHandlerSoftware(34500) #define the port
- tried = server.openSocket(10)
-
- if tried == 'TIMEOUT':
- closeFunction(db,server)
-
- test = server.receiveData(10)
- if test == 'TIMEOUT':
- closeFunction(db,server)
-
- if test == 'START TEST':
- server.sendData('CONFIRM\n')
- print 'TEST STARTED'
- withDB(True)
-
- if test == 'SMART TEST':
- allPing()
- taskNo = db.maxTaskNo()
- db.updatePingResult(taskNo, sipServer, sipGate, unisip, gsmBox1, gsmBox2)
- server.sendData('CONFIRM\n')
- print 'SMART TEST STARTED'
- resultsList = list()
- doSmartTest(True)
-
- if test == 'UPDATE DEVICE':
- server.sendData('CONFIRM\n')
- print 'UPDATE DEVICE STARTED'
- autoUpdateDevice(True)
- else:
- sys.exit('WE DIDN\'T RECEIVE THE CONFIRMATION')
-
- db.closeDBConn()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Under-Testing/Server-Code-New/help.txt b/Under-Testing/Server-Code-New/help.txt
deleted file mode 100644
index 1a3b843..0000000
--- a/Under-Testing/Server-Code-New/help.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-
-Usage: ./gsmselftest.py [option]
-
-Options and arguments (and corresponding environment variables):
-
---db [caller] [callee] : To execute the test case given by defining the caller and callee
---all : To execute all test cases
---sip : To execute SIP test cases
---gsmrz : To check whether GSM RZ network has problems or not
---gsmext : To check whether GSM BOX modem has problems or not
---incoming : To check incoming calls from Landline
---smart : To test only important points in the network and to identify the problems
---devconf : To configure the USB device on the server
---nagios : Execute smart test but only for Nagios plugin
-
- example : ./gsmselftest.py --devconf
- ./gsmselftest.py --smart
- ./gsmselftest.py --db sip GSMRZ1
diff --git a/Under-Testing/Server-Code-New/initTestClass.py b/Under-Testing/Server-Code-New/initTestClass.py
deleted file mode 100644
index 568f840..0000000
--- a/Under-Testing/Server-Code-New/initTestClass.py
+++ /dev/null
@@ -1,122 +0,0 @@
-import sys
-import subprocess, signal
-import os
-import ControllerClass
-import DbClass
-import PingClass
-import random
-from time import sleep
-
-class initTesting:
-
- def __init__(self):
- self.messageList = list()
-
- def pings(self,IP):
-
- server = PingClass.Ping(IP)
- self.serverStatus = server.ping(2)
- return self.serverStatus
-
- def initDB(self):
-
- self.db = DbClass.DBMySQLConnection()
- self.db.connectDB()
- self.dbStatus = self.db.connectDB()
-
- def initaccount(self,account,handler):
- if handler == 'sip' or handler == 'unisip' or handler == 'landline':
- if account[1] != '' or account[2] != '' or account[3] != '' or account[4] != '':
- # checking available sip account, is there enough information about the account such as username, password,server
- self.status = 1
- else:
- self.status = 0
- else:
- if account[0] != '' or account[1] != '':
- self.status = 1
- else:
- self.status = 0
-
-
- #kill process to make sure, that the handler is Terminate incase handler having problem receiving terminate message from controller
- def killProc(self):
- # define process name of the Handler
- procNameDest = 'GSM Handler'
- procNameCall = 'SIP Handler'
-
- p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
- out, err = p.communicate()
-
- #search process name and kill it.
- for line in out.splitlines():
- if procNameDest in line:
- pid = int(line.split(None, 1)[0])
- os.kill(pid, signal.SIGKILL)
- for line in out.splitlines():
- if procNameCall in line:
- pid = int(line.split(None, 1)[0])
- os.kill(pid, signal.SIGKILL)
-
-
- def initTest(self, callFrom, callTo):
-
- self.initDB() # open database connection
-
- if self.dbStatus != 0: # if connection to db establish, do the test
-
- #fetch device account detail from database
- dest = self.db.deviceAddress(str(callTo))
- caller = self.db.deviceAddress(str(callFrom))
-
- # check that the caller server allive or not
- if self.pings(caller[4]) <> 0:
-
- # check that the destination server allive or not
- if self.pings(dest[4]) <> 0:
-
- self.initaccount(caller,callFrom)
- if self.status == 1:
- self.initaccount(dest,callTo)
-
- if self.status == 1:
- #string = 'Account:username:password:server:ipaddress:portaddress:portnumber'
-
- callPortName = caller[0]
- accCaller = caller[2]+':'+caller[3]+':'+caller[4]+':'
-
- destPortName = dest[0]
- destNo = dest[1]
- accDest = dest[2]+':'+dest[3]+':'+dest[4]+':'
-
- # create controller class object and send the handler information
- makeTest = ControllerClass.controller(callFrom, callPortName, accCaller, callTo, destPortName, destNo, accDest)
- makeTest.FuncTest()
-
- self.result = str(makeTest.testResult)
-
- else:
- self.result = 100
- else:
- self.result = 100
-
- sleep(2)
- #make sure the handler have been terminated
- self.killProc() # kill all the handler
-
- self.db.closeDBConn() #close db connection
- sleep(1)
- else:
- #destintaion server die
- self.result = 501
- else:
- #caller server die
- self.result = 500
- self.db.closeDBConn()
- else:
- self.result = 333
-
- return self.result
-
-
-
-
diff --git a/Under-Testing/Server-Code-New/startSoftware.py b/Under-Testing/Server-Code-New/startSoftware.py
deleted file mode 100644
index b2beb58..0000000
--- a/Under-Testing/Server-Code-New/startSoftware.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#! /usr/bin/env python
-import ServerClass
-import subprocess
-import setproctitle
-
-setproctitle.setproctitle('Start Software')
-while 1:
- # try connect to website
- server = ServerClass.ServerHandler(34600)
- tried = server.openSocket()
- test = server.receiveData(2)
- if test == 'START APP':
- print 'start'
- try:
- script = 'gsmselftest.py'
- subprocess.Popen(['python',script], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- except ValueError:
- print " - can't start controller software -"
- server.closeConnection()
- del server
-
diff --git a/Under-Testing/Server-Code-New/truthtableClass.py b/Under-Testing/Server-Code-New/truthtableClass.py
deleted file mode 100644
index c45ab4d..0000000
--- a/Under-Testing/Server-Code-New/truthtableClass.py
+++ /dev/null
@@ -1,233 +0,0 @@
-import DbClass
-
-class trueTable:
- def __init__(self, resultsList):
-
- self.resultsList = resultsList
- self.outGoingRZ = None
- self.asteriskServer = None
- self.incomingRZ = None
- self.openBSC = None
- self.nanoBTS = None
- self.deviceStatus = list()
- self.testMount = len(resultsList)
- self.OK = 0
- self.FAILED = 0
- self.handlerError = 0
-
- def initDB(self):
- # function for connect to database
- self.db = DbClass.DBMySQLConnection()
- self.db.connectDB()
- self.dbStatus = self.db.connectDB()
-
- def lookingBTSname(self, btsname):
- if len(self.nanoBts) == 0:
- self.found = False
- else:
- found = False
- for y in self.nanoBts: #find the existing nanoBts result
- name = y[0]
- if name == btsName:
- self.found = True
- return self.found
-
- def findStatusInList(self,key):
-
- if len(self.deviceStatus) == 0:
- update = False
- else:
- update = False
- for item in self.deviceStatus:
- if key == item[0] and str(item[1]) != 'OK':
- update = True
- return update
-
- def initNagiosResult(self):
- self.initDB()
- deviceLists = self.db.deviceList()
- self.db.closeDBConn()
-
- for items in deviceLists:
- device = items[0]
- for result in self.resultsList:
- if device == result[0] or device == result[1]:
- if int(result[2]) == 200:
- if self.findStatusInList(device) == True:
- try:
- self.deviceStatus.remove([device,'NOT OK'])
- except:
- try:
- self.deviceStatus.remove([device,'UNKNOWN'])
- except:
- continue
- self.deviceStatus.append([device,'OK'])
- else:
- self.deviceStatus.append([device,'OK'])
-
- elif int(result[2]) == 486:
- found = False
- for item in self.deviceStatus:
- if device == item[0]:
- if str(item[1]) != 'OK' or str(item[1]) == 'OK':
- found = True
- if found == False:
- self.deviceStatus.append([device,'NOT OK'])
- else:
- found = False
- for item in self.deviceStatus:
- if device == item[0]:
- if str(item[1]) != 'OK' or str(item[1]) == 'OK':
- found = True
- if found == False:
- self.deviceStatus.append([device,'UNKNOWN'])
- for status in self.deviceStatus:
-
- if status[1] == 'OK':
- self.OK = self.OK+1
- elif status[1] == 'NOT OK':
- self.FAILED = self.FAILED+1
- else:
- self.handlerError = self.handlerError+1
-
- def initTrueTable(self):
- global btsName
- self.initDB()
- deviceLists = self.db.deviceList() #fetch device list from database
- externalRZList = list()
-
- for devLists in deviceLists: #define category of the external devices
- device = devLists[0]
-
- if device[0:5] == 'GSMEx' or device == 'landline':
- externalRZList.append(device) # fetch into the list
- self.db.closeDBConn()
- lists = self.resultsList
- self.nanoBts = list()
- gsmResultList = list()
-
- i= 1
- for w in lists:
- call=w[0]
- dest=w[1]
-
-
- if call[0:5]=='GSMRZ':
- if i <= int(call[5:]):
- i = int(call[5:])
- if dest[0:5]=='GSMRZ':
-
- if i <= int(dest[5:]):
- i = int(dest[5:])
- i = i+1
-
- for x in lists: # to find nanoBts, asterik server and open BSC status regarding result test for GSM RZ
- call=x[0]
- dest=x[1]
- result=x[2]
- stop = False
- j=1
-
- if call[0:5]=='GSMRZ' or dest[0:5]=='GSMRZ':
- while stop != True:
- if j != i:
- key = 'GSMRZ'+str(j)
- if key == call or key == dest:
-
- btsName = 'nanoBts '+str(j)
- if result == '200':
-
- btsName = 'nanoBts '+str(j)
- self.asteriskServer = True #set status of asterik server as working
- self.lookingBTSname(btsName)
- if self.found != True:
- #if doesnt found the nanoBts, add the result to the list, otherwise just ignoring
- try:
- self.nanoBts.remove(btsName)
- except ValueError:
- message = 'Error'
-
- self.nanoBts.append([btsName,True])
-
- if key == call:
- for z in externalRZList:# find the result for outgoing call from GSM RZ to external RZ network
- if dest == z:
- self.outGoingRZ = True #set status as working for outgoing RZ
- if key == dest:
- for z in externalRZList:
- if call == z:
- self.incomingRZ = True # find the result for imcoming call to GSM RZ from external RZ network
- elif result == '486':
- found = False
- if key == call:
- for z in externalRZList:
- if dest == z and self.outGoingRZ != True:
- self.outGoingRZ = False
- if key == dest:
- for z in externalRZList:
- if call == z and self.incomingRZ != True:
- self.incomingRZ = False
- if self.nanoBts == '':
- self.nanoBts.append([btsName,False])
- for y in self.nanoBts: #find the existing nanoBts result
- name = y[0]
- if name == btsName and y[1] == True:
- found = True
- if found != True:
- self.nanoBts.append([btsName,False])
-
- elif (str(result) == '801' or str(result) == '999') and key == call:
- self.lookingBTSname(key)
- if self.found != True:
- self.nanoBts.append([key,result])
-
- elif (str(result) == '802' or str(result) == '998') and key == dest:
- self.lookingBTSname(key)
- if self.found != True:
- self.nanoBts.append([key,result])
-
- j = j+1
- elif j == i:
- stop = True
-
- if call[0:5]=='GSMEx': # looking for calling from GSMexternal
- found = False
- if len(self.nanoBts) == 0:
- self.nanoBts.append([call,result])
- found = False
- else:
- for y in self.nanoBts: #find the existing result for GSM external in the list
- name = y[0]
- if name == call:
- if int(result) == 200:
- if int(y[1]) == 486 or int(y[1]) == 999 or int(y[1]) == 998 or int(y[1]) == 801:
- self.nanoBts.remove(y)
- else:
- found = True
- if found != True:
- self.nanoBts.append([call,result])
-
- if dest[0:5]=='GSMEx': # looking for destination call to GSMexternal
- found = False
- if len(self.nanoBts) == 0:
- self.nanoBts.append([dest,result])
- found = False
- else:
-
- for y in self.nanoBts:
- name = y[0]
- if name == dest:
- if int(result) == 200:
- if int(y[1]) == 486 or int(y[1]) == 999 or int(y[1]) == 998 or int(y[1]) == 402 or int(y[1]) == 802:
- self.nanoBts.remove(y)
- else:
- found = True
- if found != True:
- self.nanoBts.append([dest,result])
-
-
- for device in externalRZList:
- if device == dest and int(result) == 200:
- self.outGoingRZ = True
-
-
diff --git a/Under-Testing/Server-Code-New/usbDetectClass.py b/Under-Testing/Server-Code-New/usbDetectClass.py
deleted file mode 100644
index d64e328..0000000
--- a/Under-Testing/Server-Code-New/usbDetectClass.py
+++ /dev/null
@@ -1,96 +0,0 @@
-from serial import * #serial port library
-import sys
-from time import sleep
-import DbClass
-
-
-class serialPort:
-
- def __init__(self, portAddress):
- self.portAddress = portAddress
- self.portExist = 0
- self.IMEI = None
- self.number = None
- #self.updateStatus = None
-
- def initDB(self):
- self.db = DbClass.DBMySQLConnection()
- self.db.connectDB()
- self.dbStatus = self.db.connectDB()
-
- def initUpdate(self, deviceName, newPortName, newNumber):
- self.initDB()
-
- if self.dbStatus != 0:
- self.db.updateGSMDevice(deviceName, newPortName, newNumber)
- else:
- print 'No connection to database'
-
- def portInit(self):
- self.portExist = 0
- try:
- self.ser = Serial(
- port='/dev/'+self.portAddress,
- baudrate=19200,
- bytesize=EIGHTBITS,
- parity=PARITY_NONE,
- stopbits=STOPBITS_ONE)
- self.ser.open()
- self.ser.isOpen()
- self.portExist = 1
-
- except Exception, e:
- return 0
-
- def isInteger(self, x):
- try:
- int(x)
- return True
- except:
- return False
-
- def findIMEI(self):
- self.portInit()
- if self.portExist == 1:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('AT+GSN\r')
- sleep(0.5)
- result = self.ser.read(25)
- if result != '':
- self.IMEI = result[result.find('3'):15+result.find('3')]
- else:
- self.IMEI = 'IMEI not found'
- return self.IMEI
-
- else:
- self.IMEI = 'port not found'
- return 0
-
- def findNumber(self):
- self.portInit()
-
- if self.portExist == 1:
- self.ser.flushInput() #clean the input buffer for serial port
- self.ser.write('AT+CNUM\r')
- sleep(0.5)
- readNum = self.ser.read(35)
- self.ser.close()
- firstQuote = readNum.find('"')
- cutString = readNum [firstQuote:]
- secondQuote = cutString.find(',')
- number = cutString[1:secondQuote-1]
-
- if number != '':
- if number.find('+') == 0:
- number = '0'+number[3:len(number)]
- elif int(number[0:1]) == 4:
- number = '0'+number[2:len(number)]
- self.number = number
- else:
- self.number = 'number not found'
-
- return self.number
-
- else:
- self.number = 'port not found'
- return 0
diff --git a/Under-Testing/Website/Images/AutoIcon.png b/Under-Testing/Website/Images/AutoIcon.png
deleted file mode 100644
index 5ff782f..0000000
--- a/Under-Testing/Website/Images/AutoIcon.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/Images/BackGround.jpg b/Under-Testing/Website/Images/BackGround.jpg
deleted file mode 100644
index 25aa515..0000000
--- a/Under-Testing/Website/Images/BackGround.jpg
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/Images/BackgroundLogin.png b/Under-Testing/Website/Images/BackgroundLogin.png
deleted file mode 100644
index 0608425..0000000
--- a/Under-Testing/Website/Images/BackgroundLogin.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/Images/CheckAllButton.png b/Under-Testing/Website/Images/CheckAllButton.png
deleted file mode 100644
index 95882f5..0000000
--- a/Under-Testing/Website/Images/CheckAllButton.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/Images/ChooseIcon.png b/Under-Testing/Website/Images/ChooseIcon.png
deleted file mode 100644
index 53ac136..0000000
--- a/Under-Testing/Website/Images/ChooseIcon.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/Images/GSMTestButton.png b/Under-Testing/Website/Images/GSMTestButton.png
deleted file mode 100644
index a663494..0000000
--- a/Under-Testing/Website/Images/GSMTestButton.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/Images/ManualIcon.png b/Under-Testing/Website/Images/ManualIcon.png
deleted file mode 100644
index 222f446..0000000
--- a/Under-Testing/Website/Images/ManualIcon.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/Images/MobilePhone.png b/Under-Testing/Website/Images/MobilePhone.png
deleted file mode 100644
index e3f9fc8..0000000
--- a/Under-Testing/Website/Images/MobilePhone.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/Images/MobilePhoneIcon.png b/Under-Testing/Website/Images/MobilePhoneIcon.png
deleted file mode 100644
index c369145..0000000
--- a/Under-Testing/Website/Images/MobilePhoneIcon.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/Images/SIPTestButton.png b/Under-Testing/Website/Images/SIPTestButton.png
deleted file mode 100644
index bbb2408..0000000
--- a/Under-Testing/Website/Images/SIPTestButton.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/Images/SmartIcon.png b/Under-Testing/Website/Images/SmartIcon.png
deleted file mode 100644
index dcfae0a..0000000
--- a/Under-Testing/Website/Images/SmartIcon.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/Images/SubmitButton.png b/Under-Testing/Website/Images/SubmitButton.png
deleted file mode 100644
index 904c8b0..0000000
--- a/Under-Testing/Website/Images/SubmitButton.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/Images/UncheckButton.png b/Under-Testing/Website/Images/UncheckButton.png
deleted file mode 100644
index 464ee2c..0000000
--- a/Under-Testing/Website/Images/UncheckButton.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/Images/border1.png b/Under-Testing/Website/Images/border1.png
deleted file mode 100644
index 09ea911..0000000
--- a/Under-Testing/Website/Images/border1.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/TaskTest.html b/Under-Testing/Website/TaskTest.html
deleted file mode 100644
index 67c154b..0000000
--- a/Under-Testing/Website/TaskTest.html
+++ /dev/null
@@ -1,453 +0,0 @@
-<!DOCTYPE html>
-<html style="height: 100%;">
-
-<head>
- <title>GSM selftest Software</title>
- <meta name="generator" content="BBEdit 9.6" />
-</head>
-
-<body onUnload="window.location.href=thisPage.html;";" background="Images/BackGround.jpg" style="height: 100%;">
- <table style="width:75%; margin:auto" border="0">
-
- <tr align="center">
- <td height="100px" align="right"><a href="index.php" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">HOME</font></a></td>
- <td height="100px" align="center"><a href="about.html" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">About Us</font></a></td>
- <td height="120px" align="center"><a href="report.pdf" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">Help</font></a></td>
- </tr>
- <tr align="center">
- <td height="100px" align="right"></td>
- <td height="100px" align="center"></td>
- <td height="100px" align="left"></td>
- </tr>
- <tr valign="center" style="height: 100%;">
- <td style="text-align:center;"><font size="2" face="Century Gothic" color="white">
- <INPUT type="image" value="check all" name="checkall" src="Images/SIPTestButton.png" onClick="sipTest()"><br />
- <INPUT type="image" value="check all" name="checkall" src="Images/GSMTestButton.png" onClick="gsmtest()"><br />
- <INPUT type="image" value="check all" name="checkall" src="Images/CheckAllButton.png" onClick="fullTest()"><br />
- <!--<input type=button value="Check All" onClick="fullTest()" size="2" face="Century Gothic" color="white"><br />-->
- <INPUT type="image" value="uncheck" name="uncheck" src="Images/UncheckButton.png" onClick="deselectAll()"><br />
- <!--<input type=button value="UnCheck All values" onClick="deselectAll()"><br />-->
- <form name="testForm" form action="mutexTry.php" method="POST">
- <INPUT type="image" value="submit" name="submit" src="Images/SubmitButton.png" onclick="this.style.display='none'; return true;"><br />
- <!--<input type=SUBMIT value="Submit"><br />-->
- </td>
- <td style="text-align:top;">
-
- <font size="2" face="Century Gothic" color="white">
-
- <label><input type="checkbox" name='sip_gsmrz1'> SIP to RZ-GSM 1</label><br />
- <label><input type="checkbox" name="sip_gsmrz2"> SIP to RZ-GSM 2</label><br />
- <label><input type="checkbox" name="sip_gsmrz3"> SIP to RZ-GSM 3</label><br />
-
- <label><input type="checkbox" name="sip_gsmee"> SIP to E-Plus</label><br />
- <label><input type="checkbox" name="sip_gsmev"> SIP to Vodaphone</label><br />
- <label><input type="checkbox" name="sip_gsmet"> SIP to T-Mobile</label><br />
- <label><input type="checkbox" name="sip_gsmeo"> SIP to O2</label><br />
-
- <label><input type="checkbox" name="sip_landln"> SIP to Landline</label><br />
- <label><input type="checkbox" name="sip_sipuniv"> SIP to Uni.telephone</label><br />
- <label><input type="checkbox" name="gsmrz1_sip"> RZ-GSM 1 to SIP</label><br />
- <label><input type="checkbox" name="gsmrz2_sip"> RZ-GSM 2 to SIP</label><br />
- <label><input type="checkbox" name="gsmrz3_sip"> RZ-GSM 3 to SIP</label><br />
-
- <label><input type="checkbox" name="gsmrz1_gsmrz2"> RZ-GSM 1 to RZ-GSM 2</label><br />
- <label><input type="checkbox" name="gsmrz1_gsmrz3"> RZ-GSM 1 to RZ-GSM 3</label><br />
- <label><input type="checkbox" name="gsmrz2_gsmrz3"> RZ-GSM 2 to RZ-GSM 3</label><br />
- <label><input type="checkbox" name="landline_sip"> Landline to SIP </label><br />
-
- <label><input type="checkbox" name="landline_gsmrz1"> Landline to RZ-GSM 1</label><br />
-
- </td> </font>
-
- <td style="text-align:top;">
- <font size="2" face="Century Gothic" color="white">
- <label><input type="checkbox" name="landline_gsmrz2"> Landline to RZ-GSM 2</label><br />
- <label><input type="checkbox" name="landline_gsmrz3"> Landline to RZ-GSM 3</label><br />
-
- <label><input type="checkbox" name="gsmrz1_gsmee"> RZ-GSM 1 to E-Plus</label><br />
- <label><input type="checkbox" name="gsmrz1_gsmev"> RZ-GSM 1 to Vodaphone</label><br />
-
- <label><input type="checkbox" name="gsmrz1_gsmet"> RZ-GSM 1 to T-Mobile</label><br />
- <label><input type="checkbox" name="gsmrz1_gsmeo"> RZ-GSM 1 to O2</label><br />
-
- <label><input type="checkbox" name="gsmrz2_gsmee"> RZ-GSM 2 to E-Plus</label><br />
- <label><input type="checkbox" name="gsmrz2_gsmev"> RZ-GSM 2 to Vodaphone</label><br />
- <label><input type="checkbox" name="gsmrz2_gsmet"> RZ-GSM 2 to T-Mobile</label><br />
- <label><input type="checkbox" name="gsmrz2_gsmeo"> RZ-GSM 2 to O2</label><br />
-
- <label><input type="checkbox" name="gsmrz3_gsmee"> RZ-GSM 3 to E-Plus</label><br />
- <label><input type="checkbox" name="gsmrz3_gsmev"> RZ-GSM 3 to Vodaphone</label><br />
- <label><input type="checkbox" name="gsmrz3_gsmet"> RZ-GSM 3 to T-Mobile</label><br />
- <label><input type="checkbox" name="gsmrz3_gsmeo"> RZ-GSM 3 to O2</label><br />
-
-
- <label><input type="checkbox" name="gsmrz1_unisip"> RZ-GSM 1 to Uni.telephone</label><br />
- <label><input type="checkbox" name="gsmrz2_unisip"> RZ-GSM 2 to Uni.telephone</label><br />
- <label><input type="checkbox" name="gsmrz3_unisip"> RZ-GSM 3 to Uni.telephone</label><br />
-
- </font>
-
- </td>
- </tr>
-
- <tr>
- <table style="width:100%; margin-top: -10px; height: 300px; align: center" valign="bottom" border="0">
- <tr>
- <td height="100px" align="center" valign="bottom"><font size="1" face="Century Gothic" color="LightGray">Albert-Ludwig University of Freiburg 2011</td>
- </tr>
- </table>
- </tr>
- </table></form>
-
-<script type = "text/javascript">
-
-function sipTest()
-{
- document.testForm.sip_gsmrz1.checked=true
- document.testForm.sip_gsmrz2.checked=false
- document.testForm.sip_gsmrz3.checked=false
-
- document.testForm.sip_landln.checked=true
- document.testForm.sip_sipuniv.checked=true
-
- document.testForm.sip_gsmee.checked=false
- document.testForm.sip_gsmev.checked=false
- document.testForm.sip_gsmet.checked=false
- document.testForm.sip_gsmeo.checked=false
-
- document.testForm.gsmrz1_gsmrz2.checked=false
- document.testForm.gsmrz1_gsmrz3.checked=false
- document.testForm.gsmrz2_gsmrz3.checked=false
-
- document.testForm.gsmrz1_sip.checked=false
- document.testForm.gsmrz2_sip.checked=true
- document.testForm.gsmrz3_sip.checked=false
-
- document.testForm.landline_sip.checked=true
-
- document.testForm.landline_gsmrz1.checked=false
- document.testForm.landline_gsmrz2.checked=false
- document.testForm.landline_gsmrz3.checked=true
-
- document.testForm.gsmrz1_gsmee.checked=false
- document.testForm.gsmrz1_gsmev.checked=false
- document.testForm.gsmrz1_gsmet.checked=false
- document.testForm.gsmrz1_gsmeo.checked=false
-
- document.testForm.gsmrz2_gsmee.checked=false
- document.testForm.gsmrz2_gsmev.checked=false
- document.testForm.gsmrz2_gsmet.checked=false
- document.testForm.gsmrz2_gsmeo.checked=false
-
- document.testForm.gsmrz3_gsmee.checked=false
- document.testForm.gsmrz3_gsmev.checked=false
- document.testForm.gsmrz3_gsmet.checked=false
- document.testForm.gsmrz3_gsmeo.checked=false
-
- document.testForm.gsmrz1_unisip.checked=false
- document.testForm.gsmrz2_unisip.checked=true
- document.testForm.gsmrz3_unisip.checked=false
-
- FancyForm.update(document.testForm.sip_gsmrz1.getParent())
- FancyForm.update(document.testForm.sip_gsmrz2.getParent())
- FancyForm.update(document.testForm.sip_gsmrz3.getParent())
-
- FancyForm.update(document.testForm.sip_landln.getParent())
- FancyForm.update(document.testForm.sip_sipuniv.getParent())
- FancyForm.update(document.testForm.sip_gsmee.getParent())
- FancyForm.update(document.testForm.sip_gsmev.getParent())
- FancyForm.update(document.testForm.sip_gsmet.getParent())
- FancyForm.update(document.testForm.sip_gsmeo.getParent())
- FancyForm.update(document.testForm.gsmrz1_sip.getParent())
- FancyForm.update(document.testForm.gsmrz2_sip.getParent())
- FancyForm.update(document.testForm.gsmrz3_sip.getParent())
-
- FancyForm.update(document.testForm.gsmrz1_gsmrz2.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmrz3.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmrz3.getParent())
-
- FancyForm.update(document.testForm.landline_sip.getParent())
- FancyForm.update(document.testForm.landline_gsmrz1.getParent())
- FancyForm.update(document.testForm.landline_gsmrz2.getParent())
- FancyForm.update(document.testForm.landline_gsmrz3.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmee.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmev.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmet.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmeo.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmee.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmev.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmet.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmeo.getParent())
- FancyForm.update(document.testForm.gsmrz3_gsmee.getParent())
- FancyForm.update(document.testForm.gsmrz3_gsmev.getParent())
- FancyForm.update(document.testForm.gsmrz3_gsmet.getParent())
- FancyForm.update(document.testForm.gsmrz3_gsmeo.getParent())
- FancyForm.update(document.testForm.gsmrz1_unisip.getParent())
- FancyForm.update(document.testForm.gsmrz2_unisip.getParent())
- FancyForm.update(document.testForm.gsmrz3_unisip.getParent())
-}
-
-function gsmtest()
-{
- document.testForm.sip_gsmrz1.checked=true
- document.testForm.sip_gsmrz2.checked=false
- document.testForm.sip_gsmrz3.checked=false
-
- document.testForm.sip_landln.checked=false
- document.testForm.sip_sipuniv.checked=false
-
- document.testForm.sip_gsmee.checked=false
- document.testForm.sip_gsmev.checked=false
- document.testForm.sip_gsmet.checked=false
- document.testForm.sip_gsmeo.checked=false
-
- document.testForm.gsmrz1_gsmrz2.checked=false
- document.testForm.gsmrz1_gsmrz3.checked=false
- document.testForm.gsmrz2_gsmrz3.checked=true
-
- document.testForm.gsmrz1_sip.checked=true
- document.testForm.gsmrz2_sip.checked=false
- document.testForm.gsmrz3_sip.checked=false
-
- document.testForm.landline_sip.checked=false
-
- document.testForm.landline_gsmrz1.checked=false
- document.testForm.landline_gsmrz2.checked=true
- document.testForm.landline_gsmrz3.checked=false
-
- document.testForm.gsmrz1_gsmee.checked=true
- document.testForm.gsmrz1_gsmev.checked=false
- document.testForm.gsmrz1_gsmet.checked=false
- document.testForm.gsmrz1_gsmeo.checked=false
-
- document.testForm.gsmrz2_gsmee.checked=false
- document.testForm.gsmrz2_gsmev.checked=false
- document.testForm.gsmrz2_gsmet.checked=true
- document.testForm.gsmrz2_gsmeo.checked=false
-
- document.testForm.gsmrz3_gsmee.checked=false
- document.testForm.gsmrz3_gsmev.checked=true
- document.testForm.gsmrz3_gsmet.checked=false
- document.testForm.gsmrz3_gsmeo.checked=true
-
- document.testForm.gsmrz1_unisip.checked=true
- document.testForm.gsmrz2_unisip.checked=false
- document.testForm.gsmrz3_unisip.checked=false
-
- FancyForm.update(document.testForm.sip_gsmrz1.getParent())
- FancyForm.update(document.testForm.sip_gsmrz2.getParent())
- FancyForm.update(document.testForm.sip_gsmrz3.getParent())
- FancyForm.update(document.testForm.sip_gsmee.getParent())
- FancyForm.update(document.testForm.sip_gsmev.getParent())
- FancyForm.update(document.testForm.sip_gsmet.getParent())
- FancyForm.update(document.testForm.sip_gsmeo.getParent())
- FancyForm.update(document.testForm.sip_landln.getParent())
- FancyForm.update(document.testForm.sip_sipuniv.getParent())
-
- FancyForm.update(document.testForm.gsmrz1_sip.getParent())
- FancyForm.update(document.testForm.gsmrz2_sip.getParent())
- FancyForm.update(document.testForm.gsmrz3_sip.getParent())
-
- FancyForm.update(document.testForm.gsmrz1_gsmrz2.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmrz3.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmrz3.getParent())
-
- FancyForm.update(document.testForm.landline_sip.getParent())
- FancyForm.update(document.testForm.landline_gsmrz1.getParent())
- FancyForm.update(document.testForm.landline_gsmrz2.getParent())
- FancyForm.update(document.testForm.landline_gsmrz3.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmee.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmev.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmet.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmeo.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmee.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmev.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmet.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmeo.getParent())
- FancyForm.update(document.testForm.gsmrz3_gsmee.getParent())
- FancyForm.update(document.testForm.gsmrz3_gsmev.getParent())
- FancyForm.update(document.testForm.gsmrz3_gsmet.getParent())
- FancyForm.update(document.testForm.gsmrz3_gsmeo.getParent())
- FancyForm.update(document.testForm.gsmrz1_unisip.getParent())
- FancyForm.update(document.testForm.gsmrz2_unisip.getParent())
- FancyForm.update(document.testForm.gsmrz3_unisip.getParent())
-}
-function fullTest()
-{
- document.testForm.sip_gsmrz1.checked=true
- document.testForm.sip_gsmrz2.checked=true
- document.testForm.sip_gsmrz3.checked=true
-
- document.testForm.sip_landln.checked=true
- document.testForm.sip_sipuniv.checked=true
-
- document.testForm.sip_gsmee.checked=true
- document.testForm.sip_gsmev.checked=true
- document.testForm.sip_gsmet.checked=true
- document.testForm.sip_gsmeo.checked=true
-
- document.testForm.gsmrz1_gsmrz2.checked=true
- document.testForm.gsmrz1_gsmrz3.checked=true
- document.testForm.gsmrz2_gsmrz3.checked=true
-
- document.testForm.gsmrz1_sip.checked=true
- document.testForm.gsmrz2_sip.checked=true
- document.testForm.gsmrz3_sip.checked=true
-
- document.testForm.landline_sip.checked=true
-
- document.testForm.landline_gsmrz1.checked=true
- document.testForm.landline_gsmrz2.checked=true
- document.testForm.landline_gsmrz3.checked=true
-
- document.testForm.gsmrz1_gsmee.checked=true
- document.testForm.gsmrz1_gsmev.checked=true
- document.testForm.gsmrz1_gsmet.checked=true
- document.testForm.gsmrz1_gsmeo.checked=true
-
- document.testForm.gsmrz2_gsmee.checked=true
- document.testForm.gsmrz2_gsmev.checked=true
- document.testForm.gsmrz2_gsmet.checked=true
- document.testForm.gsmrz2_gsmeo.checked=true
-
- document.testForm.gsmrz3_gsmee.checked=true
- document.testForm.gsmrz3_gsmev.checked=true
- document.testForm.gsmrz3_gsmet.checked=true
- document.testForm.gsmrz3_gsmeo.checked=true
-
- document.testForm.gsmrz1_unisip.checked=true
- document.testForm.gsmrz2_unisip.checked=true
- document.testForm.gsmrz3_unisip.checked=true
-
- FancyForm.update(document.testForm.sip_gsmrz1.getParent())
- FancyForm.update(document.testForm.sip_gsmrz2.getParent())
- FancyForm.update(document.testForm.sip_gsmrz3.getParent())
- FancyForm.update(document.testForm.sip_gsmee.getParent())
- FancyForm.update(document.testForm.sip_gsmev.getParent())
- FancyForm.update(document.testForm.sip_gsmet.getParent())
- FancyForm.update(document.testForm.sip_gsmeo.getParent())
- FancyForm.update(document.testForm.sip_landln.getParent())
- FancyForm.update(document.testForm.sip_sipuniv.getParent())
-
- FancyForm.update(document.testForm.gsmrz1_sip.getParent())
- FancyForm.update(document.testForm.gsmrz2_sip.getParent())
- FancyForm.update(document.testForm.gsmrz3_sip.getParent())
-
- FancyForm.update(document.testForm.gsmrz1_gsmrz2.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmrz3.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmrz3.getParent())
-
- FancyForm.update(document.testForm.landline_sip.getParent())
- FancyForm.update(document.testForm.landline_gsmrz1.getParent())
- FancyForm.update(document.testForm.landline_gsmrz2.getParent())
- FancyForm.update(document.testForm.landline_gsmrz3.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmee.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmev.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmet.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmeo.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmee.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmev.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmet.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmeo.getParent())
- FancyForm.update(document.testForm.gsmrz3_gsmee.getParent())
- FancyForm.update(document.testForm.gsmrz3_gsmev.getParent())
- FancyForm.update(document.testForm.gsmrz3_gsmet.getParent())
- FancyForm.update(document.testForm.gsmrz3_gsmeo.getParent())
- FancyForm.update(document.testForm.gsmrz1_unisip.getParent())
- FancyForm.update(document.testForm.gsmrz2_unisip.getParent())
- FancyForm.update(document.testForm.gsmrz3_unisip.getParent())
-}
-
-
-function deselectAll()
-{
- document.testForm.sip_gsmrz1.checked=false
- document.testForm.sip_gsmrz2.checked=false
- document.testForm.sip_gsmrz3.checked=false
-
- document.testForm.sip_landln.checked=false
- document.testForm.sip_sipuniv.checked=false
-
- document.testForm.sip_gsmee.checked=false
- document.testForm.sip_gsmev.checked=false
- document.testForm.sip_gsmet.checked=false
- document.testForm.sip_gsmeo.checked=false
-
- document.testForm.gsmrz1_gsmrz2.checked=false
- document.testForm.gsmrz1_gsmrz3.checked=false
- document.testForm.gsmrz2_gsmrz3.checked=false
-
- document.testForm.gsmrz1_sip.checked=false
- document.testForm.gsmrz2_sip.checked=false
- document.testForm.gsmrz3_sip.checked=false
-
- document.testForm.landline_sip.checked=false
-
- document.testForm.landline_gsmrz1.checked=false
- document.testForm.landline_gsmrz2.checked=false
- document.testForm.landline_gsmrz3.checked=false
-
- document.testForm.gsmrz1_gsmee.checked=false
- document.testForm.gsmrz1_gsmev.checked=false
- document.testForm.gsmrz1_gsmet.checked=false
- document.testForm.gsmrz1_gsmeo.checked=false
-
- document.testForm.gsmrz2_gsmee.checked=false
- document.testForm.gsmrz2_gsmev.checked=false
- document.testForm.gsmrz2_gsmet.checked=false
- document.testForm.gsmrz2_gsmeo.checked=false
-
- document.testForm.gsmrz3_gsmee.checked=false
- document.testForm.gsmrz3_gsmev.checked=false
- document.testForm.gsmrz3_gsmet.checked=false
- document.testForm.gsmrz3_gsmeo.checked=false
-
-
- document.testForm.gsmrz1_unisip.checked=false
- document.testForm.gsmrz2_unisip.checked=false
- document.testForm.gsmrz3_unisip.checked=false
-
- FancyForm.update(document.testForm.sip_gsmrz1.getParent())
- FancyForm.update(document.testForm.sip_gsmrz2.getParent())
- FancyForm.update(document.testForm.sip_gsmrz3.getParent())
-
- FancyForm.update(document.testForm.sip_landln.getParent())
- FancyForm.update(document.testForm.sip_sipuniv.getParent())
-
- FancyForm.update(document.testForm.sip_gsmee.getParent())
- FancyForm.update(document.testForm.sip_gsmev.getParent())
- FancyForm.update(document.testForm.sip_gsmet.getParent())
- FancyForm.update(document.testForm.sip_gsmeo.getParent())
-
- FancyForm.update(document.testForm.gsmrz1_sip.getParent())
- FancyForm.update(document.testForm.gsmrz2_sip.getParent())
- FancyForm.update(document.testForm.gsmrz3_sip.getParent())
-
- FancyForm.update(document.testForm.gsmrz1_gsmrz2.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmrz3.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmrz3.getParent())
-
- FancyForm.update(document.testForm.landline_sip.getParent())
- FancyForm.update(document.testForm.landline_gsmrz1.getParent())
- FancyForm.update(document.testForm.landline_gsmrz2.getParent())
- FancyForm.update(document.testForm.landline_gsmrz3.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmee.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmev.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmet.getParent())
- FancyForm.update(document.testForm.gsmrz1_gsmeo.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmee.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmev.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmet.getParent())
- FancyForm.update(document.testForm.gsmrz2_gsmeo.getParent())
- FancyForm.update(document.testForm.gsmrz3_gsmee.getParent())
- FancyForm.update(document.testForm.gsmrz3_gsmev.getParent())
- FancyForm.update(document.testForm.gsmrz3_gsmet.getParent())
- FancyForm.update(document.testForm.gsmrz3_gsmeo.getParent())
- FancyForm.update(document.testForm.gsmrz1_unisip.getParent())
- FancyForm.update(document.testForm.gsmrz2_unisip.getParent())
- FancyForm.update(document.testForm.gsmrz3_unisip.getParent())
-
-}
-</script>-->
-</body>
-</html>
diff --git a/Under-Testing/Website/about.html b/Under-Testing/Website/about.html
deleted file mode 100644
index bd6e2c4..0000000
--- a/Under-Testing/Website/about.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE html>
-<html style="height: 100%;">
-
-<head>
- <title>GSM selftest Software</title>
- <meta name="generator" content="BBEdit 9.6" />
-</head>
-
-<body background="Images/BackGround.jpg" style="height: 100%;">
-
-<FORM name="testForm" form action="mutexTry.php" method="POST">
- <table style="width:50%; height: 100%; margin:auto;" border="0">
- <tr>
- <td height="120px" align="center"><a href="index.php" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">HOME</font></a></td>
- <td height="120px" align="center"><a href="about.html" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">About Us</font></a></td>
- <td height="120px" align="center"><a href="report.pdf" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">Help</font></a></td>
- </tr>
-
- <tr>
- <td height="80px" align="center"></td>
- </tr>
-
- <tr>
- <table style="width:65%; align: center; margin:auto;" border="0" clear: both;>
- <tr>
- <td height="100px" align="left"><font size="3" face="Century Gothic" color="white">The objective of the software is the design and implementation of a monitoring and test system for the RZ-GSM network. The Software will testing the connection between caller and destination then provide information about the test including the part may having problem.</br>
-<br>
-Here is an example:</br>
-I like to test the GSM RZ network and the connection to SIP. Thus I have to connect a mobile phone to the test system to control the phone over AT commands to call the SIP end point. The sip endpoint is running on the test system as well. If everything works, the SIP end point is ringing and the test system can pickup the call then the software will provide information about status of nanoBTS, OpenBSC and Asterisk Server all in perfect condition.</br>
-<br>
-Information Regarding the test Result:</br>
-You can find detail information about the test result on the test result page after submit selected test. The test information will be provide in two type, by table and picture. In Table side, you can find the detail information about your test such as caller, destination, respond message and description about respond message. on the right hand side, you will find picture which descript about the test using picture. We make theree different kind of coloring in every part of the network. Red sign mean that the part having problem or doesnt work, Yellow sign mean that the part have not tested and Green sign mean that the part is fully working. On the picture side also store information about status of the handler which are controling some part of the network such as GSM RZ 1 and GSM RZ 2.</br>
-</font></td>
- </tr>
- </table>
- </tr>
-
- <tr>
- <table style="width:100%; margin-top: -20px; height:50%; align: center" border="0" clear: both;>
- <tr>
- <td height="100px" align="center" valign="bottom"><font size="1" face="Century Gothic" color="LightGray">Albert-Ludwig University of Freiburg 2011</td>
- </tr>
- </table>
- </tr>
- </table>
-</FORM>
-
-</body>
-</html>
diff --git a/Under-Testing/Website/class/pBarcode128.class.php b/Under-Testing/Website/class/pBarcode128.class.php
deleted file mode 100644
index 07f5db8..0000000
--- a/Under-Testing/Website/class/pBarcode128.class.php
+++ /dev/null
@@ -1,184 +0,0 @@
-<?php
- /*
- pBarcode128 - class to create barcodes (128B)
-
- Version : 2.1.2
- Made by : Jean-Damien POGOLOTTI
- Last Update : 03/08/11
-
- 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.
- */
-
- /* pData class definition */
- class pBarcode128
- {
- var $Codes;
- var $Reverse;
- var $Result;
- var $pChartObject;
- var $CRC;
-
- /* Class creator */
- function pBarcode128($BasePath="")
- {
- $this->Codes = "";
- $this->Reverse = "";
-
- $FileHandle = @fopen($BasePath."data/128B.db", "r");
-
- if (!$FileHandle) { die("Cannot find barcode database (".$BasePath."128B.db)."); }
-
- while (!feof($FileHandle))
- {
- $Buffer = fgets($FileHandle,4096);
- $Buffer = str_replace(chr(10),"",$Buffer);
- $Buffer = str_replace(chr(13),"",$Buffer);
- $Values = preg_split("/;/",$Buffer);
-
- $this->Codes[$Values[1]]["ID"] = $Values[0];
- $this->Codes[$Values[1]]["Code"] = $Values[2];
- $this->Reverse[$Values[0]]["Code"] = $Values[2];
- $this->Reverse[$Values[0]]["Asc"] = $Values[1];
- }
- fclose($FileHandle);
- }
-
- /* Return the projected size of a barcode */
- function getSize($TextString,$Format="")
- {
- $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
- $ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
- $LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
- $DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
- $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : 12;
- $Height = isset($Format["Height"]) ? $Format["Height"] : 30;
-
- $TextString = $this->encode128($TextString);
- $BarcodeLength = strlen($this->Result);
-
- if ( $DrawArea ) { $WOffset = 20; } else { $WOffset = 0; }
- if ( $ShowLegend ) { $HOffset = $FontSize+$LegendOffset+$WOffset; } else { $HOffset = 0; }
-
- $X1 = cos($Angle * PI / 180) * ($WOffset+$BarcodeLength);
- $Y1 = sin($Angle * PI / 180) * ($WOffset+$BarcodeLength);
-
- $X2 = $X1 + cos(($Angle+90) * PI / 180) * ($HOffset+$Height);
- $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * ($HOffset+$Height);
-
-
- $AreaWidth = max(abs($X1),abs($X2));
- $AreaHeight = max(abs($Y1),abs($Y2));
-
- return(array("Width"=>$AreaWidth,"Height"=>$AreaHeight));
- }
-
- function encode128($Value,$Format="")
- {
- $this->Result = "11010010000";
- $this->CRC = 104;
- $TextString = "";
-
- for($i=1;$i<=strlen($Value);$i++)
- {
- $CharCode = ord($this->mid($Value,$i,1));
- if ( isset($this->Codes[$CharCode]) )
- {
- $this->Result = $this->Result.$this->Codes[$CharCode]["Code"];
- $this->CRC = $this->CRC + $i*$this->Codes[$CharCode]["ID"];
- $TextString = $TextString.chr($CharCode);
- }
- }
- $this->CRC = $this->CRC - floor($this->CRC/103)*103;
-
- $this->Result = $this->Result.$this->Reverse[$this->CRC]["Code"];
- $this->Result = $this->Result."1100011101011";
-
- return($TextString);
- }
-
- /* Create the encoded string */
- function draw($Object,$Value,$X,$Y,$Format="")
- {
- $this->pChartObject = $Object;
-
- $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;
- $Height = isset($Format["Height"]) ? $Format["Height"] : 30;
- $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
- $ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
- $LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
- $DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
- $AreaR = isset($Format["AreaR"]) ? $Format["AreaR"] : 255;
- $AreaG = isset($Format["AreaG"]) ? $Format["AreaG"] : 255;
- $AreaB = isset($Format["AreaB"]) ? $Format["AreaB"] : 255;
- $AreaBorderR = isset($Format["AreaBorderR"]) ? $Format["AreaBorderR"] : $AreaR;
- $AreaBorderG = isset($Format["AreaBorderG"]) ? $Format["AreaBorderG"] : $AreaG;
- $AreaBorderB = isset($Format["AreaBorderB"]) ? $Format["AreaBorderB"] : $AreaB;
-
- $TextString = $this->encode128($Value);
-
- if ( $DrawArea )
- {
- $X1 = $X + cos(($Angle-135) * PI / 180) * 10;
- $Y1 = $Y + sin(($Angle-135) * PI / 180) * 10;
-
- $X2 = $X1 + cos($Angle * PI / 180) * (strlen($this->Result)+20);
- $Y2 = $Y1 + sin($Angle * PI / 180) * (strlen($this->Result)+20);
-
- if ( $ShowLegend )
- {
- $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
- $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
- }
- else
- {
- $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+20);
- $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+20);
- }
-
- $X4 = $X3 + cos(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
- $Y4 = $Y3 + sin(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
-
- $Polygon = array($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4);
- $Settings = array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"BorderR"=>$AreaBorderR,"BorderG"=>$AreaBorderG,"BorderB"=>$AreaBorderB);
- $this->pChartObject->drawPolygon($Polygon,$Settings);
- }
-
- for($i=1;$i<=strlen($this->Result);$i++)
- {
- if ( $this->mid($this->Result,$i,1) == 1 )
- {
- $X1 = $X + cos($Angle * PI / 180) * $i;
- $Y1 = $Y + sin($Angle * PI / 180) * $i;
- $X2 = $X1 + cos(($Angle+90) * PI / 180) * $Height;
- $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * $Height;
-
- $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
- $this->pChartObject->drawLine($X1,$Y1,$X2,$Y2,$Settings);
- }
- }
-
- if ( $ShowLegend )
- {
- $X1 = $X + cos($Angle * PI / 180) * (strlen($this->Result)/2);
- $Y1 = $Y + sin($Angle * PI / 180) * (strlen($this->Result)/2);
-
- $LegendX = $X1 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
- $LegendY = $Y1 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
-
- $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Angle"=>-$Angle,"Align"=>TEXT_ALIGN_TOPMIDDLE);
- $this->pChartObject->drawText($LegendX,$LegendY,$TextString,$Settings);
- }
- }
-
- 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/Under-Testing/Website/class/pBarcode39.class.php b/Under-Testing/Website/class/pBarcode39.class.php
deleted file mode 100644
index 8d57b71..0000000
--- a/Under-Testing/Website/class/pBarcode39.class.php
+++ /dev/null
@@ -1,200 +0,0 @@
-<?php
- /*
- pBarcode39 - class to create barcodes (39B)
-
- Version : 2.1.2
- Made by : Jean-Damien POGOLOTTI
- Last Update : 03/08/11
-
- 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.
- */
-
- /* pData class definition */
- class pBarcode39
- {
- var $Codes;
- var $Reverse;
- var $Result;
- var $pChartObject;
- var $CRC;
- var $MOD43;
-
- /* Class creator */
- function pBarcode39($BasePath="",$EnableMOD43=FALSE)
- {
- $this->MOD43 = $EnableMOD43;
- $this->Codes = "";
- $this->Reverse = "";
-
- $FileHandle = @fopen($BasePath."data/39.db", "r");
-
- if (!$FileHandle) { die("Cannot find barcode database (".$BasePath."data/39.db)."); }
-
- while (!feof($FileHandle))
- {
- $Buffer = fgets($FileHandle,4096);
- $Buffer = str_replace(chr(10),"",$Buffer);
- $Buffer = str_replace(chr(13),"",$Buffer);
- $Values = preg_split("/;/",$Buffer);
-
- $this->Codes[$Values[0]] = $Values[1];
- }
- fclose($FileHandle);
- }
-
- /* Return the projected size of a barcode */
- function getSize($TextString,$Format="")
- {
- $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
- $ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
- $LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
- $DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
- $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : 12;
- $Height = isset($Format["Height"]) ? $Format["Height"] : 30;
-
- $TextString = $this->encode39($TextString);
- $BarcodeLength = strlen($this->Result);
-
- if ( $DrawArea ) { $WOffset = 20; } else { $WOffset = 0; }
- if ( $ShowLegend ) { $HOffset = $FontSize+$LegendOffset+$WOffset; } else { $HOffset = 0; }
-
- $X1 = cos($Angle * PI / 180) * ($WOffset+$BarcodeLength);
- $Y1 = sin($Angle * PI / 180) * ($WOffset+$BarcodeLength);
-
- $X2 = $X1 + cos(($Angle+90) * PI / 180) * ($HOffset+$Height);
- $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * ($HOffset+$Height);
-
-
- $AreaWidth = max(abs($X1),abs($X2));
- $AreaHeight = max(abs($Y1),abs($Y2));
-
- return(array("Width"=>$AreaWidth,"Height"=>$AreaHeight));
- }
-
- /* Create the encoded string */
- function encode39($Value)
- {
- $this->Result = "100101101101"."0";
- $TextString = "";
- for($i=1;$i<=strlen($Value);$i++)
- {
- $CharCode = ord($this->mid($Value,$i,1));
- if ( $CharCode >= 97 && $CharCode <= 122 ) { $CharCode = $CharCode - 32; }
-
- if ( isset($this->Codes[chr($CharCode)]) )
- {
- $this->Result = $this->Result.$this->Codes[chr($CharCode)]."0";
- $TextString = $TextString.chr($CharCode);
- }
- }
-
- if ( $this->MOD43 )
- {
- $Checksum = $this->checksum($TextString);
- $this->Result = $this->Result.$this->Codes[$Checksum]."0";
- }
-
- $this->Result = $this->Result."100101101101";
- $TextString = "*".$TextString."*";
-
- return($TextString);
- }
-
- /* Create the encoded string */
- function draw($Object,$Value,$X,$Y,$Format="")
- {
- $this->pChartObject = $Object;
-
- $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;
- $Height = isset($Format["Height"]) ? $Format["Height"] : 30;
- $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
- $ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
- $LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
- $DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
- $AreaR = isset($Format["AreaR"]) ? $Format["AreaR"] : 255;
- $AreaG = isset($Format["AreaG"]) ? $Format["AreaG"] : 255;
- $AreaB = isset($Format["AreaB"]) ? $Format["AreaB"] : 255;
- $AreaBorderR = isset($Format["AreaBorderR"]) ? $Format["AreaBorderR"] : $AreaR;
- $AreaBorderG = isset($Format["AreaBorderG"]) ? $Format["AreaBorderG"] : $AreaG;
- $AreaBorderB = isset($Format["AreaBorderB"]) ? $Format["AreaBorderB"] : $AreaB;
-
- $TextString = $this->encode39($Value);
-
- if ( $DrawArea )
- {
- $X1 = $X + cos(($Angle-135) * PI / 180) * 10;
- $Y1 = $Y + sin(($Angle-135) * PI / 180) * 10;
-
- $X2 = $X1 + cos($Angle * PI / 180) * (strlen($this->Result)+20);
- $Y2 = $Y1 + sin($Angle * PI / 180) * (strlen($this->Result)+20);
-
- if ( $ShowLegend )
- {
- $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
- $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
- }
- else
- {
- $X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+20);
- $Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+20);
- }
-
- $X4 = $X3 + cos(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
- $Y4 = $Y3 + sin(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
-
- $Polygon = array($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4);
- $Settings = array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"BorderR"=>$AreaBorderR,"BorderG"=>$AreaBorderG,"BorderB"=>$AreaBorderB);
- $this->pChartObject->drawPolygon($Polygon,$Settings);
- }
-
- for($i=1;$i<=strlen($this->Result);$i++)
- {
- if ( $this->mid($this->Result,$i,1) == 1 )
- {
- $X1 = $X + cos($Angle * PI / 180) * $i;
- $Y1 = $Y + sin($Angle * PI / 180) * $i;
- $X2 = $X1 + cos(($Angle+90) * PI / 180) * $Height;
- $Y2 = $Y1 + sin(($Angle+90) * PI / 180) * $Height;
-
- $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
- $this->pChartObject->drawLine($X1,$Y1,$X2,$Y2,$Settings);
- }
- }
-
- if ( $ShowLegend )
- {
- $X1 = $X + cos($Angle * PI / 180) * (strlen($this->Result)/2);
- $Y1 = $Y + sin($Angle * PI / 180) * (strlen($this->Result)/2);
-
- $LegendX = $X1 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
- $LegendY = $Y1 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
-
- $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Angle"=>-$Angle,"Align"=>TEXT_ALIGN_TOPMIDDLE);
- $this->pChartObject->drawText($LegendX,$LegendY,$TextString,$Settings);
- }
- }
-
- function checksum( $string )
- {
- $checksum = 0;
- $length = strlen( $string );
- $charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%';
-
- for( $i=0; $i < $length; ++$i )
- $checksum += strpos( $charset, $string[$i] );
-
- return substr( $charset, ($checksum % 43), 1 );
- }
-
- 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/Under-Testing/Website/class/pBubble.class.php b/Under-Testing/Website/class/pBubble.class.php
deleted file mode 100644
index 483a1f3..0000000
--- a/Under-Testing/Website/class/pBubble.class.php
+++ /dev/null
@@ -1,283 +0,0 @@
-<?php
- /*
- pBubble - class to draw bubble charts
-
- Version : 2.1.2
- Made by : Jean-Damien POGOLOTTI
- Last Update : 03/08/11
-
- 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.
- */
-
- /* pBubble class definition */
- class pBubble
- {
- var $pChartObject;
- var $pDataObject;
-
- /* Class creator */
- function pBubble($pChartObject,$pDataObject)
- {
- $this->pChartObject = $pChartObject;
- $this->pDataObject = $pDataObject;
- }
-
- /* Prepare the scale */
- function bubbleScale($DataSeries,$WeightSeries)
- {
- if ( !is_array($DataSeries) ) { $DataSeries = array($DataSeries); }
- if ( !is_array($WeightSeries) ) { $WeightSeries = array($WeightSeries); }
-
- /* Parse each data series to find the new min & max boundaries to scale */
- $NewPositiveSerie = ""; $NewNegativeSerie = ""; $MaxValues = 0; $LastPositive = 0; $LastNegative = 0;
- foreach($DataSeries as $Key => $SerieName)
- {
- $SerieWeightName = $WeightSeries[$Key];
-
- $this->pDataObject->setSerieDrawable($SerieWeightName,FALSE);
-
- if ( count($this->pDataObject->Data["Series"][$SerieName]["Data"]) > $MaxValues ) { $MaxValues = count($this->pDataObject->Data["Series"][$SerieName]["Data"]); }
-
- foreach($this->pDataObject->Data["Series"][$SerieName]["Data"] as $Key => $Value)
- {
- if ( $Value >= 0 )
- {
- $BubbleBounds = $Value + $this->pDataObject->Data["Series"][$SerieWeightName]["Data"][$Key];
-
- if ( !isset($NewPositiveSerie[$Key]) )
- { $NewPositiveSerie[$Key] = $BubbleBounds; }
- elseif ( $NewPositiveSerie[$Key] < $BubbleBounds )
- { $NewPositiveSerie[$Key] = $BubbleBounds; }
-
- $LastPositive = $BubbleBounds;
- }
- else
- {
- $BubbleBounds = $Value - $this->pDataObject->Data["Series"][$SerieWeightName]["Data"][$Key];
-
- if ( !isset($NewNegativeSerie[$Key]) )
- { $NewNegativeSerie[$Key] = $BubbleBounds; }
- elseif ( $NewNegativeSerie[$Key] > $BubbleBounds )
- { $NewNegativeSerie[$Key] = $BubbleBounds; }
-
- $LastNegative = $BubbleBounds;
- }
- }
- }
-
- /* Check for missing values and all the fake positive serie */
- if ( $NewPositiveSerie != "" )
- {
- for ($i=0; $i<$MaxValues; $i++) { if (!isset($NewPositiveSerie[$i])) { $NewPositiveSerie[$i] = $LastPositive; } }
-
- $this->pDataObject->addPoints($NewPositiveSerie,"BubbleFakePositiveSerie");
- }
-
- /* Check for missing values and all the fake negative serie */
- if ( $NewNegativeSerie != "" )
- {
- for ($i=0; $i<$MaxValues; $i++) { if (!isset($NewNegativeSerie[$i])) { $NewNegativeSerie[$i] = $LastNegative; } }
-
- $this->pDataObject->addPoints($NewNegativeSerie,"BubbleFakeNegativeSerie");
- }
- }
-
- function resetSeriesColors()
- {
- $Data = $this->pDataObject->getData();
- $Palette = $this->pDataObject->getPalette();
-
- $ID = 0;
- foreach($Data["Series"] as $SerieName => $SeriesParameters)
- {
- if ( $SeriesParameters["isDrawable"] )
- {
- $this->pDataObject->Data["Series"][$SerieName]["Color"]["R"] = $Palette[$ID]["R"];
- $this->pDataObject->Data["Series"][$SerieName]["Color"]["G"] = $Palette[$ID]["G"];
- $this->pDataObject->Data["Series"][$SerieName]["Color"]["B"] = $Palette[$ID]["B"];
- $this->pDataObject->Data["Series"][$SerieName]["Color"]["Alpha"] = $Palette[$ID]["Alpha"];
- $ID++;
- }
- }
- }
-
- /* Prepare the scale */
- function drawBubbleChart($DataSeries,$WeightSeries,$Format="")
- {
- $ForceAlpha = isset($Format["ForceAlpha"]) ? $Format["ForceAlpha"] : VOID;
- $DrawBorder = isset($Format["DrawBorder"]) ? $Format["DrawBorder"] : TRUE;
- $DrawSquare = isset($Format["DrawSquare"]) ? $Format["DrawSquare"] : FALSE;
- $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
- $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"] : 30;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
-
- if ( !is_array($DataSeries) ) { $DataSeries = array($DataSeries); }
- if ( !is_array($WeightSeries) ) { $WeightSeries = array($WeightSeries); }
-
- $Data = $this->pDataObject->getData();
- $Palette = $this->pDataObject->getPalette();
-
- if ( isset($Data["Series"]["BubbleFakePositiveSerie"] ) ) { $this->pDataObject->setSerieDrawable("BubbleFakePositiveSerie",FALSE); }
- if ( isset($Data["Series"]["BubbleFakeNegativeSerie"] ) ) { $this->pDataObject->setSerieDrawable("BubbleFakeNegativeSerie",FALSE); }
-
- $this->resetSeriesColors();
-
- list($XMargin,$XDivs) = $this->pChartObject->scaleGetXSettings();
-
- foreach($DataSeries as $Key => $SerieName)
- {
- $AxisID = $Data["Series"][$SerieName]["Axis"];
- $Mode = $Data["Axis"][$AxisID]["Display"];
- $Format = $Data["Axis"][$AxisID]["Format"];
- $Unit = $Data["Axis"][$AxisID]["Unit"];
-
- if (isset($Data["Series"][$SerieName]["Description"])) { $SerieDescription = $Data["Series"][$SerieName]["Description"]; } else { $SerieDescription = $SerieName; }
-
- $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs;
-
- $X = $this->pChartObject->GraphAreaX1 + $XMargin;
- $Y = $this->pChartObject->GraphAreaY1 + $XMargin;
-
- $Color = array("R"=>$Palette[$Key]["R"],"G"=>$Palette[$Key]["G"],"B"=>$Palette[$Key]["B"],"Alpha"=>$Palette[$Key]["Alpha"]);
-
- if ( $ForceAlpha != VOID ) { $Color["Alpha"]=$ForceAlpha; }
-
- if ( $DrawBorder )
- {
- $Color["BorderAlpha"] = $BorderAlpha;
-
- if ( $Surrounding != NULL )
- { $Color["BorderR"] = $Palette[$Key]["R"]+$Surrounding; $Color["BorderG"] = $Palette[$Key]["G"]+$Surrounding; $Color["BorderB"] = $Palette[$Key]["B"]+$Surrounding; }
- else
- { $Color["BorderR"] = $BorderR; $Color["BorderG"] = $BorderG; $Color["BorderB"] = $BorderB; }
-
- if ( $ForceAlpha != VOID ) { $Color["BorderAlpha"] = $ForceAlpha/2; }
- }
-
- foreach($Data["Series"][$SerieName]["Data"] as $iKey => $Point)
- {
- $Weight = $Point + $Data["Series"][$WeightSeries[$Key]]["Data"][$iKey];
-
- $PosArray = $this->pChartObject->scaleComputeY($Point,array("AxisID"=>$AxisID));
- $WeightArray = $this->pChartObject->scaleComputeY($Weight,array("AxisID"=>$AxisID));
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs; }
- $Y = floor($PosArray); $CircleRadius = floor(abs($PosArray - $WeightArray)/2);
-
- if ( $DrawSquare )
- {
- if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($X-$CircleRadius).",".floor($Y-$CircleRadius).",".floor($X+$CircleRadius).",".floor($Y+$CircleRadius),$this->pChartObject->toHTMLColor($Palette[$Key]["R"],$Palette[$Key]["G"],$Palette[$Key]["B"]),$SerieDescription,$Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]); }
- $this->pChartObject->drawFilledRectangle($X-$CircleRadius,$Y-$CircleRadius,$X+$CircleRadius,$Y+$CircleRadius,$Color);
- }
- else
- {
- if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".floor($CircleRadius),$this->pChartObject->toHTMLColor($Palette[$Key]["R"],$Palette[$Key]["G"],$Palette[$Key]["B"]),$SerieDescription,$Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]); }
- $this->pChartObject->drawFilledCircle($X,$Y,$CircleRadius,$Color);
- }
-
- $X = $X + $XStep;
- }
- elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
- {
- if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1-$XMargin*2)/$XDivs; }
- $X = floor($PosArray); $CircleRadius = floor(abs($PosArray - $WeightArray)/2);
-
- if ( $DrawSquare )
- {
- if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($X-$CircleRadius).",".floor($Y-$CircleRadius).",".floor($X+$CircleRadius).",".floor($Y+$CircleRadius),$this->pChartObject->toHTMLColor($Palette[$Key]["R"],$Palette[$Key]["G"],$Palette[$Key]["B"]),$SerieDescription,$Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]); }
- $this->pChartObject->drawFilledRectangle($X-$CircleRadius,$Y-$CircleRadius,$X+$CircleRadius,$Y+$CircleRadius,$Color);
- }
- else
- {
- if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".floor($CircleRadius),$this->pChartObject->toHTMLColor($Palette[$Key]["R"],$Palette[$Key]["G"],$Palette[$Key]["B"]),$SerieDescription,$Data["Series"][$WeightSeries[$Key]]["Data"][$iKey]); }
- $this->pChartObject->drawFilledCircle($X,$Y,$CircleRadius,$Color);
- }
-
- $Y = $Y + $XStep;
- }
- }
- }
- }
-
- function writeBubbleLabel($SerieName,$SerieWeightName,$Points,$Format="")
- {
- $OverrideTitle = isset($Format["OverrideTitle"]) ? $Format["OverrideTitle"] : NULL;
- $DrawPoint = isset($Format["DrawPoint"]) ? $Format["DrawPoint"] : LABEL_POINT_BOX;
-
- if ( !is_array($Points) ) { $Point = $Points; $Points = ""; $Points[] = $Point; }
-
- $Data = $this->pDataObject->getData();
- $Palette = $this->pDataObject->getPalette();
-
- if ( !isset($Data["Series"][$SerieName]) || !isset($Data["Series"][$SerieWeightName]) )
- return(0);
-
- list($XMargin,$XDivs) = $this->pChartObject->scaleGetXSettings();
-
- $AxisID = $Data["Series"][$SerieName]["Axis"];
- $AxisMode = $Data["Axis"][$AxisID]["Display"];
- $AxisFormat = $Data["Axis"][$AxisID]["Format"];
- $AxisUnit = $Data["Axis"][$AxisID]["Unit"];
- $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs;
-
- $X = $this->pChartObject->GraphAreaX1 + $XMargin;
- $Y = $this->pChartObject->GraphAreaY1 + $XMargin;
-
- $Color = array("R"=>$Data["Series"][$SerieName]["Color"]["R"],"G"=>$Data["Series"][$SerieName]["Color"]["G"],"B"=>$Data["Series"][$SerieName]["Color"]["B"],"Alpha"=>$Data["Series"][$SerieName]["Color"]["Alpha"]);
-
- foreach($Points as $Key => $Point)
- {
- $Value = $Data["Series"][$SerieName]["Data"][$Point];
- $PosArray = $this->pChartObject->scaleComputeY($Value,array("AxisID"=>$AxisID));
-
- if ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Point]) )
- $Abscissa = $Data["Series"][$Data["Abscissa"]]["Data"][$Point]." : ";
- else
- $Abscissa = "";
-
- $Value = $this->pChartObject->scaleFormat($Value,$AxisMode,$AxisFormat,$AxisUnit);
- $Weight = $Data["Series"][$SerieWeightName]["Data"][$Point];
- $Caption = $Abscissa.$Value." / ".$Weight;
-
- if ( isset($Data["Series"][$SerieName]["Description"]) )
- $Description = $Data["Series"][$SerieName]["Description"];
- else
- $Description = "No description";
-
- $Series = "";
- $Series[] = array("Format"=>$Color,"Caption"=>$Caption);
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs; }
-
- $X = floor($X + $Point * $XStep);
- $Y = floor($PosArray);
- }
- else
- {
- if ( $XDivs == 0 ) { $YStep = 0; } else { $YStep = ($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1-$XMargin*2)/$XDivs; }
-
- $X = floor($PosArray);
- $Y = floor($Y + $Point * $YStep);
- }
-
- if ( $DrawPoint == LABEL_POINT_CIRCLE )
- $this->pChartObject->drawFilledCircle($X,$Y,3,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
- elseif ( $DrawPoint == LABEL_POINT_BOX )
- $this->pChartObject->drawFilledRectangle($X-2,$Y-2,$X+2,$Y+2,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
-
- $this->pChartObject->drawLabelBox($X,$Y-3,$Description,$Series,$Format);
- }
- }
- }
-?> \ No newline at end of file
diff --git a/Under-Testing/Website/class/pCache.class.php b/Under-Testing/Website/class/pCache.class.php
deleted file mode 100644
index 07d1d4e..0000000
--- a/Under-Testing/Website/class/pCache.class.php
+++ /dev/null
@@ -1,280 +0,0 @@
-<?php
- /*
- pCache - speed up the rendering by caching up the pictures
-
- Version : 2.1.2
- Made by : Jean-Damien POGOLOTTI
- Last Update : 03/08/11
-
- 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.
- */
-
- /* pData class definition */
- class pCache
- {
- var $CacheFolder;
- var $CacheIndex;
- var $CacheDB;
-
- /* Class creator */
- function pCache($Settings="")
- {
- $CacheFolder = isset($Settings["CacheFolder"]) ? $Settings["CacheFolder"] : "cache";
- $CacheIndex = isset($Settings["CacheIndex"]) ? $Settings["CacheIndex"] : "index.db";
- $CacheDB = isset($Settings["CacheDB"]) ? $Settings["CacheDB"] : "cache.db";
-
- $this->CacheFolder = $CacheFolder;
- $this->CacheIndex = $CacheIndex;
- $this->CacheDB = $CacheDB;
-
- if (!file_exists($this->CacheFolder."/".$this->CacheIndex)) { touch($this->CacheFolder."/".$this->CacheIndex); }
- if (!file_exists($this->CacheFolder."/".$this->CacheDB)) { touch($this->CacheFolder."/".$this->CacheDB); }
- }
-
- /* Flush the cache contents */
- function flush()
- {
- if (file_exists($this->CacheFolder."/".$this->CacheIndex)) { unlink($this->CacheFolder."/".$this->CacheIndex); touch($this->CacheFolder."/".$this->CacheIndex); }
- if (file_exists($this->CacheFolder."/".$this->CacheDB)) { unlink($this->CacheFolder."/".$this->CacheDB); touch($this->CacheFolder."/".$this->CacheDB); }
- }
-
- /* Return the MD5 of the data array to clearly identify the chart */
- function getHash($Data,$Marker="")
- { return(md5($Marker.serialize($Data->Data))); }
-
- /* Write the generated picture to the cache */
- function writeToCache($ID,$pChartObject)
- {
- /* Compute the paths */
- $TemporaryFile = $this->CacheFolder."/tmp_".rand(0,1000).".png";
- $Database = $this->CacheFolder."/".$this->CacheDB;
- $Index = $this->CacheFolder."/".$this->CacheIndex;
-
- /* Flush the picture to a temporary file */
- imagepng($pChartObject->Picture ,$TemporaryFile);
-
- /* Retrieve the files size */
- $PictureSize = filesize($TemporaryFile);
- $DBSize = filesize($Database);
-
- /* Save the index */
- $Handle = fopen($Index,"a");
- fwrite($Handle, $ID.",".$DBSize.",".$PictureSize.",".time().",0 \r\n");
- fclose($Handle);
-
- /* Get the picture raw contents */
- $Handle = fopen($TemporaryFile,"r");
- $Raw = fread($Handle,$PictureSize);
- fclose($Handle);
-
- /* Save the picture in the solid database file */
- $Handle = fopen($Database,"a");
- fwrite($Handle, $Raw);
- fclose($Handle);
-
- /* Remove temporary file */
- unlink($TemporaryFile);
- }
-
- /* Remove object older than the specified TS */
- function removeOlderThan($Expiry)
- { $this->dbRemoval(array("Expiry"=>$Expiry)); }
-
- /* Remove an object from the cache */
- function remove($ID)
- { $this->dbRemoval(array("Name"=>$ID)); }
-
- /* Remove with specified criterias */
- function dbRemoval($Settings)
- {
- $ID = isset($Settings["Name"]) ? $Settings["Name"] : NULL;
- $Expiry = isset($Settings["Expiry"]) ? $Settings["Expiry"] : -(24*60*60);
- $TS = time()-$Expiry;
-
- /* Compute the paths */
- $Database = $this->CacheFolder."/".$this->CacheDB;
- $Index = $this->CacheFolder."/".$this->CacheIndex;
- $DatabaseTemp = $this->CacheFolder."/".$this->CacheDB.".tmp";
- $IndexTemp = $this->CacheFolder."/".$this->CacheIndex.".tmp";
-
- /* Single file removal */
- if ( $ID != NULL )
- {
- /* Retrieve object informations */
- $Object = $this->isInCache($ID,TRUE);
-
- /* If it's not in the cache DB, go away */
- if ( !$Object ) { return(0); }
- }
-
- /* Create the temporary files */
- if (!file_exists($DatabaseTemp)) { touch($DatabaseTemp); }
- if (!file_exists($IndexTemp)) { touch($IndexTemp); }
-
- /* Open the file handles */
- $IndexHandle = @fopen($Index, "r");
- $IndexTempHandle = @fopen($IndexTemp, "w");
- $DBHandle = @fopen($Database, "r");
- $DBTempHandle = @fopen($DatabaseTemp, "w");
-
- /* Remove the selected ID from the database */
- while (!feof($IndexHandle))
- {
- $Entry = fgets($IndexHandle, 4096);
- $Entry = str_replace("\r","",$Entry);
- $Entry = str_replace("\n","",$Entry);
- $Settings = preg_split("/,/",$Entry);
-
- if ( $Entry != "" )
- {
- $PicID = $Settings[0];
- $DBPos = $Settings[1];
- $PicSize = $Settings[2];
- $GeneratedTS = $Settings[3];
- $Hits = $Settings[4];
-
- if ( $Settings[0] != $ID && $GeneratedTS > $TS)
- {
- $CurrentPos = ftell($DBTempHandle);
- fwrite($IndexTempHandle, $PicID.",".$CurrentPos.",".$PicSize.",".$GeneratedTS.",".$Hits."\r\n");
-
- fseek($DBHandle,$DBPos);
- $Picture = fread($DBHandle,$PicSize);
- fwrite($DBTempHandle,$Picture);
- }
- }
- }
-
- /* Close the handles */
- fclose($IndexHandle);
- fclose($IndexTempHandle);
- fclose($DBHandle);
- fclose($DBTempHandle);
-
- /* Remove the prod files */
- unlink($Database);
- unlink($Index);
-
- /* Swap the temp & prod DB */
- rename($DatabaseTemp,$Database);
- rename($IndexTemp,$Index);
- }
-
- function isInCache($ID,$Verbose=FALSE,$UpdateHitsCount=FALSE)
- {
- /* Compute the paths */
- $Index = $this->CacheFolder."/".$this->CacheIndex;
-
- /* Search the picture in the index file */
- $Handle = @fopen($Index, "r");
- while (!feof($Handle))
- {
- $IndexPos = ftell($Handle);
- $Entry = fgets($Handle, 4096);
- if ( $Entry != "" )
- {
- $Settings = preg_split("/,/",$Entry);
- $PicID = $Settings[0];
- if ( $PicID == $ID )
- {
- fclose($Handle);
-
- $DBPos = $Settings[1];
- $PicSize = $Settings[2];
- $GeneratedTS = $Settings[3];
- $Hits = intval($Settings[4]);
-
- if ( $UpdateHitsCount )
- {
- $Hits++;
- if ( strlen($Hits) < 7 ) { $Hits = $Hits.str_repeat(" ",7-strlen($Hits)); }
-
- $Handle = @fopen($Index, "r+");
- fseek($Handle,$IndexPos);
- fwrite($Handle, $PicID.",".$DBPos.",".$PicSize.",".$GeneratedTS.",".$Hits."\r\n");
- fclose($Handle);
- }
-
- if ($Verbose)
- { return(array("DBPos"=>$DBPos,"PicSize"=>$PicSize,"GeneratedTS"=>$GeneratedTS,"Hits"=>$Hits)); }
- else
- { return(TRUE); }
- }
- }
- }
- fclose($Handle);
-
- /* Picture isn't in the cache */
- return(FALSE);
- }
-
- /* Automatic output method based on the calling interface */
- function autoOutput($ID,$Destination="output.png")
- {
- if (php_sapi_name() == "cli")
- $this->saveFromCache($ID,$Destination);
- else
- $this->strokeFromCache($ID);
- }
-
- function strokeFromCache($ID)
- {
- /* Get the raw picture from the cache */
- $Picture = $this->getFromCache($ID);
-
- /* Do we have a hit? */
- if ( $Picture == NULL ) { return(FALSE); }
-
- header('Content-type: image/png');
- echo $Picture;
-
- return(TRUE);
- }
-
- function saveFromCache($ID,$Destination)
- {
- /* Get the raw picture from the cache */
- $Picture = $this->getFromCache($ID);
-
- /* Do we have a hit? */
- if ( $Picture == NULL ) { return(FALSE); }
-
- /* Flush the picture to a file */
- $Handle = fopen($Destination,"w");
- fwrite($Handle,$Picture);
- fclose($Handle);
-
- /* All went fine */
- return(TRUE);
- }
-
- function getFromCache($ID)
- {
- /* Compute the path */
- $Database = $this->CacheFolder."/".$this->CacheDB;
-
- /* Lookup for the picture in the cache */
- $CacheInfo = $this->isInCache($ID,TRUE,TRUE);
-
- /* Not in the cache */
- if (!$CacheInfo) { return(NULL); }
-
- /* Get the database extended information */
- $DBPos = $CacheInfo["DBPos"];
- $PicSize = $CacheInfo["PicSize"];
-
- /* Extract the picture from the solid cache file */
- $Handle = @fopen($Database, "r");
- fseek($Handle,$DBPos);
- $Picture = fread($Handle,$PicSize);
- fclose($Handle);
-
- /* Return back the raw picture data */
- return($Picture);
- }
- }
-?> \ No newline at end of file
diff --git a/Under-Testing/Website/class/pData.class.php b/Under-Testing/Website/class/pData.class.php
deleted file mode 100644
index 9cfbc3f..0000000
--- a/Under-Testing/Website/class/pData.class.php
+++ /dev/null
@@ -1,723 +0,0 @@
-<?php
- /*
- pDraw - class to manipulate data arrays
-
- Version : 2.1.2
- Made by : Jean-Damien POGOLOTTI
- Last Update : 03/08/11
-
- 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);
-
- /* 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);
-
- /* 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 pData()
- {
- $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["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 )
- {
- $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"]));
- }
- }
-
- /* Strip VOID values */
- function stripVOID($Values)
- { $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; } }
-
- /* 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);
- }
- }
-
- /* 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."); }
- }
-?> \ No newline at end of file
diff --git a/Under-Testing/Website/class/pDraw.class.php b/Under-Testing/Website/class/pDraw.class.php
deleted file mode 100644
index 85e408e..0000000
--- a/Under-Testing/Website/class/pDraw.class.php
+++ /dev/null
@@ -1,5799 +0,0 @@
-<?php
- /*
- pDraw - class extension with drawing methods
-
- Version : 2.1.2
- Made by : Jean-Damien POGOLOTTI
- Last Update : 03/08/11
-
- 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("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("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 ( $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 ( $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,$Text);
- }
-
- $C_TextColor = $this->AllocateColor($this->Picture,$R,$G,$B,$Alpha);
- imagettftext($this->Picture,$FontSize,$Angle,$X,$Y,$C_TextColor,$FontName,$Text);
-
- $this->Shadow = $Shadow;
-
- return($TxtPos);
- }
-
- /* 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,$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));
-
- $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));
- $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;
- $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;
- $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; }
- }
-
- $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 ( $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) )
- {
- $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 ( $Skipped )
- {
- if ( $DrawXLines ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$SkippedAxisColor); }
- if ( $SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0 ) { $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 ) { $this->drawLine($XPos,$YPos-$InnerTickWidth,$XPos,$YPos+$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
- }
-
- }
- 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;
- }
- 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 ( $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) )
- {
- $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 ( $Skipped )
- {
- if ( $DrawXLines ) { $this->drawLine($XPos,$this->GraphAreaY1+$FloatingOffset,$XPos,$this->GraphAreaY2-$FloatingOffset,$SkippedAxisColor); }
- if ( $SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0 ) { $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 ) { $this->drawLine($XPos,$YPos+$InnerTickWidth,$XPos,$YPos-$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
- }
-
- }
- 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 ( $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 ( $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) )
- {
- $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 ( $Skipped )
- {
- if ( $DrawXLines ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,$SkippedAxisColor); }
- if ( $SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0 ) { $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 ) { $this->drawLine($XPos-$OuterTickWidth,$YPos,$XPos+$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
- }
-
- }
- 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[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 ( $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) )
- {
- $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 ( $Skipped )
- {
- if ( $DrawXLines ) { $this->drawLine($this->GraphAreaX1+$FloatingOffset,$YPos,$this->GraphAreaX2-$FloatingOffset,$YPos,$SkippedAxisColor); }
- if ( $SkippedInnerTickWidth !=0 || $SkippedOuterTickWidth != 0 ) { $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 ) { $this->drawLine($XPos+$OuterTickWidth,$YPos,$XPos-$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha)); }
- }
-
- }
- if ( isset($Parameters["Name"]) )
- {
- $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 a 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"] : 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;
-
- $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 ) { $Caption = $Value; }
-
- $Data = $this->DataSet->getData();
- if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); }
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- $YPos = $this->scaleComputeY($Value,array("AxisID"=>$AxisID));
- if ( $YPos >= $this->GraphAreaY1 && $YPos <= $this->GraphAreaY2 )
- {
- $this->drawLine($this->GraphAreaX1,$YPos,$this->GraphAreaX2,$YPos,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
-
- if ( $Wide )
- {
- $this->drawLine($this->GraphAreaX1,$YPos-1,$this->GraphAreaX2,$YPos-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
- $this->drawLine($this->GraphAreaX1,$YPos+1,$this->GraphAreaX2,$YPos+1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
- }
-
- if ( $WriteCaption )
- {
- if ( $CaptionAlign == CAPTION_LEFT_TOP )
- { $X = $this->GraphAreaX1 + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_MIDDLELEFT; }
- else
- { $X = $this->GraphAreaX2 - $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 && $XPos <= $this->GraphAreaX2 )
- {
- $this->drawLine($XPos,$this->GraphAreaY1,$XPos,$this->GraphAreaY2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks,"Weight"=>$Weight));
-
- if ( $Wide )
- {
- $this->drawLine($XPos-1,$this->GraphAreaY1,$XPos-1,$this->GraphAreaY2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
- $this->drawLine($XPos+1,$this->GraphAreaY1,$XPos+1,$this->GraphAreaY2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha/$WideFactor,"Ticks"=>$Ticks));
- }
-
- if ( $WriteCaption )
- {
- if ( $CaptionAlign == CAPTION_LEFT_TOP )
- { $Y = $this->GraphAreaY1 + $CaptionOffset; $CaptionSettings["Align"] = TEXT_ALIGN_TOPMIDDLE; }
- else
- { $Y = $this->GraphAreaY2 - $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;
-
- if ($BorderAlpha >100) { $BorderAlpha = 100;}
-
- $Data = $this->DataSet->getData();
- if ( !isset($Data["Axis"][$AxisID]) ) { return(-1); }
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- $YPos1 = $this->scaleComputeY($Value1,array("AxisID"=>$AxisID));
- $YPos2 = $this->scaleComputeY($Value2,array("AxisID"=>$AxisID));
-
- if ( $YPos1 > $this->GraphAreaY2 ) { $YPos1 = $this->GraphAreaY2; } if ( $YPos1 < $this->GraphAreaY1 ) { $YPos1 = $this->GraphAreaY1; }
- if ( $YPos2 > $this->GraphAreaY2 ) { $YPos2 = $this->GraphAreaY2; } if ( $YPos2 < $this->GraphAreaY1 ) { $YPos2 = $this->GraphAreaY1; }
-
- $this->drawFilledRectangle($this->GraphAreaX1+1,$YPos1,$this->GraphAreaX2-1,$YPos2,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
- if ( $Border )
- {
- $this->drawLine($this->GraphAreaX1+1,$YPos1,$this->GraphAreaX2-1,$YPos1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
- $this->drawLine($this->GraphAreaX1+1,$YPos2,$this->GraphAreaX2-1,$YPos2,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
- }
- return(array("Y1"=>$YPos1,"Y2"=>$YPos2));
- }
-
- if ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
- {
- $XPos1 = $this->scaleComputeY($Value1,array("AxisID"=>$AxisID));
- $XPos2 = $this->scaleComputeY($Value2,array("AxisID"=>$AxisID));
-
- if ( $XPos1 > $this->GraphAreaX2 ) { $XPos1 = $this->GraphAreaX2; } if ( $XPos1 < $this->GraphAreaX1 ) { $XPos1 = $this->GraphAreaX1; }
- if ( $XPos2 > $this->GraphAreaX2 ) { $XPos2 = $this->GraphAreaX2; } if ( $XPos2 < $this->GraphAreaX1 ) { $XPos2 = $this->GraphAreaX1; }
-
- $this->drawFilledRectangle($XPos1,$this->GraphAreaY1+1,$XPos2,$this->GraphAreaY2-1,array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha));
- if ( $Border )
- {
- $this->drawLine($XPos1,$this->GraphAreaY1+1,$XPos1,$this->GraphAreaY2-1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
- $this->drawLine($XPos2,$this->GraphAreaY1+1,$XPos2,$this->GraphAreaY2-1,array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha,"Ticks"=>$BorderTicks));
- }
- 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_DATE )
- { if ( $Format == NULL ) { $Pattern = "d/m/Y"; } else { $Pattern = $Format; } return(date($Pattern,$Value)); }
-
- if ( $Mode == AXIS_FORMAT_TIME )
- { if ( $Format == NULL ) { $Pattern = "H:i:s"; } else { $Pattern = $Format; } return(date($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"] : 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"] : 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"] : 3;
- $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;
-
- $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 ( $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; $PlotSize = 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-$PlotSize-$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).",".$PlotSize,$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,$PlotSize,$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; $PlotSize = 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+$PlotSize+$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).",".$PlotSize,$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,$PlotSize,$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;
-
- $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;
-
- $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;
-
- $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,"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;
-
- $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;
-
- $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;
-
- $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;
-
- $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; }
-
- $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;
-
- $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;
- $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;
-
- $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);
- 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);
- 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;
- $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;
-
- $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-.5,$Y1-.5-$YSpaceUp+$YSpaceDown,$X+$XOffset+$XSize,$Y2+.5,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);
-
- $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"]);
-
- if ( $BarHeight > $TxtHeight )
- {
- $XCenter = ( ($X+$XOffset+$XSize) - ($X+$XOffset) ) / 2 + $X+$XOffset;
- $YCenter = ( ($Y2) - ($Y1-$YSpaceUp+$YSpaceDown) ) / 2 + $Y1-$YSpaceUp+$YSpaceDown;
-
- $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));
- }
- }
-
- $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);
-
- $Caption = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit);
- $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
- $TxtWidth = abs($TxtPos[1]["X"] - $TxtPos[0]["X"]);
-
- if ( $BarWidth > $TxtWidth )
- {
- $XCenter = ( $X2 - $X1 ) / 2 + $X1;
- $YCenter = ( ($Y+$YOffset+$YSize) - ($Y+$YOffset) ) / 2 + $Y+$YOffset;
-
- $this->drawText($XCenter,$YCenter,$Caption,array("R"=>$DisplayR,"G"=>$DisplayG,"B"=>$DisplayB,"Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontSize"=>$DisplaySize,"FontName"=>$DisplayFont));
- }
- }
-
- $LastX[$Key][$Pos] = $X2;
- }
-
- $Y = $Y + $YStep;
- }
- }
- }
- }
- }
-
- /* Draw a bar chart */
- function drawStackedAreaChart($Format=NULL)
- {
- $DisplayValues = isset($Format["DisplayValues"]) ? $Format["DisplayValues"] : FALSE;
- $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;
- $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;
- $ForceTransparency = isset($Format["ForceTransparency"]) ? $Format["ForceTransparency"] : NULL;
-
- $Data = $this->DataSet->getData();
- list($XMargin,$XDivs) = $this->scaleGetXSettings();
-
- $RestoreShadow = $this->Shadow;
-
- /* Determine if we only have positive or negatives values */
- $Sign["+"] = 0; $Sign["-"] = 0;
- foreach($Data["Series"] as $SerieName => $Serie)
- {
- if ( $Serie["isDrawable"] == TRUE && $SerieName != $Data["Abscissa"] )
- { foreach($Serie["Data"] as $Key => $Value) { if ($Value > 0) { $Sign["+"]++; } elseif ($Value < 0) { $Sign["-"]++; } } }
- }
- if ( $Sign["+"] == 0 || $Sign["-"] == 0 ) { $SingleWay = TRUE; } else { $SingleWay = FALSE; }
-
- $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 ( $ForceTransparency != NULL ) { $Alpha = $ForceTransparency; }
- if ( $DisplayColor == DISPLAY_AUTO ) { $DisplayR = 255; $DisplayG = 255; $DisplayB = 255; }
- if ( $Surrounding != NULL )
- { $BorderR = $R+$Surrounding; $BorderG = $G+$Surrounding; $BorderB = $B+$Surrounding; }
- else
- { $BorderR = $R; $BorderG = $G; $BorderB = $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"]),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->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
- if ( $YZero > $this->GraphAreaY2-1 ) { $YZero = $this->GraphAreaY2-1; }
-
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB,"SkipY"=>$YZero);
-
- if ( $SingleWay ) { unset($Color["SkipY"]); }
-
- 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; }
-
- $PointsTop = ""; $PointsBottom = ""; $Labels = ""; $Pos = "+";
- foreach($PosArray as $Key => $Height)
- {
- if ( !isset($LastY[$Key] ) ) { $LastY[$Key] = ""; }
- if ( !isset($LastY[$Key][$Pos] ) ) { $LastY[$Key][$Pos] = $YZero; }
-
- if ( $Height != VOID && $Serie["Data"][$Key] >= 0)
- {
- $Y1 = $LastY[$Key][$Pos];
- $Y2 = $Y1 - $Height;
-
- $PointsTop[] = $X; $PointsTop[] = $Y2;
- $PointsBottom[] = $X; $PointsBottom[] = $Y1;
-
- if ( $DisplayValues )
- {
- $BarHeight = abs($Y2-$Y1);
-
- $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"]);
-
- if ( $BarHeight > $TxtHeight )
- {
- $XCenter = $X;
- $YCenter = $Y1- $BarHeight / 2;
-
- $Labels[] = array($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));
- }
- }
-
- $LastY[$Key][$Pos] = $Y2;
- }
- else
- { $PointsTop[] = $X; $PointsTop[] = $LastY[$Key][$Pos]; $PointsBottom[] = $X; $PointsBottom[] = $LastY[$Key][$Pos]; }
-
- $X = $X + $XStep;
- }
- $Points = $PointsTop;
- for($i=count($PointsBottom)-2;$i>=0;$i-=2) { $Points[] = $PointsBottom[$i]; $Points[] = $PointsBottom[$i+1]; }
- $this->drawPolygon($Points,$Color);
-
- /* Reset the X axis parser for the negative values pass */
- $X = $this->GraphAreaX1 + $XMargin;
-
- $PointsTop = ""; $PointsBottom = ""; $Pos = "-";
- foreach($PosArray as $Key => $Height)
- {
- if ( !isset($LastY[$Key] ) ) { $LastY[$Key] = ""; }
- if ( !isset($LastY[$Key][$Pos] ) ) { $LastY[$Key][$Pos] = $YZero; }
-
- if ( $Height != VOID && $Serie["Data"][$Key] < 0)
- {
- $Y1 = $LastY[$Key][$Pos];
- $Y2 = $Y1 - $Height;
-
- $PointsTop[] = $X; $PointsTop[] = $Y2;
- $PointsBottom[] = $X; $PointsBottom[] = $Y1;
-
- if ( $DisplayValues )
- {
- $BarHeight = abs($Y2-$Y1);
-
- $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"]);
-
- if ( $BarHeight > $TxtHeight )
- {
- $XCenter = $X;
- $YCenter = $BarHeight / 2 + $Y1;
-
- $Labels[] = array($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));
- }
- }
-
- $LastY[$Key][$Pos] = $Y2;
- }
- else
- { $PointsTop[] = $X; $PointsTop[] = $LastY[$Key][$Pos]; $PointsBottom[] = $X; $PointsBottom[] = $LastY[$Key][$Pos]; }
-
- $X = $X + $XStep;
- }
- $Points = $PointsTop;
- for($i=count($PointsBottom)-2;$i>=0;$i-=2) { $Points[] = $PointsBottom[$i]; $Points[] = $PointsBottom[$i+1]; }
- $this->drawPolygon($Points,$Color);
-
- if ( $DisplayValues ) { foreach($Labels as $Key => $Value) { $this->drawText($Value[0],$Value[1],$Value[2],$Value[3]);} }
- }
- else
- {
- if ( $YZero < $this->GraphAreaX1+1 ) { $YZero = $this->GraphAreaX1+1; }
- if ( $YZero > $this->GraphAreaX2-1 ) { $YZero = $this->GraphAreaX2-1; }
-
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"BorderR"=>$BorderR,"BorderG"=>$BorderG,"BorderB"=>$BorderB,"SkipX"=>$YZero);
-
- if ( $SingleWay ) { unset($Color["SkipX"]); }
-
- 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; }
-
- $PointsTop = ""; $PointsBottom = ""; $Labels = ""; $Pos = "+";
- foreach($PosArray as $Key => $Width)
- {
- if ( !isset($LastX[$Key] ) ) { $LastX[$Key] = ""; }
- if ( !isset($LastX[$Key][$Pos] ) ) { $LastX[$Key][$Pos] = $YZero; }
-
- if ( $Width != VOID && $Serie["Data"][$Key] >= 0)
- {
- $X1 = $LastX[$Key][$Pos];
- $X2 = $X1 + $Width;
-
- $PointsTop[] = $X1; $PointsTop[] = $Y;
- $PointsBottom[] = $X2; $PointsBottom[] = $Y;
-
- if ( $DisplayValues )
- {
- $BarWidth = abs($X2-$X1);
-
- $Caption = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit);
- $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
- $TxtWidth = abs($TxtPos[1]["X"] - $TxtPos[0]["X"]);
-
- if ( $BarWidth > $TxtWidth )
- {
- $XCenter = $X1 + $BarWidth / 2;
- $YCenter = $Y;
-
- $Labels[] = array($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));
- }
- }
-
- $LastX[$Key][$Pos] = $X2;
- }
- else
- { $PointsTop[] = $LastX[$Key][$Pos]; $PointsTop[] = $Y; $PointsBottom[] = $LastX[$Key][$Pos]; $PointsBottom[] = $Y; }
-
- $Y = $Y + $YStep;
- }
- $Points = $PointsTop;
- for($i=count($PointsBottom)-2;$i>=0;$i-=2) { $Points[] = $PointsBottom[$i]; $Points[] = $PointsBottom[$i+1]; }
- $this->drawPolygon($Points,$Color);
-
-
- /* Reset the X axis parser for the negative values pass */
- $Y = $this->GraphAreaY1 + $XMargin;
-
-
- $PointsTop = ""; $PointsBottom = ""; $Pos = "-";
- foreach($PosArray as $Key => $Width)
- {
- if ( !isset($LastX[$Key] ) ) { $LastX[$Key] = ""; }
- if ( !isset($LastX[$Key][$Pos] ) ) { $LastX[$Key][$Pos] = $YZero; }
-
- if ( $Width != VOID && $Serie["Data"][$Key] < 0)
- {
- $X1 = $LastX[$Key][$Pos];
- $X2 = $X1 + $Width;
-
- $PointsTop[] = $X1; $PointsTop[] = $Y;
- $PointsBottom[] = $X2; $PointsBottom[] = $Y;
-
- if ( $DisplayValues )
- {
- $BarWidth = abs($X2-$X1);
-
- $Caption = $this->scaleFormat(round($Serie["Data"][$Key],$DisplayRound),$Mode,$Format,$Unit);
- $TxtPos = $this->getTextBox(0,0,$DisplayFont,$DisplaySize,0,$Caption);
- $TxtWidth = abs($TxtPos[1]["X"] - $TxtPos[0]["X"]);
-
- if ( $BarWidth > $TxtWidth )
- {
- $XCenter = $X1 - $BarWidth / 2;
- $YCenter = $Y;
-
- $Labels[] = array($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));
- }
- }
-
- $LastX[$Key][$Pos] = $X2;
- }
- else
- { $PointsTop[] = $LastX[$Key][$Pos]; $PointsTop[] = $Y; $PointsBottom[] = $LastX[$Key][$Pos]; $PointsBottom[] = $Y; }
-
- $Y = $Y + $YStep;
- }
- $Points = $PointsTop;
- for($i=count($PointsBottom)-2;$i>=0;$i-=2) { $Points[] = $PointsBottom[$i]; $Points[] = $PointsBottom[$i+1]; }
- $this->drawPolygon($Points,$Color);
-
- if ( $DisplayValues ) { foreach($Labels as $Key => $Value) { $this->drawText($Value[0],$Value[1],$Value[2],$Value[3]);} }
- }
- }
- }
- }
-
- /* 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)
- {
- $Sxy = $Sxy + $X*$Y;
- $Sx = $Sx + $X;
- $Sy = $Sy + $Y;
- $Sxx = $Sxx + $X*$X;
-
- $X = $X + $XStep;
- }
- $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)
- {
- $Sxy = $Sxy + $X*$Y;
- $Sx = $Sx + $Y;
- $Sy = $Sy + $X;
- $Sxx = $Sxx + $Y*$Y;
-
- $Y = $Y + $YStep;
- }
- $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"];
-
- 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"]." - ".$Data["Series"][$Data["Abscissa"]]["Data"][$Index];
- else
- $Description = $Data["Series"][$SerieName]["Description"];
- }
- elseif ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
- $Description = $Data["Series"][$Data["Abscissa"]]["Data"][$Index];
-
- $AxisMode = $Data["Axis"][$AxisID]["Display"];
- $AxisFormat = $Data["Axis"][$AxisID]["Format"];
- $AxisUnit = $Data["Axis"][$AxisID]["Unit"];
-
- $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 ( $ForceLabels != NULL )
- $Caption = isset($ForceLabels[$Key]) ? $ForceLabels[$Key] : "Not set";
- else
- $Caption = $this->scaleFormat($Value,$AxisMode,$AxisFormat,$AxisUnit);
-
- $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"];
-
- 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"]." - ".$Data["Series"][$Data["Abscissa"]]["Data"][$Index];
- else
- $Description = $Data["Series"][$SerieName]["Description"];
- }
- elseif ( isset($Data["Abscissa"]) && isset($Data["Series"][$Data["Abscissa"]]["Data"][$Index]) )
- $Description = $Data["Series"][$Data["Abscissa"]]["Data"][$Index];
-
- $AxisMode = $Data["Axis"][$AxisID]["Display"];
- $AxisFormat = $Data["Axis"][$AxisID]["Format"];
- $AxisUnit = $Data["Axis"][$AxisID]["Unit"];
-
- $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);
-
- $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;
- $TitleBackgroundR = isset($Format["TitleBackgroundR"]) ? $Format["TitleBackgroundR"] : 0;
- $TitleBackgroundG = isset($Format["TitleBackgroundG"]) ? $Format["TitleBackgroundG"] : 0;
- $TitleBackgroundB = isset($Format["TitleBackgroundB"]) ? $Format["TitleBackgroundB"] : 0;
- $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;
-
- 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);
- 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,"NoBorder"=>TRUE));
-
- /* Outer border */
- $OuterBorderColor = $this->allocateColor($this->Picture,100,100,100,100);
- 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,100);
- 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));
- $this->drawLine($XMin+$XMargin,$YPos,$XMax-$XMargin,$YPos,array("R"=>$GradientStartR,"G"=>$GradientStartG,"B"=>$GradientStartB));
- }
- 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));
- 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;
- }
- }
-?> \ No newline at end of file
diff --git a/Under-Testing/Website/class/pImage.class.php b/Under-Testing/Website/class/pImage.class.php
deleted file mode 100644
index 4684e3c..0000000
--- a/Under-Testing/Website/class/pImage.class.php
+++ /dev/null
@@ -1,343 +0,0 @@
-<?php
- /*
- pDraw - pChart core class
-
- Version : 2.1.2
- Made by : Jean-Damien POGOLOTTI
- Last Update : 03/08/11
-
- 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();
- }
-
- define("IMAGE_MAP_STORAGE_FILE" , 680001);
- define("IMAGE_MAP_STORAGE_SESSION" , 680002);
-
- 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 = TRUE; // 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
-
- /* Class constructor */
- function pImage($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,$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);
- }
-
- /* Return the surrounding box of text area */
- function getTextBox($X,$Y,$FontName,$FontSize,$Angle,$Text)
- {
- $coords = imagettfbbox($FontSize, 0, $FontName, $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)
- {
- if ( $this->ImageMapStorageMode == NULL ) { $this->initialiseImageMap(); }
-
- 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.";".$Plots.";".$Color.";".$Title.";".$Message."\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].";".$Params[1].";".$Params[2].";".$Params[3].";".$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"); }
- }
- }
- 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);
- }
- }
-?> \ No newline at end of file
diff --git a/Under-Testing/Website/class/pIndicator.class.php b/Under-Testing/Website/class/pIndicator.class.php
deleted file mode 100644
index 4f7f23b..0000000
--- a/Under-Testing/Website/class/pIndicator.class.php
+++ /dev/null
@@ -1,241 +0,0 @@
-<?php
- /*
- pIndicator - class to draw indicators
-
- Version : 2.1.2
- Made by : Jean-Damien POGOLOTTI
- Last Update : 03/08/11
-
- 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("INDICATOR_CAPTION_DEFAULT" , 700001);
- define("INDICATOR_CAPTION_EXTENDED" , 700002);
-
- define("INDICATOR_CAPTION_INSIDE" , 700011);
- define("INDICATOR_CAPTION_BOTTOM" , 700012);
-
- define("INDICATOR_VALUE_BUBBLE" , 700021);
- define("INDICATOR_VALUE_LABEL" , 700022);
-
- /* pIndicator class definition */
- class pIndicator
- {
- var $pChartObject;
-
- /* Class creator */
- function pIndicator($pChartObject)
- {
- $this->pChartObject = $pChartObject;
- }
-
- /* Draw an indicator */
- function draw($X,$Y,$Width,$Height,$Format="")
- {
- $Values = isset($Format["Values"]) ? $Format["Values"] : VOID;
- $IndicatorSections = isset($Format["IndicatorSections"]) ? $Format["IndicatorSections"] : NULL;
- $ValueDisplay = isset($Format["ValueDisplay"]) ? $Format["ValueDisplay"] : INDICATOR_VALUE_BUBBLE;
- $SectionsMargin = isset($Format["SectionsMargin"]) ? $Format["SectionsMargin"] : 4;
- $DrawLeftHead = isset($Format["DrawLeftHead"]) ? $Format["DrawLeftHead"] : TRUE;
- $DrawRightHead = isset($Format["DrawRightHead"]) ? $Format["DrawRightHead"] : TRUE;
- $HeadSize = isset($Format["HeadSize"]) ? $Format["HeadSize"] : floor($Height/4);
- $TextPadding = isset($Format["TextPadding"]) ? $Format["TextPadding"] : 4;
- $CaptionLayout = isset($Format["CaptionLayout"]) ? $Format["CaptionLayout"] : INDICATOR_CAPTION_EXTENDED;
- $CaptionPosition = isset($Format["CaptionPosition"]) ? $Format["CaptionPosition"] : INDICATOR_CAPTION_INSIDE;
- $CaptionColorFactor = isset($Format["CaptionColorFactor"]) ? $Format["CaptionColorFactor"] : NULL;
- $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;
- $SubCaptionColorFactor = isset($Format["SubCaptionColorFactor"]) ? $Format["SubCaptionColorFactor"] : NULL;
- $SubCaptionR = isset($Format["SubCaptionR"]) ? $Format["SubCaptionR"] : 50;
- $SubCaptionG = isset($Format["SubCaptionG"]) ? $Format["SubCaptionG"] : 50;
- $SubCaptionB = isset($Format["SubCaptionB"]) ? $Format["SubCaptionB"] : 50;
- $SubCaptionAlpha = isset($Format["SubCaptionAlpha"]) ? $Format["SubCaptionAlpha"] : 100;
- $ValueFontName = isset($Format["ValueFontName"]) ? $Format["ValueFontName"] : $this->pChartObject->FontName;
- $ValueFontSize = isset($Format["ValueFontSize"]) ? $Format["ValueFontSize"] : $this->pChartObject->FontSize;
- $CaptionFontName = isset($Format["CaptionFontName"]) ? $Format["CaptionFontName"] : $this->pChartObject->FontName;
- $CaptionFontSize = isset($Format["CaptionFontSize"]) ? $Format["CaptionFontSize"] : $this->pChartObject->FontSize;
- $Unit = isset($Format["Unit"]) ? $Format["Unit"] : "";
-
- /* Convert the Values to display to an array if needed */
- if ( !is_array($Values) ) { $Value = $Values; $Values = ""; $Values[] = $Value; }
-
- /* No section, let's die */
- if ( $IndicatorSections == NULL ) { return(0); }
-
- /* Determine indicator visual configuration */
- $OverallMin = $IndicatorSections[0]["End"]; $OverallMax = $IndicatorSections[0]["Start"];
- foreach ($IndicatorSections as $Key => $Settings)
- {
- if ( $Settings["End"] > $OverallMax ) { $OverallMax = $Settings["End"]; }
- if ( $Settings["Start"] < $OverallMin ) { $OverallMin = $Settings["Start"]; }
- }
- $RealWidth = $Width - (count($IndicatorSections)-1)*$SectionsMargin;
- $XScale = $RealWidth / ($OverallMax-$OverallMin);
-
- $X1 = $X; $ValuesPos = "";
- foreach ($IndicatorSections as $Key => $Settings)
- {
- $Color = array("R"=>$Settings["R"],"G"=>$Settings["G"],"B"=>$Settings["B"]);
- $Caption = $Settings["Caption"];
- $SubCaption = $Settings["Start"]." - ".$Settings["End"];
-
- $X2 = $X1 + ($Settings["End"] - $Settings["Start"]) * $XScale;
-
- if ( $Key == 0 && $DrawLeftHead )
- {
- $Poly = ""; $Poly[] = $X1-1; $Poly[] = $Y; $Poly[] = $X1-1; $Poly[] = $Y+$Height; $Poly[] = $X1-1-$HeadSize; $Poly[] = $Y+($Height/2);
- $this->pChartObject->drawPolygon($Poly,$Color);
- $this->pChartObject->drawLine($X1-2,$Y,$X1-2-$HeadSize,$Y+($Height/2),$Color);
- $this->pChartObject->drawLine($X1-2,$Y+$Height,$X1-2-$HeadSize,$Y+($Height/2),$Color);
- }
-
- /* Determine the position of the breaks */
- $Break = "";
- foreach($Values as $iKey => $Value)
- {
- if ( $Value >= $Settings["Start"] && $Value <= $Settings["End"] )
- {
- $XBreak = $X1 + ($Value - $Settings["Start"]) * $XScale;
- $ValuesPos[$Value] = $XBreak;
- $Break[] = floor($XBreak);
- }
- }
-
- if ( $ValueDisplay == INDICATOR_VALUE_LABEL )
- {
- if ( $Break == "" )
- $this->pChartObject->drawFilledRectangle($X1,$Y,$X2,$Y+$Height,$Color);
- else
- {
- sort($Break);
- $Poly = ""; $Poly[] = $X1; $Poly[] = $Y; $LastPointWritten = FALSE;
- foreach($Break as $iKey => $Value)
- {
- if ( $Value-5 >= $X1 )
- { $Poly[] = $Value-5; $Poly[] = $Y; }
- elseif ($X1 - ($Value-5) > 0 )
- {
- $Offset = $X1 - ($Value-5);
- $Poly = ""; $Poly[] = $X1; $Poly[] = $Y + $Offset;
- }
-
- $Poly[] = $Value; $Poly[] = $Y+5;
-
- if ( $Value+5 <= $X2 )
- { $Poly[] = $Value+5; $Poly[] = $Y; }
- elseif (($Value+5) > $X2 )
- {
- $Offset = ($Value+5) - $X2;
- $Poly[] = $X2; $Poly[] = $Y + $Offset;
- $LastPointWritten = TRUE;
- }
-
- }
- if ( !$LastPointWritten ) { $Poly[] = $X2; $Poly[] = $Y; }
- $Poly[] = $X2; $Poly[] = $Y+$Height;
- $Poly[] = $X1; $Poly[] = $Y+$Height;
-
- $this->pChartObject->drawPolygon($Poly,$Color);
- }
- }
- else
- $this->pChartObject->drawFilledRectangle($X1,$Y,$X2,$Y+$Height,$Color);
-
- if ( $Key == count($IndicatorSections)-1 && $DrawRightHead )
- {
- $Poly = ""; $Poly[] = $X2+1; $Poly[] = $Y; $Poly[] = $X2+1; $Poly[] = $Y+$Height; $Poly[] = $X2+1+$HeadSize; $Poly[] = $Y+($Height/2);
- $this->pChartObject->drawPolygon($Poly,$Color);
- $this->pChartObject->drawLine($X2+1,$Y,$X2+1+$HeadSize,$Y+($Height/2),$Color);
- $this->pChartObject->drawLine($X2+1,$Y+$Height,$X2+1+$HeadSize,$Y+($Height/2),$Color);
- }
-
- if ( $CaptionPosition == INDICATOR_CAPTION_INSIDE )
- {
- $TxtPos = $this->pChartObject->getTextBox($X1,$Y+$Height+$TextPadding,$CaptionFontName,$CaptionFontSize,0,$Caption);
- $YOffset = ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]) + $TextPadding;
-
- if ( $CaptionLayout == INDICATOR_CAPTION_EXTENDED )
- {
- $TxtPos = $this->pChartObject->getTextBox($X1,$Y+$Height+$TextPadding,$CaptionFontName,$CaptionFontSize,0,$SubCaption);
- $YOffset = $YOffset + ($TxtPos[0]["Y"] - $TxtPos[2]["Y"]) + $TextPadding*2;
- }
-
- $XOffset = $TextPadding;
- }
- else
- { $YOffset = 0; $XOffset = 0; }
-
- if ( $CaptionColorFactor == NULL )
- { $CaptionColor = array("Align"=>TEXT_ALIGN_TOPLEFT,"FontName"=>$CaptionFontName,"FontSize"=>$CaptionFontSize,"R"=>$CaptionR,"G"=>$CaptionG,"B"=>$CaptionB,"Alpha"=>$CaptionAlpha); }
- else
- { $CaptionColor = array("Align"=>TEXT_ALIGN_TOPLEFT,"FontName"=>$CaptionFontName,"FontSize"=>$CaptionFontSize,"R"=>$Settings["R"]+$CaptionColorFactor,"G"=>$Settings["G"]+$CaptionColorFactor,"B"=>$Settings["B"]+$CaptionColorFactor); }
-
- if ( $SubCaptionColorFactor == NULL )
- $SubCaptionColor = array("Align"=>TEXT_ALIGN_TOPLEFT,"FontName"=>$CaptionFontName,"FontSize"=>$CaptionFontSize,"R"=>$SubCaptionR,"G"=>$SubCaptionG,"B"=>$SubCaptionB,"Alpha"=>$SubCaptionAlpha);
- else
- $SubCaptionColor = array("Align"=>TEXT_ALIGN_TOPLEFT,"FontName"=>$CaptionFontName,"FontSize"=>$CaptionFontSize,"R"=>$Settings["R"]+$SubCaptionColorFactor,"G"=>$Settings["G"]+$SubCaptionColorFactor,"B"=>$Settings["B"]+$SubCaptionColorFactor);
-
- $RestoreShadow = $this->pChartObject->Shadow;
- $this->pChartObject->Shadow = FALSE;
-
- if ( $CaptionLayout == INDICATOR_CAPTION_DEFAULT )
- $this->pChartObject->drawText($X1,$Y+$Height+$TextPadding,$Caption,$CaptionColor);
- elseif ( $CaptionLayout == INDICATOR_CAPTION_EXTENDED )
- {
- $TxtPos = $this->pChartObject->getTextBox($X1,$Y+$Height+$TextPadding,$CaptionFontName,$CaptionFontSize,0,$Caption);
- $CaptionHeight = $TxtPos[0]["Y"] - $TxtPos[2]["Y"];
-
- $this->pChartObject->drawText($X1+$XOffset,$Y+$Height-$YOffset+$TextPadding,$Caption,$CaptionColor);
- $this->pChartObject->drawText($X1+$XOffset,$Y+$Height-$YOffset+$CaptionHeight+$TextPadding*2,$SubCaption,$SubCaptionColor);
- }
-
- $this->pChartObject->Shadow = $RestoreShadow;
-
- $X1 = $X2 + $SectionsMargin;
- }
-
- $RestoreShadow = $this->pChartObject->Shadow;
- $this->pChartObject->Shadow = FALSE;
-
- foreach($Values as $Key => $Value)
- {
- if ( $Value >= $OverallMin && $Value <= $OverallMax )
- {
- foreach ($IndicatorSections as $Key => $Settings)
- {
- if ( $Value >= $Settings["Start"] && $Value <= $Settings["End"] )
- {
- $X1 = $ValuesPos[$Value]; //$X + $Key*$SectionsMargin + ($Value - $OverallMin) * $XScale;
-
- if ( $ValueDisplay == INDICATOR_VALUE_BUBBLE )
- {
- $TxtPos = $this->pChartObject->getTextBox($X1,$Y,$ValueFontName,$ValueFontSize,0,$Value.$Unit);
- $Radius = floor(($TxtPos[1]["X"] - $TxtPos[0]["X"] + $TextPadding*4)/2);
-
- $this->pChartObject->drawFilledCircle($X1,$Y,$Radius+4,array("R"=>$Settings["R"]+20,"G"=>$Settings["G"]+20,"B"=>$Settings["B"]+20));
- $this->pChartObject->drawFilledCircle($X1,$Y,$Radius,array("R"=>255,"G"=>255,"B"=>255));
-
- $TextSettings = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontName"=>$ValueFontName,"FontSize"=>$ValueFontSize);
- $this->pChartObject->drawText($X1-1,$Y-1,$Value.$Unit,$TextSettings);
- }
- elseif( $ValueDisplay == INDICATOR_VALUE_LABEL )
- {
- $Caption = "";
- $Caption[] = array("Format"=>array("R"=>$Settings["R"],"G"=>$Settings["G"],"B"=>$Settings["B"],"Alpha"=>100),"Caption"=>$Value.$Unit);
- $this->pChartObject->drawLabelBox(floor($X1),floor($Y)+2,"Value - ".$Settings["Caption"],$Caption);
- }
- }
- $X1 = $X2 + $SectionsMargin;
- }
- }
- }
- $this->pChartObject->Shadow = $RestoreShadow;
- }
- }
-?> \ No newline at end of file
diff --git a/Under-Testing/Website/class/pPie.class.php b/Under-Testing/Website/class/pPie.class.php
deleted file mode 100644
index 8940b4d..0000000
--- a/Under-Testing/Website/class/pPie.class.php
+++ /dev/null
@@ -1,1493 +0,0 @@
-<?php
- /*
- pPie - class to draw pie charts
-
- Version : 2.1.2
- Made by : Jean-Damien POGOLOTTI
- Last Update : 03/08/11
-
- 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 pPie($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;
- $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 ( $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)."%";
- 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;
- $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)."%";
- 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;
- $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)."%";
- elseif ( $WriteValues == PIE_VALUE_NATURAL )
- $Display = $Value.$ValueSuffix;
-
- $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="")
- {
- /* Rendering layout */
- $OuterRadius = isset($Format["OuterRadius"]) ? $Format["OuterRadius"] : 100;
- $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"] : NULL;
- $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);
-
-//print_r($Data["Series"][$Data["Abscissa"]]["Data"]);
-//exit();
- 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;
-
- $Label = $Data["Series"][$Data["Abscissa"]]["Data"][$Key];
-
- 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/Under-Testing/Website/class/pRadar.class.php b/Under-Testing/Website/class/pRadar.class.php
deleted file mode 100644
index 6235c99..0000000
--- a/Under-Testing/Website/class/pRadar.class.php
+++ /dev/null
@@ -1,669 +0,0 @@
-<?php
- /*
- pRadar - class to draw radar charts
-
- Version : 2.1.2
- Made by : Jean-Damien POGOLOTTI
- Last Update : 03/08/11
-
- 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("SEGMENT_HEIGHT_AUTO" , 690001);
-
- define("RADAR_LAYOUT_STAR" , 690011);
- define("RADAR_LAYOUT_CIRCLE" , 690012);
-
- define("RADAR_LABELS_ROTATED" , 690021);
- define("RADAR_LABELS_HORIZONTAL" , 690022);
-
- /* pRadar class definition */
- class pRadar
- {
- var $pChartObject;
-
- /* Class creator */
- function pRadar()
- { }
-
- /* Draw a radar chart */
- function drawRadar($Object,$Values,$Format="")
- {
- $this->pChartObject = $Object;
-
- $AxisR = isset($Format["AxisR"]) ? $Format["AxisR"] : 60;
- $AxisG = isset($Format["AxisG"]) ? $Format["AxisG"] : 60;
- $AxisB = isset($Format["AxisB"]) ? $Format["AxisB"] : 60;
- $AxisAlpha = isset($Format["AxisAlpha"]) ? $Format["AxisAlpha"] : 50;
- $AxisRotation = isset($Format["AxisRotation"]) ? $Format["AxisRotation"] : 0;
- $DrawTicks = isset($Format["DrawTicks"]) ? $Format["DrawTicks"] : TRUE;
- $TicksLength = isset($Format["TicksLength"]) ? $Format["TicksLength"] : 2;
- $DrawAxisValues = isset($Format["DrawAxisValues"]) ? $Format["DrawAxisValues"] : TRUE;
- $AxisBoxRounded = isset($Format["AxisBoxRounded"]) ? $Format["AxisBoxRounded"] : TRUE;
- $AxisFontName = isset($Format["AxisFontName"]) ? $Format["AxisFontName"] : $this->pChartObject->FontName;
- $AxisFontSize = isset($Format["AxisFontSize"]) ? $Format["AxisFontSize"] : $this->pChartObject->FontSize;
- $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : FALSE;
- $WriteValuesInBubble = isset($Format["WriteValuesInBubble"]) ? $Format["WriteValuesInBubble"] : TRUE;
- $ValueFontName = isset($Format["ValueFontName"]) ? $Format["ValueFontName"] : $this->pChartObject->FontName;
- $ValueFontSize = isset($Format["ValueFontSize"]) ? $Format["ValueFontSize"] : $this->pChartObject->FontSize;
- $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 4;
- $OuterBubbleRadius = isset($Format["OuterBubbleRadius"]) ? $Format["OuterBubbleRadius"] : 2;
- $OuterBubbleR = isset($Format["OuterBubbleR"]) ? $Format["OuterBubbleR"] : VOID;
- $OuterBubbleG = isset($Format["OuterBubbleG"]) ? $Format["OuterBubbleG"] : VOID;
- $OuterBubbleB = isset($Format["OuterBubbleB"]) ? $Format["OuterBubbleB"] : VOID;
- $OuterBubbleAlpha = isset($Format["OuterBubbleAlpha"]) ? $Format["OuterBubbleAlpha"] : 100;
- $InnerBubbleR = isset($Format["InnerBubbleR"]) ? $Format["InnerBubbleR"] : 255;
- $InnerBubbleG = isset($Format["InnerBubbleG"]) ? $Format["InnerBubbleG"] : 255;
- $InnerBubbleB = isset($Format["InnerBubbleB"]) ? $Format["InnerBubbleB"] : 255;
- $InnerBubbleAlpha = isset($Format["InnerBubbleAlpha"]) ? $Format["InnerBubbleAlpha"] : 100;
- $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"] : 50;
- $BackgroundGradient= isset($Format["BackgroundGradient"]) ? $Format["BackgroundGradient"] : NULL;
- $Layout = isset($Format["Layout"]) ? $Format["Layout"] : RADAR_LAYOUT_STAR;
- $SegmentHeight = isset($Format["SegmentHeight"]) ? $Format["SegmentHeight"] : SEGMENT_HEIGHT_AUTO;
- $Segments = isset($Format["Segments"]) ? $Format["Segments"] : 4;
- $WriteLabels = isset($Format["WriteLabels"]) ? $Format["WriteLabels"] : TRUE;
- $SkipLabels = isset($Format["SkipLabels"]) ? $Format["SkipLabels"] : 1;
- $LabelMiddle = isset($Format["LabelMiddle"]) ? $Format["LabelMiddle"] : FALSE;
- $LabelsBackground = isset($Format["LabelsBackground"]) ? $Format["LabelsBackground"] : TRUE;
- $LabelsBGR = isset($Format["LabelsBGR"]) ? $Format["LabelsBGR"] : 255;
- $LabelsBGG = isset($Format["LabelsBGR"]) ? $Format["LabelsBGG"] : 255;
- $LabelsBGB = isset($Format["LabelsBGR"]) ? $Format["LabelsBGB"] : 255;
- $LabelsBGAlpha = isset($Format["LabelsBGAlpha"]) ? $Format["LabelsBGAlpha"] : 50;
- $LabelPos = isset($Format["LabelPos"]) ? $Format["LabelPos"] : RADAR_LABELS_ROTATED;
- $LabelPadding = isset($Format["LabelPadding"]) ? $Format["LabelPadding"] : 4;
- $DrawPoints = isset($Format["DrawPoints"]) ? $Format["DrawPoints"] : TRUE;
- $PointRadius = isset($Format["PointRadius"]) ? $Format["PointRadius"] : 4;
- $PointSurrounding = isset($Format["PointRadius"]) ? $Format["PointRadius"] : -30;
- $DrawLines = isset($Format["DrawLines"]) ? $Format["DrawLines"] : TRUE;
- $LineLoopStart = isset($Format["LineLoopStart"]) ? $Format["LineLoopStart"] : TRUE;
- $DrawPoly = isset($Format["DrawPoly"]) ? $Format["DrawPoly"] : FALSE;
- $PolyAlpha = isset($Format["PolyAlpha"]) ? $Format["PolyAlpha"] : 40;
- $FontSize = $Object->FontSize;
- $X1 = $Object->GraphAreaX1;
- $Y1 = $Object->GraphAreaY1;
- $X2 = $Object->GraphAreaX2;
- $Y2 = $Object->GraphAreaY2;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
-
- /* Cancel default tick length if ticks not enabled */
- if ( $DrawTicks == FALSE ) { $TicksLength = 0; }
-
- /* Data Processing */
- $Data = $Values->getData();
- $Palette = $Values->getPalette();
-
- /* Catch the number of required axis */
- $LabelSerie = $Data["Abscissa"];
- if ( $LabelSerie != "" )
- { $Points = count($Data["Series"][$LabelSerie]["Data"]); }
- else
- {
- $Points = 0;
- foreach($Data["Series"] as $SerieName => $DataArray)
- { if ( count($DataArray["Data"]) > $Points ) { $Points = count($DataArray["Data"]); } }
- }
-
- /* Draw the axis */
- $CenterX = ($X2-$X1)/2 + $X1;
- $CenterY = ($Y2-$Y1)/2 + $Y1;
-
- $EdgeHeight = min(($X2-$X1)/2,($Y2-$Y1)/2);
- if ( $WriteLabels )
- $EdgeHeight = $EdgeHeight - $FontSize - $LabelPadding - $TicksLength;
-
- /* Determine the scale if set to automatic */
- if ( $SegmentHeight == SEGMENT_HEIGHT_AUTO)
- {
- $Max = 0;
- foreach($Data["Series"] as $SerieName => $DataArray)
- {
- if ( $SerieName != $LabelSerie )
- {
- if ( max($DataArray["Data"]) > $Max ) { $Max = max($DataArray["Data"]); }
- }
- }
- $MaxSegments = $EdgeHeight/20;
- $Scale = $Object->computeScale(0,$Max,$MaxSegments,array(1,2,5));
-
- $Segments = $Scale["Rows"];
- $SegmentHeight = $Scale["RowHeight"];
- }
-
- if ( $LabelMiddle && $SkipLabels == 1 )
- { $Axisoffset = (360/$Points)/2; }
- elseif ( $LabelMiddle && $SkipLabels != 1 )
- { $Axisoffset = (360/($Points/$SkipLabels))/2; }
- elseif ( !$LabelMiddle )
- { $Axisoffset = 0; }
-
- /* Background processing */
- if ( $DrawBackground )
- {
- $RestoreShadow = $Object->Shadow;
- $Object->Shadow = FALSE;
-
- if ($BackgroundGradient == NULL)
- {
- if ( $Layout == RADAR_LAYOUT_STAR )
- {
- $Color = array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha);
- $PointArray = "";
- for($i=0;$i<=360;$i=$i+(360/$Points))
- {
- $PointArray[] = cos(deg2rad($i+$AxisRotation)) * $EdgeHeight + $CenterX;
- $PointArray[] = sin(deg2rad($i+$AxisRotation)) * $EdgeHeight + $CenterY;
- }
- $Object->drawPolygon($PointArray,$Color);
- }
- elseif ( $Layout == RADAR_LAYOUT_CIRCLE )
- {
- $Color = array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha);
- $Object->drawFilledCircle($CenterX,$CenterY,$EdgeHeight,$Color);
- }
- }
- else
- {
- $GradientROffset = ($BackgroundGradient["EndR"] - $BackgroundGradient["StartR"]) / $Segments;
- $GradientGOffset = ($BackgroundGradient["EndG"] - $BackgroundGradient["StartG"]) / $Segments;
- $GradientBOffset = ($BackgroundGradient["EndB"] - $BackgroundGradient["StartB"]) / $Segments;
- $GradientAlphaOffset = ($BackgroundGradient["EndAlpha"] - $BackgroundGradient["StartAlpha"]) / $Segments;
-
- if ( $Layout == RADAR_LAYOUT_STAR )
- {
- for($j=$Segments;$j>=1;$j--)
- {
- $Color = array("R"=>$BackgroundGradient["StartR"]+$GradientROffset*$j,"G"=>$BackgroundGradient["StartG"]+$GradientGOffset*$j,"B"=>$BackgroundGradient["StartB"]+$GradientBOffset*$j,"Alpha"=>$BackgroundGradient["StartAlpha"]+$GradientAlphaOffset*$j);
- $PointArray = "";
-
- for($i=0;$i<=360;$i=$i+(360/$Points))
- {
- $PointArray[] = cos(deg2rad($i+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX;
- $PointArray[] = sin(deg2rad($i+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY;
- }
- $Object->drawPolygon($PointArray,$Color);
- }
- }
- elseif ( $Layout == RADAR_LAYOUT_CIRCLE )
- {
- for($j=$Segments;$j>=1;$j--)
- {
- $Color = array("R"=>$BackgroundGradient["StartR"]+$GradientROffset*$j,"G"=>$BackgroundGradient["StartG"]+$GradientGOffset*$j,"B"=>$BackgroundGradient["StartB"]+$GradientBOffset*$j,"Alpha"=>$BackgroundGradient["StartAlpha"]+$GradientAlphaOffset*$j);
- $Object->drawFilledCircle($CenterX,$CenterY,($EdgeHeight/$Segments)*$j,$Color);
- }
- }
- }
- $Object->Shadow = $RestoreShadow;
- }
-
- /* Axis to axis lines */
- $Color = array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha);
- $ColorDotted = array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha*.8, "Ticks"=>2);
- if ( $Layout == RADAR_LAYOUT_STAR )
- {
- for($j=1;$j<=$Segments;$j++)
- {
- for($i=0;$i<360;$i=$i+(360/$Points))
- {
- $EdgeX1 = cos(deg2rad($i+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX;
- $EdgeY1 = sin(deg2rad($i+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY;
- $EdgeX2 = cos(deg2rad($i+$AxisRotation+(360/$Points))) * ($EdgeHeight/$Segments)*$j + $CenterX;
- $EdgeY2 = sin(deg2rad($i+$AxisRotation+(360/$Points))) * ($EdgeHeight/$Segments)*$j + $CenterY;
-
- $Object->drawLine($EdgeX1,$EdgeY1,$EdgeX2,$EdgeY2,$Color);
- }
- }
- }
- elseif ( $Layout == RADAR_LAYOUT_CIRCLE )
- {
- for($j=1;$j<=$Segments;$j++)
- {
- $Radius = ($EdgeHeight/$Segments)*$j;
- $Object->drawCircle($CenterX,$CenterY,$Radius,$Radius,$Color);
- }
- }
-
- if ( $DrawAxisValues )
- {
- if ( $LabelsBackground )
- $Options = array("DrawBox"=>TRUE, "Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"BoxR"=>$LabelsBGR,"BoxG"=>$LabelsBGG,"BoxB"=>$LabelsBGB,"BoxAlpha"=>$LabelsBGAlpha);
- else
- $Options = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE);
-
- if ( $AxisBoxRounded ) { $Options["BoxRounded"] = TRUE; }
-
- $Options["FontName"] = $AxisFontName;
- $Options["FontSize"] = $AxisFontSize;
-
- $Angle = 360 / ($Points*2);
- for($j=1;$j<=$Segments;$j++)
- {
- $Label = $j * $SegmentHeight;
-
- if ( $Layout == RADAR_LAYOUT_CIRCLE )
- {
- $EdgeX1 = cos(deg2rad($Angle+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX;
- $EdgeY1 = sin(deg2rad($Angle+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY;
- }
- elseif ( $Layout == RADAR_LAYOUT_STAR )
- {
- $EdgeX1 = cos(deg2rad($AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX;
- $EdgeY1 = sin(deg2rad($AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY;
- $EdgeX2 = cos(deg2rad((360 / $Points) + $AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX;
- $EdgeY2 = sin(deg2rad((360 / $Points) + $AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY;
-
- $EdgeX1 = ($EdgeX2 - $EdgeX1)/2 + $EdgeX1;
- $EdgeY1 = ($EdgeY2 - $EdgeY1)/2 + $EdgeY1;
- }
-
- $Object->drawText($EdgeX1,$EdgeY1,$Label,$Options);
- }
- }
-
- /* Axis lines */
- $ID = 0;
- for($i=0;$i<360;$i=$i+(360/$Points))
- {
- $EdgeX = cos(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$TicksLength) + $CenterX;
- $EdgeY = sin(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$TicksLength) + $CenterY;
-
- if ($ID % $SkipLabels == 0)
- { $Object->drawLine($CenterX,$CenterY,$EdgeX,$EdgeY,$Color); }
- else
- { $Object->drawLine($CenterX,$CenterY,$EdgeX,$EdgeY,$ColorDotted); }
-
- if ( $WriteLabels )
- {
- $LabelX = cos(deg2rad($i+$AxisRotation+$Axisoffset)) * ($EdgeHeight+$LabelPadding+$TicksLength) + $CenterX;
- $LabelY = sin(deg2rad($i+$AxisRotation+$Axisoffset)) * ($EdgeHeight+$LabelPadding+$TicksLength) + $CenterY;
-
- if ( $LabelSerie != "" )
- { $Label = isset($Data["Series"][$LabelSerie]["Data"][$ID]) ? $Data["Series"][$LabelSerie]["Data"][$ID] : ""; }
- else
- $Label = $ID;
-
- if ($ID % $SkipLabels == 0)
- {
- if ( $LabelPos == RADAR_LABELS_ROTATED )
- $Object->drawText($LabelX,$LabelY,$Label,array("Angle"=>(360-($i+$AxisRotation+$Axisoffset))-90,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
- else
- {
- if ( (floor($LabelX) == floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); }
- if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMLEFT)); }
- if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) == floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_MIDDLELEFT)); }
- if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPLEFT)); }
- if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMRIGHT)); }
- if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) == floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_MIDDLERIGHT)); }
- if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPRIGHT)); }
- if ( (floor($LabelX) == floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPMIDDLE)); }
- }
- }
- }
- $ID++;
- }
-
- /* Compute the plots position */
- $ID = 0; $Plot = "";
- foreach($Data["Series"] as $SerieName => $DataS)
- {
- if ( $SerieName != $LabelSerie )
- {
- $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding);
- foreach($DataS["Data"] as $Key => $Value)
- {
- $Angle = (360/$Points) * $Key;
- $Length = ($EdgeHeight/($Segments*$SegmentHeight))*$Value;
-
- $X = cos(deg2rad($Angle+$AxisRotation)) * $Length + $CenterX;
- $Y = sin(deg2rad($Angle+$AxisRotation)) * $Length + $CenterY;
-
- $Plot[$ID][] = array($X,$Y,$Value);
-
- if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".floor($PointRadius),$this->pChartObject->toHTMLColor($Palette[$ID]["R"],$Palette[$ID]["G"],$Palette[$ID]["B"]),$DataS["Description"],$Data["Series"][$LabelSerie]["Data"][$Key]." = ".$Value); }
- }
- $ID++;
- }
- }
-
- /* Draw all that stuff! */
- foreach($Plot as $ID => $Points)
- {
- $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding);
-
- /* Draw the polygons */
- if ( $DrawPoly )
- {
- if ($PolyAlpha != NULL)
- $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$PolyAlpha,"Surrounding"=>$PointSurrounding);
-
- $PointsArray = "";
- for($i=0; $i<count($Points);$i++)
- { $PointsArray[] = $Points[$i][0]; $PointsArray[] = $Points[$i][1]; }
- $Object->drawPolygon($PointsArray,$Color);
- }
-
- $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding);
-
- /* Bubble and labels settings */
- $TextSettings = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontName"=>$ValueFontName,"FontSize"=>$ValueFontSize,"R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"]);
- $InnerColor = array("R"=>$InnerBubbleR,"G"=>$InnerBubbleG,"B"=>$InnerBubbleB,"Alpha"=>$InnerBubbleAlpha);
- if ( $OuterBubbleR != VOID )
- $OuterColor = array("R"=>$OuterBubbleR,"G"=>$OuterBubbleG,"B"=>$OuterBubbleB,"Alpha"=>$OuterBubbleAlpha);
- else
- $OuterColor = array("R"=>$Palette[$ID]["R"]+20,"G"=>$Palette[$ID]["G"]+20,"B"=>$Palette[$ID]["B"]+20,"Alpha"=>$Palette[$ID]["Alpha"]);
-
- /* Loop to the starting points if asked */
- if ( $LineLoopStart && $DrawLines )
- $Object->drawLine($Points[count($Points)-1][0],$Points[count($Points)-1][1],$Points[0][0],$Points[0][1],$Color);
-
- /* Draw the lines & points */
- for($i=0; $i<count($Points);$i++)
- {
- if ( $DrawLines && $i < count($Points)-1)
- $Object->drawLine($Points[$i][0],$Points[$i][1],$Points[$i+1][0],$Points[$i+1][1],$Color);
-
- if ( $DrawPoints )
- $Object->drawFilledCircle($Points[$i][0],$Points[$i][1],$PointRadius,$Color);
-
- if ( $WriteValuesInBubble && $WriteValues )
- {
- $TxtPos = $this->pChartObject->getTextBox($Points[$i][0],$Points[$i][1],$ValueFontName,$ValueFontSize,0,$Points[$i][2]);
- $Radius = floor(($TxtPos[1]["X"] - $TxtPos[0]["X"] + $ValuePadding*2)/2);
-
- $this->pChartObject->drawFilledCircle($Points[$i][0],$Points[$i][1],$Radius+$OuterBubbleRadius,$OuterColor);
- $this->pChartObject->drawFilledCircle($Points[$i][0],$Points[$i][1],$Radius,$InnerColor);
- }
-
- if ( $WriteValues )
- $this->pChartObject->drawText($Points[$i][0]-1,$Points[$i][1]-1,$Points[$i][2],$TextSettings);
- }
- }
- }
-
-
-
- /* Draw a radar chart */
- function drawPolar($Object,$Values,$Format="")
- {
- $this->pChartObject = $Object;
-
- $AxisR = isset($Format["AxisR"]) ? $Format["AxisR"] : 60;
- $AxisG = isset($Format["AxisG"]) ? $Format["AxisG"] : 60;
- $AxisB = isset($Format["AxisB"]) ? $Format["AxisB"] : 60;
- $AxisAlpha = isset($Format["AxisAlpha"]) ? $Format["AxisAlpha"] : 50;
- $AxisRotation = isset($Format["AxisRotation"]) ? $Format["AxisRotation"] : -90;
- $DrawTicks = isset($Format["DrawTicks"]) ? $Format["DrawTicks"] : TRUE;
- $TicksLength = isset($Format["TicksLength"]) ? $Format["TicksLength"] : 2;
- $DrawAxisValues = isset($Format["DrawAxisValues"]) ? $Format["DrawAxisValues"] : TRUE;
- $AxisBoxRounded = isset($Format["AxisBoxRounded"]) ? $Format["AxisBoxRounded"] : TRUE;
- $AxisFontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->pChartObject->FontName;
- $AxisFontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->pChartObject->FontSize;
- $WriteValues = isset($Format["WriteValues"]) ? $Format["WriteValues"] : FALSE;
- $WriteValuesInBubble = isset($Format["WriteValuesInBubble"]) ? $Format["WriteValuesInBubble"] : TRUE;
- $ValueFontName = isset($Format["ValueFontName"]) ? $Format["ValueFontName"] : $this->pChartObject->FontName;
- $ValueFontSize = isset($Format["ValueFontSize"]) ? $Format["ValueFontSize"] : $this->pChartObject->FontSize;
- $ValuePadding = isset($Format["ValuePadding"]) ? $Format["ValuePadding"] : 4;
- $OuterBubbleRadius = isset($Format["OuterBubbleRadius"]) ? $Format["OuterBubbleRadius"] : 2;
- $OuterBubbleR = isset($Format["OuterBubbleR"]) ? $Format["OuterBubbleR"] : VOID;
- $OuterBubbleG = isset($Format["OuterBubbleG"]) ? $Format["OuterBubbleG"] : VOID;
- $OuterBubbleB = isset($Format["OuterBubbleB"]) ? $Format["OuterBubbleB"] : VOID;
- $OuterBubbleAlpha = isset($Format["OuterBubbleAlpha"]) ? $Format["OuterBubbleAlpha"] : 100;
- $InnerBubbleR = isset($Format["InnerBubbleR"]) ? $Format["InnerBubbleR"] : 255;
- $InnerBubbleG = isset($Format["InnerBubbleG"]) ? $Format["InnerBubbleG"] : 255;
- $InnerBubbleB = isset($Format["InnerBubbleB"]) ? $Format["InnerBubbleB"] : 255;
- $InnerBubbleAlpha = isset($Format["InnerBubbleAlpha"]) ? $Format["InnerBubbleAlpha"] : 100;
- $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"] : 50;
- $BackgroundGradient= isset($Format["BackgroundGradient"]) ? $Format["BackgroundGradient"] : NULL;
- $AxisSteps = isset($Format["AxisSteps"]) ? $Format["AxisSteps"] : 20;
- $SegmentHeight = isset($Format["SegmentHeight"]) ? $Format["SegmentHeight"] : SEGMENT_HEIGHT_AUTO;
- $Segments = isset($Format["Segments"]) ? $Format["Segments"] : 4;
- $WriteLabels = isset($Format["WriteLabels"]) ? $Format["WriteLabels"] : TRUE;
- $LabelsBackground = isset($Format["LabelsBackground"]) ? $Format["LabelsBackground"] : TRUE;
- $LabelsBGR = isset($Format["LabelsBGR"]) ? $Format["LabelsBGR"] : 255;
- $LabelsBGG = isset($Format["LabelsBGR"]) ? $Format["LabelsBGG"] : 255;
- $LabelsBGB = isset($Format["LabelsBGR"]) ? $Format["LabelsBGB"] : 255;
- $LabelsBGAlpha = isset($Format["LabelsBGAlpha"]) ? $Format["LabelsBGAlpha"] : 50;
- $LabelPos = isset($Format["LabelPos"]) ? $Format["LabelPos"] : RADAR_LABELS_ROTATED;
- $LabelPadding = isset($Format["LabelPadding"]) ? $Format["LabelPadding"] : 4;
- $DrawPoints = isset($Format["DrawPoints"]) ? $Format["DrawPoints"] : TRUE;
- $PointRadius = isset($Format["PointRadius"]) ? $Format["PointRadius"] : 4;
- $PointSurrounding = isset($Format["PointRadius"]) ? $Format["PointRadius"] : -30;
- $DrawLines = isset($Format["DrawLines"]) ? $Format["DrawLines"] : TRUE;
- $LineLoopStart = isset($Format["LineLoopStart"]) ? $Format["LineLoopStart"] : FALSE;
- $DrawPoly = isset($Format["DrawPoly"]) ? $Format["DrawPoly"] : FALSE;
- $PolyAlpha = isset($Format["PolyAlpha"]) ? $Format["PolyAlpha"] : NULL;
- $FontSize = $Object->FontSize;
- $X1 = $Object->GraphAreaX1;
- $Y1 = $Object->GraphAreaY1;
- $X2 = $Object->GraphAreaX2;
- $Y2 = $Object->GraphAreaY2;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
-
- if ( $AxisBoxRounded ) { $DrawAxisValues = TRUE; }
-
- /* Cancel default tick length if ticks not enabled */
- if ( $DrawTicks == FALSE ) { $TicksLength = 0; }
-
- /* Data Processing */
- $Data = $Values->getData();
- $Palette = $Values->getPalette();
-
- /* Catch the number of required axis */
- $LabelSerie = $Data["Abscissa"];
- if ( $LabelSerie != "" )
- { $Points = count($Data["Series"][$LabelSerie]["Data"]); }
- else
- {
- $Points = 0;
- foreach($Data["Series"] as $SerieName => $DataArray)
- { if ( count($DataArray["Data"]) > $Points ) { $Points = count($DataArray["Data"]); } }
- }
-
- /* Draw the axis */
- $CenterX = ($X2-$X1)/2 + $X1;
- $CenterY = ($Y2-$Y1)/2 + $Y1;
-
- $EdgeHeight = min(($X2-$X1)/2,($Y2-$Y1)/2);
- if ( $WriteLabels )
- $EdgeHeight = $EdgeHeight - $FontSize - $LabelPadding - $TicksLength;
-
- /* Determine the scale if set to automatic */
- if ( $SegmentHeight == SEGMENT_HEIGHT_AUTO)
- {
- $Max = 0;
- foreach($Data["Series"] as $SerieName => $DataArray)
- {
- if ( $SerieName != $LabelSerie )
- {
- if ( max($DataArray["Data"]) > $Max ) { $Max = max($DataArray["Data"]); }
- }
- }
- $MaxSegments = $EdgeHeight/20;
- $Scale = $Object->computeScale(0,$Max,$MaxSegments,array(1,2,5));
-
- $Segments = $Scale["Rows"];
- $SegmentHeight = $Scale["RowHeight"];
- }
-
-
- /* Background processing */
- if ( $DrawBackground )
- {
- $RestoreShadow = $Object->Shadow;
- $Object->Shadow = FALSE;
-
- if ($BackgroundGradient == NULL)
- {
- $Color = array("R"=>$BackgroundR,"G"=>$BackgroundG,"B"=>$BackgroundB,"Alpha"=>$BackgroundAlpha);
- $Object->drawFilledCircle($CenterX,$CenterY,$EdgeHeight,$Color);
- }
- else
- {
- $GradientROffset = ($BackgroundGradient["EndR"] - $BackgroundGradient["StartR"]) / $Segments;
- $GradientGOffset = ($BackgroundGradient["EndG"] - $BackgroundGradient["StartG"]) / $Segments;
- $GradientBOffset = ($BackgroundGradient["EndB"] - $BackgroundGradient["StartB"]) / $Segments;
- $GradientAlphaOffset = ($BackgroundGradient["EndAlpha"] - $BackgroundGradient["StartAlpha"]) / $Segments;
-
- for($j=$Segments;$j>=1;$j--)
- {
- $Color = array("R"=>$BackgroundGradient["StartR"]+$GradientROffset*$j,"G"=>$BackgroundGradient["StartG"]+$GradientGOffset*$j,"B"=>$BackgroundGradient["StartB"]+$GradientBOffset*$j,"Alpha"=>$BackgroundGradient["StartAlpha"]+$GradientAlphaOffset*$j);
- $Object->drawFilledCircle($CenterX,$CenterY,($EdgeHeight/$Segments)*$j,$Color);
- }
- }
- $Object->Shadow = $RestoreShadow;
- }
-
- /* Axis to axis lines */
- $Color = array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha);
- for($j=1;$j<=$Segments;$j++)
- {
- $Radius = ($EdgeHeight/$Segments)*$j;
- $Object->drawCircle($CenterX,$CenterY,$Radius,$Radius,$Color);
- }
-
- if ( $DrawAxisValues )
- {
- if ( $LabelsBackground )
- $Options = array("DrawBox"=>TRUE, "Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"BoxR"=>$LabelsBGR,"BoxG"=>$LabelsBGG,"BoxB"=>$LabelsBGB,"BoxAlpha"=>$LabelsBGAlpha);
- else
- $Options = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE);
-
- if ( $AxisBoxRounded ) { $Options["BoxRounded"] = TRUE; }
-
- $Options["FontName"] = $AxisFontName;
- $Options["FontSize"] = $AxisFontSize;
-
- $Angle = 360 / ($Points*2);
- for($j=1;$j<=$Segments;$j++)
- {
- $EdgeX1 = cos(deg2rad($Angle+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterX;
- $EdgeY1 = sin(deg2rad($Angle+$AxisRotation)) * ($EdgeHeight/$Segments)*$j + $CenterY;
- $Label = $j*$SegmentHeight;
-
- $Object->drawText($EdgeX1,$EdgeY1,$Label,$Options);
- }
- }
-
- /* Axis lines */
- $ID = 0;
- for($i=0;$i<=359;$i=$i+$AxisSteps)
- {
- $EdgeX = cos(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$TicksLength) + $CenterX;
- $EdgeY = sin(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$TicksLength) + $CenterY;
-
- $Object->drawLine($CenterX,$CenterY,$EdgeX,$EdgeY,$Color);
-
- if ( $WriteLabels )
- {
- $LabelX = cos(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$LabelPadding+$TicksLength) + $CenterX;
- $LabelY = sin(deg2rad($i+$AxisRotation)) * ($EdgeHeight+$LabelPadding+$TicksLength) + $CenterY;
- $Label = $i."°";
-
- if ( $LabelPos == RADAR_LABELS_ROTATED )
- $Object->drawText($LabelX,$LabelY,$Label,array("Angle"=>(360-$i),"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
- else
- {
- if ( (floor($LabelX) == floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); }
- if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMLEFT)); }
- if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) == floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_MIDDLELEFT)); }
- if ( (floor($LabelX) > floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPLEFT)); }
- if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) < floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_BOTTOMRIGHT)); }
- if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) == floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_MIDDLERIGHT)); }
- if ( (floor($LabelX) < floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPRIGHT)); }
- if ( (floor($LabelX) == floor($CenterX)) && (floor($LabelY) > floor($CenterY)) ) { $Object->drawText($LabelX,$LabelY,$Label,array("Align"=>TEXT_ALIGN_TOPMIDDLE)); }
- }
- }
- $ID++;
- }
-
- /* Compute the plots position */
- $ID = 0; $Plot = "";
- foreach($Data["Series"] as $SerieName => $DataSet)
- {
- if ( $SerieName != $LabelSerie )
- {
- $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding);
- foreach($DataSet["Data"] as $Key => $Value)
- {
- $Angle = $Data["Series"][$LabelSerie]["Data"][$Key];
- $Length = ($EdgeHeight/($Segments*$SegmentHeight))*$Value;
-
- $X = cos(deg2rad($Angle+$AxisRotation)) * $Length + $CenterX;
- $Y = sin(deg2rad($Angle+$AxisRotation)) * $Length + $CenterY;
-
- if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".floor($PointRadius),$this->pChartObject->toHTMLColor($Palette[$ID]["R"],$Palette[$ID]["G"],$Palette[$ID]["B"]),$DataSet["Description"],$Data["Series"][$LabelSerie]["Data"][$Key]."&deg = ".$Value); }
-
- $Plot[$ID][] = array($X,$Y,$Value);
- }
- $ID++;
- }
- }
-
- /* Draw all that stuff! */
- foreach($Plot as $ID => $Points)
- {
- $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding);
-
- /* Draw the polygons */
- if ( $DrawPoly )
- {
- if ($PolyAlpha != NULL)
- $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$PolyAlpha,"Surrounding"=>$PointSurrounding);
-
- $PointsArray = "";
- for($i=0; $i<count($Points);$i++)
- { $PointsArray[] = $Points[$i][0]; $PointsArray[] = $Points[$i][1]; }
-
- $Object->drawPolygon($PointsArray,$Color);
- }
-
- $Color = array("R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"],"Alpha"=>$Palette[$ID]["Alpha"],"Surrounding"=>$PointSurrounding);
-
- /* Bubble and labels settings */
- $TextSettings = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE,"FontName"=>$ValueFontName,"FontSize"=>$ValueFontSize,"R"=>$Palette[$ID]["R"],"G"=>$Palette[$ID]["G"],"B"=>$Palette[$ID]["B"]);
- $InnerColor = array("R"=>$InnerBubbleR,"G"=>$InnerBubbleG,"B"=>$InnerBubbleB,"Alpha"=>$InnerBubbleAlpha);
- if ( $OuterBubbleR != VOID )
- $OuterColor = array("R"=>$OuterBubbleR,"G"=>$OuterBubbleG,"B"=>$OuterBubbleB,"Alpha"=>$OuterBubbleAlpha);
- else
- $OuterColor = array("R"=>$Palette[$ID]["R"]+20,"G"=>$Palette[$ID]["G"]+20,"B"=>$Palette[$ID]["B"]+20,"Alpha"=>$Palette[$ID]["Alpha"]);
-
- /* Loop to the starting points if asked */
- if ( $LineLoopStart && $DrawLines )
- $Object->drawLine($Points[count($Points)-1][0],$Points[count($Points)-1][1],$Points[0][0],$Points[0][1],$Color);
-
- /* Draw the lines & points */
- for($i=0; $i<count($Points);$i++)
- {
- if ( $DrawLines && $i < count($Points)-1)
- $Object->drawLine($Points[$i][0],$Points[$i][1],$Points[$i+1][0],$Points[$i+1][1],$Color);
-
- if ( $DrawPoints )
- $Object->drawFilledCircle($Points[$i][0],$Points[$i][1],$PointRadius,$Color);
-
- if ( $WriteValuesInBubble && $WriteValues )
- {
- $TxtPos = $this->pChartObject->getTextBox($Points[$i][0],$Points[$i][1],$ValueFontName,$ValueFontSize,0,$Points[$i][2]);
- $Radius = floor(($TxtPos[1]["X"] - $TxtPos[0]["X"] + $ValuePadding*2)/2);
-
- $this->pChartObject->drawFilledCircle($Points[$i][0],$Points[$i][1],$Radius+$OuterBubbleRadius,$OuterColor);
- $this->pChartObject->drawFilledCircle($Points[$i][0],$Points[$i][1],$Radius,$InnerColor);
- }
-
- if ( $WriteValues )
- $this->pChartObject->drawText($Points[$i][0]-1,$Points[$i][1]-1,$Points[$i][2],$TextSettings);
- }
- }
- }
- }
-?> \ No newline at end of file
diff --git a/Under-Testing/Website/class/pScatter.class.php b/Under-Testing/Website/class/pScatter.class.php
deleted file mode 100644
index 55ef1c7..0000000
--- a/Under-Testing/Website/class/pScatter.class.php
+++ /dev/null
@@ -1,954 +0,0 @@
-<?php
- /*
- pScatter - class to draw scatter charts
-
- Version : 2.1.2
- Made by : Jean-Damien POGOLOTTI
- Last Update : 03/08/11
-
- 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("SCATTER_MISSING_X_SERIE" , 190001);
- define("SCATTER_MISSING_Y_SERIE" , 190002);
-
- /* pScatter class definition */
- class pScatter
- {
- var $pChartObject;
- var $pDataObject;
-
- /* Class creator */
- function pScatter($pChartObject,$pDataObject)
- {
- $this->pChartObject = $pChartObject;
- $this->pDataObject = $pDataObject;
- }
-
- /* Prepare the scale */
- function drawScatterScale($Format="")
- {
- $Mode = isset($Format["Mode"]) ? $Format["Mode"] : SCALE_MODE_FLOATING;
- $Floating = isset($Format["Floating"]) ? $Format["Floating"] : FALSE;
- $XLabelsRotation = isset($Format["XLabelsRotation"]) ? $Format["XLabelsRotation"] : 90;
- $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"] : 0;
- $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"] : ALL;
- $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;
- $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"] : 10;
- $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"] : 10;
-
- /* Check if we have at least both one X and Y axis */
- $GotXAxis = FALSE; $GotYAxis = FALSE;
- foreach($this->pDataObject->Data["Axis"] as $AxisID => $AxisSettings)
- {
- if ( $AxisSettings["Identity"] == AXIS_X ) { $GotXAxis = TRUE; }
- if ( $AxisSettings["Identity"] == AXIS_Y ) { $GotYAxis = TRUE; }
- }
- if ( !$GotXAxis ) { return(SCATTER_MISSING_X_SERIE); }
- if ( !$GotYAxis ) { return(SCATTER_MISSING_Y_SERIE); }
-
- /* Skip a NOTICE event in case of an empty array */
- if ( $DrawYLines == NONE ) { $DrawYLines = array("zarma"=>"31"); }
-
- $Data = $this->pDataObject->getData();
-
- foreach($Data["Axis"] as $AxisID => $AxisSettings)
- {
- if ( $AxisSettings["Identity"] == AXIS_X)
- { $Width = $this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1 - $XMargin*2; }
- else
- { $Width = $this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1 - $YMargin*2; }
-
- $AxisMin = ABSOLUTE_MAX; $AxisMax = OUT_OF_SIGHT;
- if ( $Mode == SCALE_MODE_FLOATING )
- {
- foreach($Data["Series"] as $SerieID => $SerieParameter)
- {
- if ( $SerieParameter["Axis"] == $AxisID && $Data["Series"][$SerieID]["isDrawable"] )
- {
- $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;
- }
- 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(); }
- }
-
- /* Full manual scale */
- if ( isset($ManualScale[$AxisID]["Rows"]) && isset($ManualScale[$AxisID]["RowHeight"]) )
- $Scale = array("Rows"=>$ManualScale[$AxisID]["Rows"],"RowHeight"=>$ManualScale[$AxisID]["RowHeight"],"XMin"=>$ManualScale[$AxisID]["Min"],"XMax"=>$ManualScale[$AxisID]["Max"]);
- else
- {
- $MaxDivs = floor($Width/$MinDivHeight);
- $Scale = $this->pChartObject->computeScale($Data["Axis"][$AxisID]["Min"],$Data["Axis"][$AxisID]["Max"],$MaxDivs,$Factors,$AxisID);
- }
-
- $Data["Axis"][$AxisID]["Margin"] = $AxisSettings["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; }
- }
-
- /* Get the default font color */
- $FontColorRo = $this->pChartObject->FontColorR; $FontColorGo = $this->pChartObject->FontColorG; $FontColorBo = $this->pChartObject->FontColorB;
-
- /* Set the original boundaries */
- $AxisPos["L"] = $this->pChartObject->GraphAreaX1; $AxisPos["R"] = $this->pChartObject->GraphAreaX2; $AxisPos["T"] = $this->pChartObject->GraphAreaY1; $AxisPos["B"] = $this->pChartObject->GraphAreaY2;
-
- foreach($Data["Axis"] as $AxisID => $AxisSettings)
- {
- if ( isset($AxisSettings["Color"]) )
- {
- $AxisR = $AxisSettings["Color"]["R"]; $AxisG = $AxisSettings["Color"]["G"]; $AxisB = $AxisSettings["Color"]["B"];
- $TickR = $AxisSettings["Color"]["R"]; $TickG = $AxisSettings["Color"]["G"]; $TickB = $AxisSettings["Color"]["B"];
- $this->pChartObject->setFontProperties(array("R"=>$AxisSettings["Color"]["R"],"G"=>$AxisSettings["Color"]["G"],"B"=>$AxisSettings["Color"]["B"]));
- }
- else
- {
- $AxisR = $AxisRo; $AxisG = $AxisGo; $AxisB = $AxisBo;
- $TickR = $TickRo; $TickG = $TickGo; $TickB = $TickBo;
- $this->pChartObject->setFontProperties(array("R"=>$FontColorRo,"G"=>$FontColorGo,"B"=>$FontColorBo));
- }
-
- $LastValue = "w00t"; $ID = 1;
- if ( $AxisSettings["Identity"] == AXIS_X )
- {
- if ( $AxisSettings["Position"] == AXIS_POSITION_BOTTOM )
- {
- if ( $XLabelsRotation == 0 ) { $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $LabelOffset = 2; }
- if ( $XLabelsRotation > 0 && $XLabelsRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $LabelOffset = 5; }
- if ( $XLabelsRotation == 180 ) { $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $LabelOffset = 5; }
- if ( $XLabelsRotation > 180 && $XLabelsRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $LabelOffset = 2; }
-
- if ( $Floating )
- { $FloatingOffset = $YMargin; $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1+$AxisSettings["Margin"],$AxisPos["B"],$this->pChartObject->GraphAreaX2-$AxisSettings["Margin"],$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
- else
- { $FloatingOffset = 0; $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1,$AxisPos["B"],$this->pChartObject->GraphAreaX2,$AxisPos["B"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
-
- if ( $DrawArrows ) { $this->pChartObject->drawArrow($this->pChartObject->GraphAreaX2-$AxisSettings["Margin"],$AxisPos["B"],$this->pChartObject->GraphAreaX2+($ArrowSize*2),$AxisPos["B"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
-
- $Width = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) - $AxisSettings["Margin"]*2;
- $Step = $Width / $AxisSettings["Rows"]; $SubTicksSize = $Step /2; $MaxBottom = $AxisPos["B"];
- $LastX = NULL;
- for($i=0;$i<=$AxisSettings["Rows"];$i++)
- {
- $XPos = $this->pChartObject->GraphAreaX1 + $AxisSettings["Margin"] + $Step*$i;
- $YPos = $AxisPos["B"];
- $Value = $this->pChartObject->scaleFormat($AxisSettings["ScaleMin"] + $AxisSettings["RowHeight"]*$i,$AxisSettings["Display"],$AxisSettings["Format"],$AxisSettings["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 && ( $DrawXLines == ALL || in_array($AxisID,$DrawXLines) )) { $this->pChartObject->drawFilledRectangle($LastX,$this->pChartObject->GraphAreaY1+$FloatingOffset,$XPos,$this->pChartObject->GraphAreaY2-$FloatingOffset,$BGColor); }
-
- if ( $DrawXLines == ALL || in_array($AxisID,$DrawXLines) ) { $this->pChartObject->drawLine($XPos,$this->pChartObject->GraphAreaY1+$FloatingOffset,$XPos,$this->pChartObject->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
- if ( $DrawSubTicks && $i != $AxisSettings["Rows"] )
- $this->pChartObject->drawLine($XPos+$SubTicksSize,$YPos-$InnerSubTickWidth,$XPos+$SubTicksSize,$YPos+$OuterSubTickWidth,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
-
- $this->pChartObject->drawLine($XPos,$YPos-$InnerTickWidth,$XPos,$YPos+$OuterTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
- $Bounds = $this->pChartObject->drawText($XPos,$YPos+$OuterTickWidth+$LabelOffset,$Value,array("Angle"=>$XLabelsRotation,"Align"=>$LabelAlign));
- $TxtBottom = $YPos+2+$OuterTickWidth+2+($Bounds[0]["Y"]-$Bounds[2]["Y"]);
- $MaxBottom = max($MaxBottom,$TxtBottom);
-
- $LastX = $XPos;
- }
-
- if ( isset($AxisSettings["Name"]) )
- {
- $YPos = $MaxBottom+2;
- $XPos = $this->pChartObject->GraphAreaX1+($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1)/2;
- $Bounds = $this->pChartObject->drawText($XPos,$YPos,$AxisSettings["Name"],array("Align"=>TEXT_ALIGN_TOPMIDDLE));
- $MaxBottom = $Bounds[0]["Y"];
-
- $this->pDataObject->Data["GraphArea"]["Y2"] = $MaxBottom + $this->pChartObject->FontSize;
- }
-
- $AxisPos["B"] = $MaxBottom + $ScaleSpacing;
- }
- elseif ( $AxisSettings["Position"] == AXIS_POSITION_TOP )
- {
- if ( $XLabelsRotation == 0 ) { $LabelAlign = TEXT_ALIGN_BOTTOMMIDDLE; $LabelOffset = 2; }
- if ( $XLabelsRotation > 0 && $XLabelsRotation < 190 ) { $LabelAlign = TEXT_ALIGN_MIDDLELEFT; $LabelOffset = 2; }
- if ( $XLabelsRotation == 180 ) { $LabelAlign = TEXT_ALIGN_TOPMIDDLE; $LabelOffset = 5; }
- if ( $XLabelsRotation > 180 && $SLabelxRotation < 360 ) { $LabelAlign = TEXT_ALIGN_MIDDLERIGHT; $LabelOffset = 5; }
-
- if ( $Floating )
- { $FloatingOffset = $YMargin; $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1+$AxisSettings["Margin"],$AxisPos["T"],$this->pChartObject->GraphAreaX2-$AxisSettings["Margin"],$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
- else
- { $FloatingOffset = 0; $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1,$AxisPos["T"],$this->pChartObject->GraphAreaX2,$AxisPos["T"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
-
- if ( $DrawArrows ) { $this->pChartObject->drawArrow($this->pChartObject->GraphAreaX2-$AxisSettings["Margin"],$AxisPos["T"],$this->pChartObject->GraphAreaX2+($ArrowSize*2),$AxisPos["T"],array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
-
- $Width = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) - $AxisSettings["Margin"]*2;
- $Step = $Width / $AxisSettings["Rows"]; $SubTicksSize = $Step /2; $MinTop = $AxisPos["T"];
- $LastX = NULL;
- for($i=0;$i<=$AxisSettings["Rows"];$i++)
- {
- $XPos = $this->pChartObject->GraphAreaX1 + $AxisSettings["Margin"] + $Step*$i;
- $YPos = $AxisPos["T"];
- $Value = $this->pChartObject->scaleFormat($AxisSettings["ScaleMin"] + $AxisSettings["RowHeight"]*$i,$AxisSettings["Display"],$AxisSettings["Format"],$AxisSettings["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 && ( $DrawXLines == ALL || in_array($AxisID,$DrawXLines) )) { $this->pChartObject->drawFilledRectangle($LastX,$this->pChartObject->GraphAreaY1+$FloatingOffset,$XPos,$this->pChartObject->GraphAreaY2-$FloatingOffset,$BGColor); }
-
- if ( $DrawXLines == ALL || in_array($AxisID,$DrawXLines) ) { $this->pChartObject->drawLine($XPos,$this->pChartObject->GraphAreaY1+$FloatingOffset,$XPos,$this->pChartObject->GraphAreaY2-$FloatingOffset,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
-
- if ( $DrawSubTicks && $i != $AxisSettings["Rows"] )
- $this->pChartObject->drawLine($XPos+$SubTicksSize,$YPos-$OuterSubTickWidth,$XPos+$SubTicksSize,$YPos+$InnerSubTickWidth,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
-
- $this->pChartObject->drawLine($XPos,$YPos-$OuterTickWidth,$XPos,$YPos+$InnerTickWidth,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
- $Bounds = $this->pChartObject->drawText($XPos,$YPos-$OuterTickWidth-$LabelOffset,$Value,array("Angle"=>$XLabelsRotation,"Align"=>$LabelAlign));
- $TxtBox = $YPos-$OuterTickWidth-4-($Bounds[0]["Y"]-$Bounds[2]["Y"]);
- $MinTop = min($MinTop,$TxtBox);
-
- $LastX = $XPos;
- }
-
- if ( isset($AxisSettings["Name"]) )
- {
- $YPos = $MinTop-2;
- $XPos = $this->pChartObject->GraphAreaX1+($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1)/2;
- $Bounds = $this->pChartObject->drawText($XPos,$YPos,$AxisSettings["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
- $MinTop = $Bounds[2]["Y"];
-
- $this->pDataObject->Data["GraphArea"]["Y1"] = $MinTop;
- }
-
- $AxisPos["T"] = $MinTop - $ScaleSpacing;
- }
- }
- elseif ( $AxisSettings["Identity"] == AXIS_Y )
- {
- if ( $AxisSettings["Position"] == AXIS_POSITION_LEFT )
- {
-
- if ( $Floating )
- { $FloatingOffset = $XMargin; $this->pChartObject->drawLine($AxisPos["L"],$this->pChartObject->GraphAreaY1+$AxisSettings["Margin"],$AxisPos["L"],$this->pChartObject->GraphAreaY2-$AxisSettings["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
- else
- { $FloatingOffset = 0; $this->pChartObject->drawLine($AxisPos["L"],$this->pChartObject->GraphAreaY1,$AxisPos["L"],$this->pChartObject->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
-
- if ( $DrawArrows ) { $this->pChartObject->drawArrow($AxisPos["L"],$this->pChartObject->GraphAreaY1+$AxisSettings["Margin"],$AxisPos["L"],$this->pChartObject->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
-
- $Height = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) - $AxisSettings["Margin"]*2;
- $Step = $Height / $AxisSettings["Rows"]; $SubTicksSize = $Step /2; $MinLeft = $AxisPos["L"];
- $LastY = NULL;
- for($i=0;$i<=$AxisSettings["Rows"];$i++)
- {
- $YPos = $this->pChartObject->GraphAreaY2 - $AxisSettings["Margin"] - $Step*$i;
- $XPos = $AxisPos["L"];
- $Value = $this->pChartObject->scaleFormat($AxisSettings["ScaleMin"] + $AxisSettings["RowHeight"]*$i,$AxisSettings["Display"],$AxisSettings["Format"],$AxisSettings["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->pChartObject->drawFilledRectangle($this->pChartObject->GraphAreaX1+$FloatingOffset,$LastY,$this->pChartObject->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); }
-
- if ( ($YPos != $this->pChartObject->GraphAreaY1 && $YPos != $this->pChartObject->GraphAreaY2) && ($DrawYLines == ALL || in_array($AxisID,$DrawYLines) )) { $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1+$FloatingOffset,$YPos,$this->pChartObject->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
-
- if ( $DrawSubTicks && $i != $AxisSettings["Rows"] )
- $this->pChartObject->drawLine($XPos-$OuterSubTickWidth,$YPos-$SubTicksSize,$XPos+$InnerSubTickWidth,$YPos-$SubTicksSize,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
-
- $this->pChartObject->drawLine($XPos-$OuterTickWidth,$YPos,$XPos+$InnerTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
- $Bounds = $this->pChartObject->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($AxisSettings["Name"]) )
- {
- $XPos = $MinLeft-2;
- $YPos = $this->pChartObject->GraphAreaY1+($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1)/2;
- $Bounds = $this->pChartObject->drawText($XPos,$YPos,$AxisSettings["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>90));
- $MinLeft = $Bounds[2]["X"];
-
- $this->pDataObject->Data["GraphArea"]["X1"] = $MinLeft;
- }
-
- $AxisPos["L"] = $MinLeft - $ScaleSpacing;
- }
- elseif ( $AxisSettings["Position"] == AXIS_POSITION_RIGHT )
- {
-
- if ( $Floating )
- { $FloatingOffset = $XMargin; $this->pChartObject->drawLine($AxisPos["R"],$this->pChartObject->GraphAreaY1+$AxisSettings["Margin"],$AxisPos["R"],$this->pChartObject->GraphAreaY2-$AxisSettings["Margin"],array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
- else
- { $FloatingOffset = 0; $this->pChartObject->drawLine($AxisPos["R"],$this->pChartObject->GraphAreaY1,$AxisPos["R"],$this->pChartObject->GraphAreaY2,array("R"=>$AxisR,"G"=>$AxisG,"B"=>$AxisB,"Alpha"=>$AxisAlpha)); }
-
- if ( $DrawArrows ) { $this->pChartObject->drawArrow($AxisPos["R"],$this->pChartObject->GraphAreaY1+$AxisSettings["Margin"],$AxisPos["R"],$this->pChartObject->GraphAreaY1-($ArrowSize*2),array("FillR"=>$AxisR,"FillG"=>$AxisG,"FillB"=>$AxisB,"Size"=>$ArrowSize)); }
-
- $Height = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) - $AxisSettings["Margin"]*2;
- $Step = $Height / $AxisSettings["Rows"]; $SubTicksSize = $Step /2; $MaxLeft = $AxisPos["R"];
- $LastY = NULL;
- for($i=0;$i<=$AxisSettings["Rows"];$i++)
- {
- $YPos = $this->pChartObject->GraphAreaY2 - $AxisSettings["Margin"] - $Step*$i;
- $XPos = $AxisPos["R"];
- $Value = $this->pChartObject->scaleFormat($AxisSettings["ScaleMin"] + $AxisSettings["RowHeight"]*$i,$AxisSettings["Display"],$AxisSettings["Format"],$AxisSettings["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->pChartObject->drawFilledRectangle($this->pChartObject->GraphAreaX1+$FloatingOffset,$LastY,$this->pChartObject->GraphAreaX2-$FloatingOffset,$YPos,$BGColor); }
-
- if ( ($YPos != $this->pChartObject->GraphAreaY1 && $YPos != $this->pChartObject->GraphAreaY2) && ($DrawYLines == ALL || in_array($AxisID,$DrawYLines)) ) { $this->pChartObject->drawLine($this->pChartObject->GraphAreaX1+$FloatingOffset,$YPos,$this->pChartObject->GraphAreaX2-$FloatingOffset,$YPos,array("R"=>$GridR,"G"=>$GridG,"B"=>$GridB,"Alpha"=>$GridAlpha,"Ticks"=>$GridTicks)); }
-
- if ( $DrawSubTicks && $i != $AxisSettings["Rows"] )
- $this->pChartObject->drawLine($XPos-$InnerSubTickWidth,$YPos-$SubTicksSize,$XPos+$OuterSubTickWidth,$YPos-$SubTicksSize,array("R"=>$SubTickR,"G"=>$SubTickG,"B"=>$SubTickB,"Alpha"=>$SubTickAlpha));
-
- $this->pChartObject->drawLine($XPos-$InnerTickWidth,$YPos,$XPos+$OuterTickWidth,$YPos,array("R"=>$TickR,"G"=>$TickG,"B"=>$TickB,"Alpha"=>$TickAlpha));
- $Bounds = $this->pChartObject->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($AxisSettings["Name"]) )
- {
- $XPos = $MaxLeft+6;
- $YPos = $this->pChartObject->GraphAreaY1+($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1)/2;
- $Bounds = $this->pChartObject->drawText($XPos,$YPos,$AxisSettings["Name"],array("Align"=>TEXT_ALIGN_BOTTOMMIDDLE,"Angle"=>270));
- $MaxLeft = $Bounds[2]["X"];
-
- $this->pDataObject->Data["GraphArea"]["X2"] = $MaxLeft + $this->pChartObject->FontSize;
- }
-
- $AxisPos["R"] = $MaxLeft + $ScaleSpacing;
- }
- }
- }
-
- $this->pDataObject->saveAxisConfig($Data["Axis"]);
- }
-
- /* Draw a scatter plot chart */
- function drawScatterPlotChart($Format=NULL)
- {
- $PlotSize = isset($Format["PlotSize"]) ? $Format["PlotSize"] : 3;
- $PlotBorder = isset($Format["PlotBorder"]) ? $Format["PlotBorder"] : FALSE;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 250;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 250;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 250;
- $BorderAlpha = isset($Format["BorderAlpha"]) ? $Format["BorderAlpha"] : 30;
- $BorderSize = isset($Format["BorderSize"]) ? $Format["BorderSize"] : 1;
- $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
- $ImageMapTitle = isset($Format["ImageMapTitle"]) ? $Format["ImageMapTitle"] : NULL;
- $ImageMapPrecision = isset($Format["ImageMapPrecision"]) ? $Format["ImageMapPrecision"] : 2;
-
- $Data = $this->pDataObject->getData();
- $Palette = $this->pDataObject->getPalette();
-
- $BorderColor = array("R"=>$BorderR,"G"=>$BorderG,"B"=>$BorderB,"Alpha"=>$BorderAlpha);
-
- foreach($Data["ScatterSeries"] as $Key => $Series)
- {
- if ( $Series["isDrawable"] == TRUE )
- {
- $SerieX = $Series["X"]; $SerieValuesX = $Data["Series"][$SerieX]["Data"]; $SerieXAxis = $Data["Series"][$SerieX]["Axis"];
- $SerieY = $Series["Y"]; $SerieValuesY = $Data["Series"][$SerieY]["Data"]; $SerieYAxis = $Data["Series"][$SerieY]["Axis"];
-
- if ( $ImageMapTitle == NULL ) { $Description = $Data["Series"][$Series["X"]]["Description"]." / ".$Data["Series"][$Series["Y"]]["Description"]; } else { $Description = $ImageMapTitle; }
-
- if ( isset($Series["Picture"]) && $Series["Picture"] != "" )
- { $Picture = $Series["Picture"]; list($PicWidth,$PicHeight,$PicType) = $this->pChartObject->getPicInfo($Picture); }
- else
- { $Picture = NULL; }
-
- $PosArrayX = $this->getPosArray($SerieValuesX,$SerieXAxis);
- if ( !is_array($PosArrayX) ) { $Value = $PosArrayX; $PosArrayX = ""; $PosArrayX[0] = $Value; }
- $PosArrayY = $this->getPosArray($SerieValuesY,$SerieYAxis);
- if ( !is_array($PosArrayY) ) { $Value = $PosArrayY; $PosArrayY = ""; $PosArrayY[0] = $Value; }
-
- $Color = array("R"=>$Series["Color"]["R"],"G"=>$Series["Color"]["G"],"B"=>$Series["Color"]["B"],"Alpha"=>$Series["Color"]["Alpha"]);
-
- foreach($PosArrayX as $Key => $Value)
- {
- $X = $Value; $Y = $PosArrayY[$Key];
-
- if ( $X != VOID && $Y != VOID )
- {
- $RealValue = round($Data["Series"][$Series["X"]]["Data"][$Key],2)." / ".round($Data["Series"][$Series["Y"]]["Data"][$Key],2);
- if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".floor($PlotSize+$BorderSize),$this->pChartObject->toHTMLColor($Series["Color"]["R"],$Series["Color"]["G"],$Series["Color"]["B"]),$Description,$RealValue); }
-
- if( isset($Series["Shape"]) )
- { $this->pChartObject->drawShape($X,$Y,$Series["Shape"],$PlotSize,$PlotBorder,$BorderSize,$Series["Color"]["R"],$Series["Color"]["G"],$Series["Color"]["B"],$Series["Color"]["Alpha"],$BorderR,$BorderG,$BorderB,$BorderAlpha); }
- elseif ( $Picture == NULL )
- {
- if ( $PlotBorder ) { $this->pChartObject->drawFilledCircle($X,$Y,$PlotSize+$BorderSize,$BorderColor); }
- $this->pChartObject->drawFilledCircle($X,$Y,$PlotSize,$Color);
- }
- else
- { $this->pChartObject->drawFromPicture($PicType,$Picture,$X-$PicWidth/2,$Y-$PicHeight/2); }
- }
- }
- }
- }
- }
-
- /* Draw a scatter line chart */
- function drawScatterLineChart($Format=NULL)
- {
- $Data = $this->pDataObject->getData();
- $Palette = $this->pDataObject->getPalette();
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
- $ImageMapTitle = isset($Format["ImageMapTitle"]) ? $Format["ImageMapTitle"] : NULL;
- $ImageMapPlotSize = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 10;
- $ImageMapPrecision = isset($Format["ImageMapPrecision"]) ? $Format["ImageMapPrecision"] : 2;
-
- /* Parse all the series to draw */
- foreach($Data["ScatterSeries"] as $Key => $Series)
- {
- if ( $Series["isDrawable"] == TRUE )
- {
- $SerieX = $Series["X"]; $SerieValuesX = $Data["Series"][$SerieX]["Data"]; $SerieXAxis = $Data["Series"][$SerieX]["Axis"];
- $SerieY = $Series["Y"]; $SerieValuesY = $Data["Series"][$SerieY]["Data"]; $SerieYAxis = $Data["Series"][$SerieY]["Axis"];
- $Ticks = $Series["Ticks"];
- $Weight = $Series["Weight"];
-
- if ( $ImageMapTitle == NULL ) { $Description = $Data["Series"][$Series["X"]]["Description"]." / ".$Data["Series"][$Series["Y"]]["Description"]; } else { $Description = $ImageMapTitle; }
-
- $PosArrayX = $this->getPosArray($SerieValuesX,$SerieXAxis);
- if ( !is_array($PosArrayX) ) { $Value = $PosArrayX; $PosArrayX = ""; $PosArrayX[0] = $Value; }
- $PosArrayY = $this->getPosArray($SerieValuesY,$SerieYAxis);
- if ( !is_array($PosArrayY) ) { $Value = $PosArrayY; $PosArrayY = ""; $PosArrayY[0] = $Value; }
-
- $Color = array("R"=>$Series["Color"]["R"],"G"=>$Series["Color"]["G"],"B"=>$Series["Color"]["B"],"Alpha"=>$Series["Color"]["Alpha"]);
- if ( $Ticks != 0 ) { $Color["Ticks"] = $Ticks; }
- if ( $Weight != 0 ) { $Color["Weight"] = $Weight; }
-
- $LastX = VOID; $LastY = VOID;
- foreach($PosArrayX as $Key => $Value)
- {
- $X = $Value; $Y = $PosArrayY[$Key];
-
- if ( $X != VOID && $Y != VOID )
- {
- $RealValue = round($Data["Series"][$Series["X"]]["Data"][$Key],2)." / ".round($Data["Series"][$Series["Y"]]["Data"][$Key],2);
- if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->pChartObject->toHTMLColor($Series["Color"]["R"],$Series["Color"]["G"],$Series["Color"]["B"]),$Description,$RealValue); }
- }
-
- if ( $X != VOID && $Y != VOID && $LastX != VOID && $LastY != VOID)
- $this->pChartObject->drawLine($LastX,$LastY,$X,$Y,$Color);
-
- $LastX = $X; $LastY = $Y;
- }
- }
- }
- }
-
- /* Draw a scatter spline chart */
- function drawScatterSplineChart($Format=NULL)
- {
- $Data = $this->pDataObject->getData();
- $Palette = $this->pDataObject->getPalette();
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
- $ImageMapTitle = isset($Format["ImageMapTitle"]) ? $Format["ImageMapTitle"] : NULL;
- $ImageMapPlotSize = isset($Format["ImageMapPlotSize"]) ? $Format["ImageMapPlotSize"] : 10;
- $ImageMapPrecision = isset($Format["ImageMapPrecision"]) ? $Format["ImageMapPrecision"] : 2;
-
- foreach($Data["ScatterSeries"] as $Key => $Series)
- {
- if ( $Series["isDrawable"] == TRUE )
- {
- $SerieX = $Series["X"]; $SerieValuesX = $Data["Series"][$SerieX]["Data"]; $SerieXAxis = $Data["Series"][$SerieX]["Axis"];
- $SerieY = $Series["Y"]; $SerieValuesY = $Data["Series"][$SerieY]["Data"]; $SerieYAxis = $Data["Series"][$SerieY]["Axis"];
- $Ticks = $Series["Ticks"];
- $Weight = $Series["Weight"];
-
- if ( $ImageMapTitle == NULL ) { $Description = $Data["Series"][$Series["X"]]["Description"]." / ".$Data["Series"][$Series["Y"]]["Description"]; } else { $Description = $ImageMapTitle; }
-
- $PosArrayX = $this->getPosArray($SerieValuesX,$SerieXAxis);
- if ( !is_array($PosArrayX) ) { $Value = $PosArrayX; $PosArrayX = ""; $PosArrayX[0] = $Value; }
- $PosArrayY = $this->getPosArray($SerieValuesY,$SerieYAxis);
- if ( !is_array($PosArrayY) ) { $Value = $PosArrayY; $PosArrayY = ""; $PosArrayY[0] = $Value; }
-
- $SplineSettings = array("R"=>$Series["Color"]["R"],"G"=>$Series["Color"]["G"],"B"=>$Series["Color"]["B"],"Alpha"=>$Series["Color"]["Alpha"]);
- if ( $Ticks != 0 ) { $SplineSettings["Ticks"] = $Ticks; }
- if ( $Weight != 0 ) { $SplineSettings["Weight"] = $Weight; }
-
- $LastX = VOID; $LastY = VOID; $WayPoints = ""; $Forces = "";
- foreach($PosArrayX as $Key => $Value)
- {
- $X = $Value; $Y = $PosArrayY[$Key];
- $Force = $this->pChartObject->getLength($LastX,$LastY,$X,$Y)/5;
-
- if ( $X != VOID && $Y != VOID )
- {
- $RealValue = round($Data["Series"][$Series["X"]]["Data"][$Key],2)." / ".round($Data["Series"][$Series["Y"]]["Data"][$Key],2);
- if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("CIRCLE",floor($X).",".floor($Y).",".$ImageMapPlotSize,$this->pChartObject->toHTMLColor($Series["Color"]["R"],$Series["Color"]["G"],$Series["Color"]["B"]),$Description,$RealValue); }
- }
-
- if ( $X != VOID && $Y != VOID )
- { $WayPoints[] = array($X,$Y); $Forces[] = $Force; }
-
- if ( $Y == VOID || $X == VOID )
- { $SplineSettings["Forces"] = $Forces; $this->pChartObject->drawSpline($WayPoints,$SplineSettings); $WayPoints = ""; $Forces = "";}
-
- $LastX = $X; $LastY = $Y;
- }
- $SplineSettings["Forces"] = $Forces;
- $this->pChartObject->drawSpline($WayPoints,$SplineSettings);
- }
- }
- }
-
- /* Return the scaled plot position */
- function getPosArray($Values,$AxisID)
- {
- $Data = $this->pDataObject->getData();
-
- if ( !is_array($Values) ) { $Values = array($Values); }
-
- if ( $Data["Axis"][$AxisID]["Identity"] == AXIS_X )
- {
- $Height = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) - $Data["Axis"][$AxisID]["Margin"]*2;
- $ScaleHeight = $Data["Axis"][$AxisID]["ScaleMax"] - $Data["Axis"][$AxisID]["ScaleMin"];
- $Step = $Height / $ScaleHeight;
-
- $Result = "";
- foreach($Values as $Key => $Value)
- {
- if ( $Value == VOID )
- $Result[] = VOID;
- else
- $Result[] = $this->pChartObject->GraphAreaX1 + $Data["Axis"][$AxisID]["Margin"] + ($Step * ($Value-$Data["Axis"][$AxisID]["ScaleMin"]));
- }
-
- if ( count($Result) == 1 ) { return($Result[0]); } else { return($Result); }
- }
- else
- {
- $Height = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) - $Data["Axis"][$AxisID]["Margin"]*2;
- $ScaleHeight = $Data["Axis"][$AxisID]["ScaleMax"] - $Data["Axis"][$AxisID]["ScaleMin"];
- $Step = $Height / $ScaleHeight;
-
- $Result = "";
- foreach($Values as $Key => $Value)
- {
- if ( $Value == VOID )
- $Result[] = VOID;
- else
- $Result[] = $this->pChartObject->GraphAreaY2 - $Data["Axis"][$AxisID]["Margin"] - ($Step * ($Value-$Data["Axis"][$AxisID]["ScaleMin"]));
- }
-
- if ( count($Result) == 1 ) { return($Result[0]); } else { return($Result); }
- }
- }
-
- /* Draw the legend of the active series */
- function drawScatterLegend($X,$Y,$Format="")
- {
- $Family = isset($Format["Family"]) ? $Format["Family"] : LEGEND_FAMILY_BOX;
- $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;
- $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->pDataObject->getData();
-
- foreach($Data["ScatterSeries"] as $Key => $Series)
- {
- if ( $Series["isDrawable"] == TRUE && isset($Series["Picture"]))
- {
- list($PicWidth,$PicHeight) = $this->pChartObject->getPicInfo($Series["Picture"]);
- if ( $IconAreaWidth < $PicWidth ) { $IconAreaWidth = $PicWidth; }
- if ( $IconAreaHeight < $PicHeight ) { $IconAreaHeight = $PicHeight; }
- }
- }
-
- $YStep = max($this->pChartObject->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["ScatterSeries"] as $Key => $Series)
- {
- if ( $Series["isDrawable"] == TRUE )
- {
- if ( $Mode == LEGEND_VERTICAL )
- {
- $BoxArray = $this->pChartObject->getTextBox($vX+$IconAreaWidth+4,$vY+$IconAreaHeight/2,$FontName,$FontSize,0,$Series["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/",$Series["Description"]);
- $vY = $vY + max($this->pChartObject->FontSize*count($Lines),$IconAreaHeight) + 5;
- }
- elseif ( $Mode == LEGEND_HORIZONTAL )
- {
- $Lines = preg_split("/\n/",$Series["Description"]);
- $Width = "";
- foreach($Lines as $Key => $Value)
- {
- $BoxArray = $this->pChartObject->getTextBox($vX+$IconAreaWidth+6,$Y+$IconAreaHeight/2+(($this->pChartObject->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->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->Shadow = FALSE;
- foreach($Data["ScatterSeries"] as $Key => $Series)
- {
- if ( $Series["isDrawable"] == TRUE )
- {
- $R = $Series["Color"]["R"]; $G = $Series["Color"]["G"]; $B = $Series["Color"]["B"];
- $Ticks = $Series["Ticks"]; $Weight = $Series["Weight"];
-
- if ( isset($Series["Picture"]) )
- {
- $Picture = $Series["Picture"];
- list($PicWidth,$PicHeight) = $this->pChartObject->getPicInfo($Picture);
- $PicX = $X+$IconAreaWidth/2; $PicY = $Y+$IconAreaHeight/2;
-
- $this->pChartObject->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->pChartObject->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->pChartObject->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->pChartObject->drawFilledCircle($X+1+$IconAreaWidth/2,$Y+1+$IconAreaHeight/2,min($IconAreaHeight/2,$IconAreaWidth/2),array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
- $this->pChartObject->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->pChartObject->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->pChartObject->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/",$Series["Description"]);
- foreach($Lines as $Key => $Value)
- $this->pChartObject->drawText($X+$IconAreaWidth+4,$Y+$IconAreaHeight/2+(($this->pChartObject->FontSize+3)*$Key),$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT));
-
- $Y=$Y+max($this->pChartObject->FontSize*count($Lines),$IconAreaHeight) + 5;
- }
- elseif ( $Mode == LEGEND_HORIZONTAL )
- {
- $Lines = preg_split("/\n/",$Series["Description"]);
- $Width = "";
- foreach($Lines as $Key => $Value)
- {
- $BoxArray = $this->pChartObject->drawText($X+$IconAreaWidth+4,$Y+$IconAreaHeight/2+(($this->pChartObject->FontSize+3)*$Key),$Value,array("R"=>$FontR,"G"=>$FontG,"B"=>$FontB,"Align"=>TEXT_ALIGN_MIDDLELEFT));
- $Width[] = $BoxArray[1]["X"];
- }
- $X=max($Width)+2+$XStep;
- }
- }
- }
-
- $this->Shadow = $RestoreShadow;
- }
-
- /* Get the legend box size */
- function getScatterLegendSize($Format="")
- {
- $FontName = isset($Format["FontName"]) ? $Format["FontName"] : $this->pChartObject->FontName;
- $FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : $this->pChartObject->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;
-
- $YStep = max($this->pChartObject->FontSize,$BoxSize) + 5;
- $XStep = $BoxSize + 5;
-
- $X=100; $Y=100;
-
- $Data = $this->pDataObject->getData();
-
- foreach($Data["ScatterSeries"] as $Key => $Series)
- {
- if ( $Series["isDrawable"] == TRUE && isset($Series["Picture"]))
- {
- list($PicWidth,$PicHeight) = $this->pChartObject->getPicInfo($Series["Picture"]);
- if ( $IconAreaWidth < $PicWidth ) { $IconAreaWidth = $PicWidth; }
- if ( $IconAreaHeight < $PicHeight ) { $IconAreaHeight = $PicHeight; }
- }
- }
-
- $YStep = max($this->pChartObject->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["ScatterSeries"] as $Key => $Series)
- {
- if ( $Series["isDrawable"] == TRUE )
- {
- if ( $Mode == LEGEND_VERTICAL )
- {
- $BoxArray = $this->pChartObject->getTextBox($vX+$IconAreaWidth+4,$vY+$IconAreaHeight/2,$FontName,$FontSize,0,$Series["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/",$Series["Description"]);
- $vY = $vY + max($this->pChartObject->FontSize*count($Lines),$IconAreaHeight) + 5;
- }
- elseif ( $Mode == LEGEND_HORIZONTAL )
- {
- $Lines = preg_split("/\n/",$Series["Description"]);
- $Width = "";
- foreach($Lines as $Key => $Value)
- {
- $BoxArray = $this->pChartObject->getTextBox($vX+$IconAreaWidth+6,$Y+$IconAreaHeight/2+(($this->pChartObject->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+$BoxSize) < $TopOffset ) { $Boundaries["B"] = $vY+$BoxSize+$TopOffset; }
-
- $Width = ($Boundaries["R"]+$Margin) - ($Boundaries["L"]-$Margin);
- $Height = ($Boundaries["B"]+$Margin) - ($Boundaries["T"]-$Margin);
-
- return(array("Width"=>$Width,"Height"=>$Height));
- }
-
- /* Draw the line of best fit */
- function drawScatterBestFit($Format="")
- {
- $Ticks = isset($Format["Ticks"]) ? $Format["Ticks"] : 0;
-
- $Data = $this->pDataObject->getData();
-
- foreach($Data["ScatterSeries"] as $Key => $Series)
- {
- if ( $Series["isDrawable"] == TRUE )
- {
- $SerieX = $Series["X"]; $SerieValuesX = $Data["Series"][$SerieX]["Data"]; $SerieXAxis = $Data["Series"][$SerieX]["Axis"];
- $SerieY = $Series["Y"]; $SerieValuesY = $Data["Series"][$SerieY]["Data"]; $SerieYAxis = $Data["Series"][$SerieY]["Axis"];
-
- $Color = array("R"=>$Series["Color"]["R"],"G"=>$Series["Color"]["G"],"B"=>$Series["Color"]["B"],"Alpha"=>$Series["Color"]["Alpha"]);
- $Color["Ticks"] = $Ticks;
-
- $PosArrayX = $Data["Series"][$Series["X"]]["Data"];
- $PosArrayY = $Data["Series"][$Series["Y"]]["Data"];
-
- $Sxy = 0; $Sx = 0; $Sy = 0; $Sxx = 0;
- foreach($PosArrayX as $Key => $Value)
- {
- $X = $Value; $Y = $PosArrayY[$Key];
-
- $Sxy = $Sxy + $X*$Y;
- $Sx = $Sx + $X;
- $Sy = $Sy + $Y;
- $Sxx = $Sxx + $X*$X;
- }
-
- $n = count($PosArrayX);
-
- if ((($n*$Sxx) == ($Sx*$Sx)))
- {
- $X1 = $this->getPosArray($Data["Axis"][$SerieXAxis]["ScaleMin"],$SerieXAxis);
- $X2 = $X1;
- $Y1 = $this->pChartObject->GraphAreaY1;
- $Y2 = $this->pChartObject->GraphAreaY2;
- }
- else
- {
- $M = (($n*$Sxy)-($Sx*$Sy)) / (($n*$Sxx)-($Sx*$Sx));
- $B = (($Sy)-($M*$Sx))/($n);
-
- $X1 = $this->getPosArray($Data["Axis"][$SerieXAxis]["ScaleMin"],$SerieXAxis);
- $Y1 = $this->getPosArray($M * $Data["Axis"][$SerieXAxis]["ScaleMin"] + $B,$SerieYAxis);
- $X2 = $this->getPosArray($Data["Axis"][$SerieXAxis]["ScaleMax"],$SerieXAxis);
- $Y2 = $this->getPosArray($M * $Data["Axis"][$SerieXAxis]["ScaleMax"] + $B,$SerieYAxis);
-
- $RealM = -($Y2-$Y1)/($X2-$X1);
-
- if ( $Y1 < $this->pChartObject->GraphAreaY1 ) { $X1 = $X1 + ($this->pChartObject->GraphAreaY1-$Y1/$RealM); $Y1 = $this->pChartObject->GraphAreaY1; }
- if ( $Y1 > $this->pChartObject->GraphAreaY2 ) { $X1 = $X1 + ($Y1-$this->pChartObject->GraphAreaY2)/$RealM; $Y1 = $this->pChartObject->GraphAreaY2; }
- if ( $Y2 < $this->pChartObject->GraphAreaY1 ) { $X2 = $X2 - ($this->pChartObject->GraphAreaY1-$Y2)/$RealM; $Y2 = $this->pChartObject->GraphAreaY1; }
- if ( $Y2 > $this->pChartObject->GraphAreaY2 ) { $X2 = $X2 - ($Y2-$this->pChartObject->GraphAreaY2)/$RealM; $Y2 = $this->pChartObject->GraphAreaY2; }
- }
-
- $this->pChartObject->drawLine($X1,$Y1,$X2,$Y2,$Color);
- }
- }
- }
-
- function writeScatterLabel($ScatterSerieID,$Points,$Format="")
- {
- $OverrideTitle = isset($Format["OverrideTitle"]) ? $Format["OverrideTitle"] : NULL;
- $DrawPoint = isset($Format["DrawPoint"]) ? $Format["DrawPoint"] : LABEL_POINT_BOX;
- $Decimals = isset($Format["Decimals"]) ? $Format["Decimals"] : NULL;
-
- $Data = $this->pDataObject->getData();
- $Palette = $this->pDataObject->getPalette();
-
- if ( !is_array($Points) ) { $Point = $Points; $Points = ""; $Points[0] = $Point; }
-
- if ( !isset($Data["ScatterSeries"][$ScatterSerieID]) )
- return(0);
-
- $Series = $Data["ScatterSeries"][$ScatterSerieID];
- $SerieX = $Series["X"]; $SerieValuesX = $Data["Series"][$SerieX]["Data"]; $SerieXAxis = $Data["Series"][$SerieX]["Axis"];
- $SerieY = $Series["Y"]; $SerieValuesY = $Data["Series"][$SerieY]["Data"]; $SerieYAxis = $Data["Series"][$SerieY]["Axis"];
-
- $PosArrayX = $this->getPosArray($SerieValuesX,$SerieXAxis);
- if ( !is_array($PosArrayX) ) { $Value = $PosArrayX; $PosArrayX = ""; $PosArrayX[0] = $Value; }
- $PosArrayY = $this->getPosArray($SerieValuesY,$SerieYAxis);
- if ( !is_array($PosArrayY) ) { $Value = $PosArrayY; $PosArrayY = ""; $PosArrayY[0] = $Value; }
-
- foreach($Points as $Key => $Point)
- {
- if ( isset($PosArrayX[$Point]) && isset($PosArrayY[$Point]) )
- {
- $X = floor($PosArrayX[$Point]);
- $Y = floor($PosArrayY[$Point]);
-
- if ( $DrawPoint == LABEL_POINT_CIRCLE )
- $this->pChartObject->drawFilledCircle($X,$Y,3,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
- elseif ( $DrawPoint == LABEL_POINT_BOX )
- $this->pChartObject->drawFilledRectangle($X-2,$Y-2,$X+2,$Y+2,array("R"=>255,"G"=>255,"B"=>255,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0));
-
- $Serie = "";
- $Serie["R"] = $Series["Color"]["R"];
- $Serie["G"] = $Series["Color"]["G"];
- $Serie["B"] = $Series["Color"]["B"];
- $Serie["Alpha"] = $Series["Color"]["Alpha"];
-
- $XAxisMode = $Data["Axis"][$SerieXAxis]["Display"];
- $XAxisFormat = $Data["Axis"][$SerieXAxis]["Format"];
- $XAxisUnit = $Data["Axis"][$SerieXAxis]["Unit"];
- if ( $Decimals == NULL ) { $XValue = $SerieValuesX[$Point]; } else { $XValue = round($SerieValuesX[$Point],$Decimals); }
- $XValue = $this->pChartObject->scaleFormat($XValue,$XAxisMode,$XAxisFormat,$XAxisUnit);
-
- $YAxisMode = $Data["Axis"][$SerieYAxis]["Display"];
- $YAxisFormat = $Data["Axis"][$SerieYAxis]["Format"];
- $YAxisUnit = $Data["Axis"][$SerieYAxis]["Unit"];
- if ( $Decimals == NULL ) { $YValue = $SerieValuesY[$Point]; } else { $YValue = round($SerieValuesY[$Point],$Decimals); }
- $YValue = $this->pChartObject->scaleFormat($YValue,$YAxisMode,$YAxisFormat,$YAxisUnit);
-
- $Caption = $XValue." / ".$YValue;
-
- if ( isset($Series["Description"]) )
- $Description = $Series["Description"];
- else
- $Description = "No description";
-
- $Series = "";
- $Series[] = array("Format"=>$Serie,"Caption"=>$Caption);
-
- $this->pChartObject->drawLabelBox($X,$Y-3,$Description,$Series,$Format);
- }
- }
- }
- }
-?> \ No newline at end of file
diff --git a/Under-Testing/Website/class/pSplit.class.php b/Under-Testing/Website/class/pSplit.class.php
deleted file mode 100644
index 0a62c3d..0000000
--- a/Under-Testing/Website/class/pSplit.class.php
+++ /dev/null
@@ -1,131 +0,0 @@
-<?php
- /*
- pSplit - class to draw spline splitted charts
-
- Version : 2.1.2
- Made by : Jean-Damien POGOLOTTI
- Last Update : 03/08/11
-
- 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("TEXT_POS_TOP" , 690001);
- define("TEXT_POS_RIGHT" , 690002);
-
- /* pSplit class definition */
- class pSplit
- {
- var $pChartObject;
-
- /* Class creator */
- function pSplit()
- { }
-
- /* Create the encoded string */
- function drawSplitPath($Object,$Values,$Format="")
- {
- $this->pChartObject = $Object;
-
- $Spacing = isset($Format["Spacing"]) ? $Format["Spacing"] : 20;
- $TextPadding = isset($Format["TextPadding"]) ? $Format["TextPadding"] : 2;
- $TextPos = isset($Format["TextPos"]) ? $Format["TextPos"] : TEXT_POS_TOP;
- $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : NULL;
- $Force = isset($Format["Force"]) ? $Format["Force"] : 70;
- $Segments = isset($Format["Segments"]) ? $Format["Segments"] : 15;
- $FontSize = $Object->FontSize;
- $X1 = $Object->GraphAreaX1;
- $Y1 = $Object->GraphAreaY1;
- $X2 = $Object->GraphAreaX2;
- $Y2 = $Object->GraphAreaY2;
-
- /* Data Processing */
- $Data = $Values->getData();
- $Palette = $Values->getPalette();
-
- $LabelSerie = $Data["Abscissa"];
- $DataSerie = "";
-
- foreach($Data["Series"] as $SerieName => $Value)
- { if ( $SerieName != $LabelSerie && $DataSerie == "" ) { $DataSerie = $SerieName; } }
-
- $DataSerieSum = array_sum($Data["Series"][$DataSerie]["Data"]);
- $DataSerieCount = count($Data["Series"][$DataSerie]["Data"]);
-
- /* Scale Processing */
- if ( $TextPos == TEXT_POS_RIGHT )
- $YScale = (($Y2-$Y1) - (($DataSerieCount+1)*$Spacing)) / $DataSerieSum;
- else
- $YScale = (($Y2-$Y1) - ($DataSerieCount*$Spacing)) / $DataSerieSum;
- $LeftHeight = $DataSerieSum * $YScale;
-
- /* Re-compute graph width depending of the text mode choosen */
- if ( $TextPos == TEXT_POS_RIGHT )
- {
- $MaxWidth = 0;
- foreach($Data["Series"][$LabelSerie]["Data"] as $Key => $Label)
- {
- $Boundardies = $Object->getTextBox(0,0,$Object->FontName,$Object->FontSize,0,$Label);
- if ( $Boundardies[1]["X"] > $MaxWidth ) { $MaxWidth = $Boundardies[1]["X"] + $TextPadding*2; }
- }
- $X2 = $X2 - $MaxWidth;
- }
-
- /* Drawing */
- $LeftY = ((($Y2-$Y1) / 2) + $Y1) - ($LeftHeight/2);
- $RightY = $Y1;
- $VectorX = (($X2-$X1) / 2);
-
- foreach($Data["Series"][$DataSerie]["Data"] as $Key => $Value)
- {
- if ( isset($Data["Series"][$LabelSerie]["Data"][$Key]) )
- $Label = $Data["Series"][$LabelSerie]["Data"][$Key];
- else
- $Label = "-";
-
- $LeftY1 = $LeftY;
- $LeftY2 = $LeftY + $Value * $YScale;
-
- $RightY1 = $RightY + $Spacing;
- $RightY2 = $RightY + $Spacing + $Value * $YScale;;
-
- $Settings = array("R"=>$Palette[$Key]["R"],"G"=>$Palette[$Key]["G"],"B"=>$Palette[$Key]["B"],"Alpha"=>$Palette[$Key]["Alpha"],"NoDraw"=>TRUE,"Segments"=>$Segments,"Surrounding"=>$Surrounding);
-
- $PolyGon = "";
-
- $Angle = $Object->getAngle($X2,$RightY1,$X1,$LeftY1);
- $VectorX1 = cos(deg2rad($Angle+90)) * $Force + ($X2-$X1)/2 + $X1;
- $VectorY1 = sin(deg2rad($Angle+90)) * $Force + ($RightY1-$LeftY1)/2 + $LeftY1;
- $VectorX2 = cos(deg2rad($Angle-90)) * $Force + ($X2-$X1)/2 + $X1;
- $VectorY2 = sin(deg2rad($Angle-90)) * $Force + ($RightY1-$LeftY1)/2 + $LeftY1;
-
- $Points = $Object->drawBezier($X1,$LeftY1,$X2,$RightY1,$VectorX1,$VectorY1,$VectorX2,$VectorY2,$Settings);
- foreach($Points as $Key => $Pos) { $PolyGon[] = $Pos["X"]; $PolyGon[] = $Pos["Y"]; }
-
-
- $Angle = $Object->getAngle($X2,$RightY2,$X1,$LeftY2);
- $VectorX1 = cos(deg2rad($Angle+90)) * $Force + ($X2-$X1)/2 +$X1;
- $VectorY1 = sin(deg2rad($Angle+90)) * $Force + ($RightY2-$LeftY2)/2 + $LeftY2;
- $VectorX2 = cos(deg2rad($Angle-90)) * $Force + ($X2-$X1)/2 +$X1;
- $VectorY2 = sin(deg2rad($Angle-90)) * $Force + ($RightY2-$LeftY2)/2 + $LeftY2;
-
- $Points = $Object->drawBezier($X1,$LeftY2,$X2,$RightY2,$VectorX1,$VectorY1,$VectorX2,$VectorY2,$Settings);
- $Points = array_reverse($Points);
- foreach($Points as $Key => $Pos) { $PolyGon[] = $Pos["X"]; $PolyGon[] = $Pos["Y"]; }
-
- $Object->drawPolygon($PolyGon,$Settings);
-
- if ( $TextPos == TEXT_POS_RIGHT )
- $Object->drawText($X2+$TextPadding,($RightY2-$RightY1)/2+$RightY1,$Label,array("Align"=>TEXT_ALIGN_MIDDLELEFT));
- else
- $Object->drawText($X2,$RightY1-$TextPadding,$Label,array("Align"=>TEXT_ALIGN_BOTTOMRIGHT));
-
- $LeftY = $LeftY2;
- $RightY = $RightY2;
- }
- }
- }
-?> \ No newline at end of file
diff --git a/Under-Testing/Website/class/pSpring.class.php b/Under-Testing/Website/class/pSpring.class.php
deleted file mode 100644
index fcfc8f2..0000000
--- a/Under-Testing/Website/class/pSpring.class.php
+++ /dev/null
@@ -1,868 +0,0 @@
-<?php
- /*
- pSpring - class to draw spring graphs
-
- Version : 2.1.2
- Made by : Jean-Damien POGOLOTTI
- Last Update : 03/08/11
-
- 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("NODE_TYPE_FREE" , 690001);
- define("NODE_TYPE_CENTRAL" , 690002);
-
- define("NODE_SHAPE_CIRCLE" , 690011);
- define("NODE_SHAPE_TRIANGLE" , 690012);
- define("NODE_SHAPE_SQUARE" , 690013);
-
- define("ALGORITHM_RANDOM" , 690021);
- define("ALGORITHM_WEIGHTED" , 690022);
- define("ALGORITHM_CIRCULAR" , 690023);
- define("ALGORITHM_CENTRAL" , 690024);
-
- define("LABEL_CLASSIC" , 690031);
- define("LABEL_LIGHT" , 690032);
-
- /* pSpring class definition */
- class pSpring
- {
- var $History;
- var $pChartObject;
- var $Data;
- var $Links;
- var $X1;
- var $Y1;
- var $X2;
- var $Y2;
- var $AutoComputeFreeZone;
- var $Labels;
-
- /* Class creator */
- function pSpring()
- {
- /* Initialise data arrays */
- $this->Data = "";
- $this->Links = "";
-
- /* Set nodes defaults */
- $this->Default["R"] = 255;
- $this->Default["G"] = 255;
- $this->Default["B"] = 255;
- $this->Default["Alpha"] = 100;
- $this->Default["BorderR"] = 0;
- $this->Default["BorderG"] = 0;
- $this->Default["BorderB"] = 0;
- $this->Default["BorderAlpha"] = 100;
- $this->Default["Surrounding"] = NULL;
- $this->Default["BackgroundR"] = 255;
- $this->Default["BackgroundG"] = 255;
- $this->Default["BackgroundB"] = 255;
- $this->Default["BackgroundAlpha"] = 0;
- $this->Default["Force"] = 1;
- $this->Default["NodeType"] = NODE_TYPE_FREE;
- $this->Default["Size"] = 5;
- $this->Default["Shape"] = NODE_SHAPE_CIRCLE;
- $this->Default["FreeZone"] = 40;
- $this->Default["LinkR"] = 0;
- $this->Default["LinkG"] = 0;
- $this->Default["LinkB"] = 0;
- $this->Default["LinkAlpha"] = 0;
-
- $this->Labels["Type"] = LABEL_CLASSIC;
- $this->Labels["R"] = 0;
- $this->Labels["G"] = 0;
- $this->Labels["B"] = 0;
- $this->Labels["Alpha"] = 100;
-
- $this->AutoComputeFreeZone = FALSE;
- }
-
- /* Set default links options */
- function setLinkDefaults($Settings="")
- {
- if ( isset($Settings["R"]) ) { $this->Default["LinkR"] = $Settings["R"]; }
- if ( isset($Settings["G"]) ) { $this->Default["LinkG"] = $Settings["G"]; }
- if ( isset($Settings["B"]) ) { $this->Default["LinkB"] = $Settings["B"]; }
- if ( isset($Settings["Alpha"]) ) { $this->Default["LinkAlpha"] = $Settings["Alpha"]; }
- }
-
- /* Set default links options */
- function setLabelsSettings($Settings="")
- {
- if ( isset($Settings["Type"]) ) { $this->Labels["Type"] = $Settings["Type"]; }
- if ( isset($Settings["R"]) ) { $this->Labels["R"] = $Settings["R"]; }
- if ( isset($Settings["G"]) ) { $this->Labels["G"] = $Settings["G"]; }
- if ( isset($Settings["B"]) ) { $this->Labels["B"] = $Settings["B"]; }
- if ( isset($Settings["Alpha"]) ) { $this->Labels["Alpha"] = $Settings["Alpha"]; }
- }
-
- /* Auto compute the FreeZone size based on the number of connections */
- function autoFreeZone()
- {
- /* Check connections reciprocity */
- foreach($this->Data as $Key => $Settings)
- {
- if ( isset($Settings["Connections"]) )
- { $this->Data[$Key]["FreeZone"] = count($Settings["Connections"])*10 + 20; }
- else
- { $this->Data[$Key]["FreeZone"] = 20; }
- }
-
- }
-
- /* Set link properties */
- function linkProperties($FromNode,$ToNode,$Settings)
- {
- if ( !isset($this->Data[$FromNode]) ) { return(0); }
- if ( !isset($this->Data[$ToNode]) ) { return(0); }
-
- $R = isset($Settings["R"]) ? $Settings["R"] : 0;
- $G = isset($Settings["G"]) ? $Settings["G"] : 0;
- $B = isset($Settings["B"]) ? $Settings["B"] : 0;
- $Alpha = isset($Settings["Alpha"]) ? $Settings["Alpha"] : 100;
- $Name = isset($Settings["Name"]) ? $Settings["Name"] : NULL;
- $Ticks = isset($Settings["Ticks"]) ? $Settings["Ticks"] : NULL;
-
- $this->Links[$FromNode][$ToNode]["R"] = $R; $this->Links[$ToNode][$FromNode]["R"] = $R;
- $this->Links[$FromNode][$ToNode]["G"] = $G; $this->Links[$ToNode][$FromNode]["G"] = $G;
- $this->Links[$FromNode][$ToNode]["B"] = $B; $this->Links[$ToNode][$FromNode]["B"] = $B;
- $this->Links[$FromNode][$ToNode]["Alpha"] = $Alpha; $this->Links[$ToNode][$FromNode]["Alpha"] = $Alpha;
- $this->Links[$FromNode][$ToNode]["Name"] = $Name; $this->Links[$ToNode][$FromNode]["Name"] = $Name;
- $this->Links[$FromNode][$ToNode]["Ticks"] = $Ticks; $this->Links[$ToNode][$FromNode]["Ticks"] = $Ticks;
- }
-
- function setNodeDefaults($Settings="")
- {
- if ( isset($Settings["R"]) ) { $this->Default["R"] = $Settings["R"]; }
- if ( isset($Settings["G"]) ) { $this->Default["G"] = $Settings["G"]; }
- if ( isset($Settings["B"]) ) { $this->Default["B"] = $Settings["B"]; }
- if ( isset($Settings["Alpha"]) ) { $this->Default["Alpha"] = $Settings["Alpha"]; }
- if ( isset($Settings["BorderR"]) ) { $this->Default["BorderR"] = $Settings["BorderR"]; }
- if ( isset($Settings["BorderG"]) ) { $this->Default["BorderG"] = $Settings["BorderG"]; }
- if ( isset($Settings["BorderB"]) ) { $this->Default["BorderB"] = $Settings["BorderB"]; }
- if ( isset($Settings["BorderAlpha"]) ) { $this->Default["BorderAlpha"] = $Settings["BorderAlpha"]; }
- if ( isset($Settings["Surrounding"]) ) { $this->Default["Surrounding"] = $Settings["Surrounding"]; }
- if ( isset($Settings["BackgroundR"]) ) { $this->Default["BackgroundR"] = $Settings["BackgroundR"]; }
- if ( isset($Settings["BackgroundG"]) ) { $this->Default["BackgroundG"] = $Settings["BackgroundG"]; }
- if ( isset($Settings["BackgroundB"]) ) { $this->Default["BackgroundB"] = $Settings["BackgroundB"]; }
- if ( isset($Settings["BackgroundAlpha"]) ) { $this->Default["BackgroundAlpha"] = $Settings["BackgroundAlpha"]; }
- if ( isset($Settings["NodeType"]) ) { $this->Default["NodeType"] = $Settings["NodeType"]; }
- if ( isset($Settings["Size"]) ) { $this->Default["Size"] = $Settings["Size"]; }
- if ( isset($Settings["Shape"]) ) { $this->Default["Shape"] = $Settings["Shape"]; }
- if ( isset($Settings["FreeZone"]) ) { $this->Default["FreeZone"] = $Settings["FreeZone"]; }
- }
-
- /* Add a node */
- function addNode($NodeID,$Settings="")
- {
- /* if the node already exists, ignore */
- if (isset($this->Data[$NodeID])) { return(0); }
-
- $Name = isset($Settings["Name"]) ? $Settings["Name"] : "Node ".$NodeID;
- $Connections = isset($Settings["Connections"]) ? $Settings["Connections"] : NULL;
-
- $R = isset($Settings["R"]) ? $Settings["R"] : $this->Default["R"];
- $G = isset($Settings["G"]) ? $Settings["G"] : $this->Default["G"];
- $B = isset($Settings["B"]) ? $Settings["B"] : $this->Default["B"];
- $Alpha = isset($Settings["Alpha"]) ? $Settings["Alpha"] : $this->Default["Alpha"];
- $BorderR = isset($Settings["BorderR"]) ? $Settings["BorderR"] : $this->Default["BorderR"];
- $BorderG = isset($Settings["BorderG"]) ? $Settings["BorderG"] : $this->Default["BorderG"];
- $BorderB = isset($Settings["BorderB"]) ? $Settings["BorderB"] : $this->Default["BorderB"];
- $BorderAlpha = isset($Settings["BorderAlpha"]) ? $Settings["BorderAlpha"] : $this->Default["BorderAlpha"];
- $Surrounding = isset($Settings["Surrounding"]) ? $Settings["Surrounding"] : $this->Default["Surrounding"];
- $BackgroundR = isset($Settings["BackgroundR"]) ? $Settings["BackgroundR"] : $this->Default["BackgroundR"];
- $BackgroundG = isset($Settings["BackgroundG"]) ? $Settings["BackgroundG"] : $this->Default["BackgroundG"];
- $BackgroundB = isset($Settings["BackgroundB"]) ? $Settings["BackgroundB"] : $this->Default["BackgroundB"];
- $BackgroundAlpha = isset($Settings["BackgroundAlpha"]) ? $Settings["BackgroundAlpha"] : $this->Default["BackgroundAlpha"];
- $Force = isset($Settings["Force"]) ? $Settings["Force"] : $this->Default["Force"];
- $NodeType = isset($Settings["NodeType"]) ? $Settings["NodeType"] : $this->Default["NodeType"];
- $Size = isset($Settings["Size"]) ? $Settings["Size"] : $this->Default["Size"];
- $Shape = isset($Settings["Shape"]) ? $Settings["Shape"] : $this->Default["Shape"];
- $FreeZone = isset($Settings["FreeZone"]) ? $Settings["FreeZone"] : $this->Default["FreeZone"];
-
- if ( $Surrounding != NULL ) { $BorderR = $R + $Surrounding; $BorderG = $G + $Surrounding; $BorderB = $B + $Surrounding; }
-
- $this->Data[$NodeID]["R"] = $R; $this->Data[$NodeID]["G"] = $G; $this->Data[$NodeID]["B"] = $B; $this->Data[$NodeID]["Alpha"] = $Alpha;
- $this->Data[$NodeID]["BorderR"] = $BorderR; $this->Data[$NodeID]["BorderG"] = $BorderG; $this->Data[$NodeID]["BorderB"] = $BorderB; $this->Data[$NodeID]["BorderAlpha"] = $BorderAlpha;
- $this->Data[$NodeID]["BackgroundR"] = $BackgroundR; $this->Data[$NodeID]["BackgroundG"] = $BackgroundG; $this->Data[$NodeID]["BackgroundB"] = $BackgroundB; $this->Data[$NodeID]["BackgroundAlpha"] = $BackgroundAlpha;
- $this->Data[$NodeID]["Name"] = $Name;
- $this->Data[$NodeID]["Force"] = $Force;
- $this->Data[$NodeID]["Type"] = $NodeType;
- $this->Data[$NodeID]["Size"] = $Size;
- $this->Data[$NodeID]["Shape"] = $Shape;
- $this->Data[$NodeID]["FreeZone"] = $FreeZone;
- if ( $Connections != NULL )
- {
- if ( is_array($Connections ) )
- {
- foreach($Connections as $Key => $Value)
- $this->Data[$NodeID]["Connections"][] = $Value;
- }
- else
- $this->Data[$NodeID]["Connections"][] = $Connections;
- }
- }
-
- /* Set color attribute for a list of nodes */
- function setNodesColor($Nodes,$Settings="")
- {
- if ( is_array($Nodes) )
- {
- foreach ($Nodes as $Key => $NodeID)
- {
- if (isset($this->Data[$NodeID]) )
- {
- if ( isset($Settings["R"]) ) { $this->Data[$NodeID]["R"] = $Settings["R"]; }
- if ( isset($Settings["G"]) ) { $this->Data[$NodeID]["G"] = $Settings["G"]; }
- if ( isset($Settings["B"]) ) { $this->Data[$NodeID]["B"] = $Settings["B"]; }
- if ( isset($Settings["Alpha"]) ) { $this->Data[$NodeID]["Alpha"] = $Settings["Alpha"]; }
- if ( isset($Settings["BorderR"]) ) { $this->Data[$NodeID]["BorderR"] = $Settings["BorderR"]; }
- if ( isset($Settings["BorderG"]) ) { $this->Data[$NodeID]["BorderG"] = $Settings["BorderG"]; }
- if ( isset($Settings["BorderB"]) ) { $this->Data[$NodeID]["BorderB"] = $Settings["BorderB"]; }
- if ( isset($Settings["BorderAlpha"]) ) { $this->Data[$NodeID]["BorderAlpha"] = $Settings["BorderAlpha"]; }
- if ( isset($Settings["Surrounding"]) ) { $this->Data[$NodeID]["BorderR"] = $this->Data[$NodeID]["R"] + $Settings["Surrounding"]; $this->Data[$NodeID]["BorderG"] = $this->Data[$NodeID]["G"] + $Settings["Surrounding"]; $this->Data[$NodeID]["BorderB"] = $this->Data[$NodeID]["B"] + $Settings["Surrounding"]; }
- }
- }
- }
- else
- {
- if ( isset($Settings["R"]) ) { $this->Data[$Nodes]["R"] = $Settings["R"]; }
- if ( isset($Settings["G"]) ) { $this->Data[$Nodes]["G"] = $Settings["G"]; }
- if ( isset($Settings["B"]) ) { $this->Data[$Nodes]["B"] = $Settings["B"]; }
- if ( isset($Settings["Alpha"]) ) { $this->Data[$Nodes]["Alpha"] = $Settings["Alpha"]; }
- if ( isset($Settings["BorderR"]) ) { $this->Data[$Nodes]["BorderR"] = $Settings["BorderR"]; }
- if ( isset($Settings["BorderG"]) ) { $this->Data[$Nodes]["BorderG"] = $Settings["BorderG"]; }
- if ( isset($Settings["BorderB"]) ) { $this->Data[$Nodes]["BorderB"] = $Settings["BorderB"]; }
- if ( isset($Settings["BorderAlpha"]) ) { $this->Data[$Nodes]["BorderAlpha"] = $Settings["BorderAlpha"]; }
- if ( isset($Settings["Surrounding"]) ) { $this->Data[$Nodes]["BorderR"] = $this->Data[$NodeID]["R"] + $Settings["Surrounding"]; $this->Data[$NodeID]["BorderG"] = $this->Data[$NodeID]["G"] + $Settings["Surrounding"]; $this->Data[$NodeID]["BorderB"] = $this->Data[$NodeID]["B"] + $Settings["Surrounding"]; }
- }
- }
-
- /* Returns all the nodes details */
- function dumpNodes()
- { return($this->Data); }
-
- /* Check if a connection exists and create it if required */
- function checkConnection($SourceID, $TargetID)
- {
- if ( isset($this->Data[$SourceID]["Connections"]) )
- {
- foreach ($this->Data[$SourceID]["Connections"] as $Key => $ConnectionID)
- { if ( $TargetID == $ConnectionID ) { return(TRUE); } }
- }
- $this->Data[$SourceID]["Connections"][] = $TargetID;
- }
- /* Get the median linked nodes position */
- function getMedianOffset($Key,$X,$Y)
- {
- $Cpt = 1;
- if ( isset($this->Data[$Key]["Connections"]) )
- {
- foreach($this->Data[$Key]["Connections"] as $ID => $NodeID)
- {
- if ( isset($this->Data[$NodeID]["X"]) && isset($this->Data[$NodeID]["Y"]) )
- {
- $X = $X + $this->Data[$NodeID]["X"];
- $Y = $Y + $this->Data[$NodeID]["Y"];
- $Cpt++;
- }
- }
- }
- return(array("X"=>$X/$Cpt,"Y"=>$Y/$Cpt));
- }
-
- /* Return the ID of the attached partner with the biggest weight */
- function getBiggestPartner($Key)
- {
- if ( !isset($this->Data[$Key]["Connections"]) ) { return(""); }
-
- $MaxWeight = 0; $Result = "";
- foreach($this->Data[$Key]["Connections"] as $Key => $PeerID)
- {
- if ( $this->Data[$PeerID]["Weight"] > $MaxWeight )
- { $MaxWeight = $this->Data[$PeerID]["Weight"]; $Result = $PeerID; }
- }
- return($Result);
- }
-
- /* Do the initial node positions computing pass */
- function firstPass($Algorithm)
- {
- $CenterX = ($this->X2 - $this->X1) / 2 + $this->X1;
- $CenterY = ($this->Y2 - $this->Y1) / 2 + $this->Y1;
-
- /* Check connections reciprocity */
- foreach($this->Data as $Key => $Settings)
- {
- if ( isset($Settings["Connections"]) )
- {
- foreach($Settings["Connections"] as $ID => $ConnectionID)
- $this->checkConnection($ConnectionID,$Key);
- }
- }
-
- if ( $this->AutoComputeFreeZone ) { $this->autoFreeZone(); }
-
- /* Get the max number of connections */
- $MaxConnections = 0;
- foreach($this->Data as $Key => $Settings)
- { if ( isset($Settings["Connections"]) ) { if ( $MaxConnections < count($Settings["Connections"] ) ) { $MaxConnections = count($Settings["Connections"]); } } }
-
- if ( $Algorithm == ALGORITHM_WEIGHTED )
- {
- foreach($this->Data as $Key => $Settings)
- {
- if ( $Settings["Type"] == NODE_TYPE_CENTRAL ) { $this->Data[$Key]["X"] = $CenterX; $this->Data[$Key]["Y"] = $CenterY; }
- if ( $Settings["Type"] == NODE_TYPE_FREE )
- {
- if ( isset($Settings["Connections"]) )
- { $Connections = count($Settings["Connections"]); }
- else
- { $Connections = 0; }
-
- $Ring = $MaxConnections - $Connections;
- $Angle = rand(0,360);
-
- $this->Data[$Key]["X"] = cos(deg2rad($Angle)) * ($Ring*$this->RingSize) + $CenterX;
- $this->Data[$Key]["Y"] = sin(deg2rad($Angle)) * ($Ring*$this->RingSize) + $CenterY;
- }
- }
- }
- elseif ( $Algorithm == ALGORITHM_CENTRAL )
- {
- /* Put a weight on each nodes */
- foreach($this->Data as $Key => $Settings)
- {
- if ( isset($Settings["Connections"]) )
- $this->Data[$Key]["Weight"] = count($Settings["Connections"]);
- else
- $this->Data[$Key]["Weight"] = 0;
- }
-
- $MaxConnections = $MaxConnections + 1;
- for($i=$MaxConnections;$i>=0;$i--)
- {
- foreach($this->Data as $Key => $Settings)
- {
- if ( $Settings["Type"] == NODE_TYPE_CENTRAL ) { $this->Data[$Key]["X"] = $CenterX; $this->Data[$Key]["Y"] = $CenterY; }
- if ( $Settings["Type"] == NODE_TYPE_FREE )
- {
- if ( isset($Settings["Connections"]) )
- { $Connections = count($Settings["Connections"]); }
- else
- { $Connections = 0; }
-
- if ( $Connections == $i )
- {
- $BiggestPartner = $this->getBiggestPartner($Key);
- if ( $BiggestPartner != "" )
- {
- $Ring = $this->Data[$BiggestPartner]["FreeZone"];
- $Weight = $this->Data[$BiggestPartner]["Weight"];
- $AngleDivision = 360 / $this->Data[$BiggestPartner]["Weight"];
- $Done = FALSE; $Tries = 0;
- while (!$Done && $Tries <= $Weight*2)
- {
- $Tries++;
- $Angle = floor(rand(0,$Weight)*$AngleDivision);
- if ( !isset($this->Data[$BiggestPartner]["Angular"][$Angle]) || !isset($this->Data[$BiggestPartner]["Angular"]) )
- {
- $this->Data[$BiggestPartner]["Angular"][$Angle] = $Angle;
- $Done = TRUE;
- }
- }
- if ( !$Done )
- { $Angle = rand(0,360); $this->Data[$BiggestPartner]["Angular"][$Angle] = $Angle; }
-
- $X = cos(deg2rad($Angle)) * ($Ring) + $this->Data[$BiggestPartner]["X"];
- $Y = sin(deg2rad($Angle)) * ($Ring) + $this->Data[$BiggestPartner]["Y"];
-
- $this->Data[$Key]["X"] = $X;
- $this->Data[$Key]["Y"] = $Y;
- }
- }
- }
- }
- }
- }
- elseif ( $Algorithm == ALGORITHM_CIRCULAR )
- {
- $MaxConnections = $MaxConnections + 1;
- for($i=$MaxConnections;$i>=0;$i--)
- {
- foreach($this->Data as $Key => $Settings)
- {
- if ( $Settings["Type"] == NODE_TYPE_CENTRAL ) { $this->Data[$Key]["X"] = $CenterX; $this->Data[$Key]["Y"] = $CenterY; }
- if ( $Settings["Type"] == NODE_TYPE_FREE )
- {
- if ( isset($Settings["Connections"]) )
- { $Connections = count($Settings["Connections"]); }
- else
- { $Connections = 0; }
-
- if ( $Connections == $i )
- {
- $Ring = $MaxConnections - $Connections;
- $Angle = rand(0,360);
-
- $X = cos(deg2rad($Angle)) * ($Ring*$this->RingSize) + $CenterX;
- $Y = sin(deg2rad($Angle)) * ($Ring*$this->RingSize) + $CenterY;
-
- $MedianOffset = $this->getMedianOffset($Key,$X,$Y);
-
- $this->Data[$Key]["X"] = $MedianOffset["X"];
- $this->Data[$Key]["Y"] = $MedianOffset["Y"];
- }
- }
- }
- }
- }
- elseif ( $Algorithm == ALGORITHM_RANDOM )
- {
- foreach($this->Data as $Key => $Settings)
- {
- if ( $Settings["Type"] == NODE_TYPE_FREE )
- {
- $this->Data[$Key]["X"] = $CenterX + rand(-20,20);
- $this->Data[$Key]["Y"] = $CenterY + rand(-20,20);
- }
- if ( $Settings["Type"] == NODE_TYPE_CENTRAL ) { $this->Data[$Key]["X"] = $CenterX; $this->Data[$Key]["Y"] = $CenterY; }
- }
- }
- }
-
- /* Compute one pass */
- function doPass()
- {
- /* Compute vectors */
- foreach($this->Data as $Key => $Settings)
- {
- if ( $Settings["Type"] != NODE_TYPE_CENTRAL )
- {
- unset($this->Data[$Key]["Vectors"]);
-
- $X1 = $Settings["X"];
- $Y1 = $Settings["Y"];
-
- /* Repulsion vectors */
- foreach($this->Data as $Key2 => $Settings2)
- {
- if ( $Key != $Key2 )
- {
- $X2 = $this->Data[$Key2]["X"];
- $Y2 = $this->Data[$Key2]["Y"];
- $FreeZone = $this->Data[$Key2]["FreeZone"];
-
- $Distance = $this->getDistance($X1,$Y1,$X2,$Y2);
- $Angle = $this->getAngle($X1,$Y1,$X2,$Y2) + 180;
-
- /* Nodes too close, repulsion occurs */
- if ( $Distance < $FreeZone )
- {
- $Force = log(pow(2,$FreeZone-$Distance));
- if ( $Force > 1 )
- { $this->Data[$Key]["Vectors"][] = array("Type"=>"R","Angle"=>$Angle % 360,"Force"=>$Force); }
- }
- }
- }
-
- /* Attraction vectors */
- if ( isset($Settings["Connections"]) )
- {
- foreach($Settings["Connections"] as $ID => $NodeID)
- {
- if ( isset($this->Data[$NodeID]) )
- {
- $X2 = $this->Data[$NodeID]["X"];
- $Y2 = $this->Data[$NodeID]["Y"];
- $FreeZone = $this->Data[$Key2]["FreeZone"];
-
- $Distance = $this->getDistance($X1,$Y1,$X2,$Y2);
- $Angle = $this->getAngle($X1,$Y1,$X2,$Y2);
-
- if ( $Distance > $FreeZone )
- $Force = log(($Distance-$FreeZone)+1);
- else
- { $Force = log(($FreeZone-$Distance)+1); ($Angle = $Angle + 180); }
-
- if ( $Force > 1 )
- $this->Data[$Key]["Vectors"][] = array("Type"=>"A","Angle"=>$Angle % 360,"Force"=>$Force);
- }
- }
- }
- }
- }
-
- /* Move the nodes accoding to the vectors */
- foreach($this->Data as $Key => $Settings)
- {
- $X = $Settings["X"];
- $Y = $Settings["Y"];
-
- if ( isset($Settings["Vectors"]) && $Settings["Type"] != NODE_TYPE_CENTRAL )
- {
- foreach($Settings["Vectors"] as $ID => $Vector)
- {
- $Type = $Vector["Type"];
- $Force = $Vector["Force"];
- $Angle = $Vector["Angle"];
- $Factor = $Type == "A" ? $this->MagneticForceA : $this->MagneticForceR;
-
- $X = cos(deg2rad($Angle)) * $Force * $Factor + $X;
- $Y = sin(deg2rad($Angle)) * $Force * $Factor + $Y;
- }
- }
-
- $this->Data[$Key]["X"] = $X;
- $this->Data[$Key]["Y"] = $Y;
- }
- }
-
- function lastPass()
- {
- /* Put everything inside the graph area */
- foreach($this->Data as $Key => $Settings)
- {
- $X = $Settings["X"];
- $Y = $Settings["Y"];
-
- if ( $X < $this->X1 ) { $X = $this->X1; }
- if ( $X > $this->X2 ) { $X = $this->X2; }
- if ( $Y < $this->Y1 ) { $Y = $this->Y1; }
- if ( $Y > $this->Y2 ) { $Y = $this->Y2; }
-
- $this->Data[$Key]["X"] = $X;
- $this->Data[$Key]["Y"] = $Y;
- }
-
- /* Dump all links */
- $Links = "";
- foreach($this->Data as $Key => $Settings)
- {
- $X1 = $Settings["X"];
- $Y1 = $Settings["Y"];
-
- if ( isset($Settings["Connections"]) )
- {
- foreach ($Settings["Connections"] as $ID => $NodeID)
- {
- if ( isset($this->Data[$NodeID]) )
- {
- $X2 = $this->Data[$NodeID]["X"];
- $Y2 = $this->Data[$NodeID]["Y"];
-
- $Links[] = array("X1"=>$X1,"Y1"=>$Y1,"X2"=>$X2,"Y2"=>$Y2,"Source"=>$Settings["Name"],"Destination"=>$this->Data[$NodeID]["Name"]);
- }
- }
- }
- }
-
- /* Check collisions */
- $Conflicts = 0;
- foreach($this->Data as $Key => $Settings)
- {
- $X1 = $Settings["X"];
- $Y1 = $Settings["Y"];
-
- if ( isset($Settings["Connections"]) )
- {
- foreach ($Settings["Connections"] as $ID => $NodeID)
- {
- if ( isset($this->Data[$NodeID]) )
- {
- $X2 = $this->Data[$NodeID]["X"];
- $Y2 = $this->Data[$NodeID]["Y"];
-
- foreach($Links as $IDLinks => $Link)
- {
- $X3 = $Link["X1"]; $Y3 = $Link["Y1"]; $X4 = $Link["X2"]; $Y4 = $Link["Y2"];
-
- if ( !($X1 == $X3 && $X2 == $X4 && $Y1 == $Y3 && $Y2 == $Y4 ) )
- {
- if ( $this->intersect($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4) )
- {
- if ( $Link["Source"] != $Settings["Name"] && $Link["Source"] != $this->Data[$NodeID]["Name"] && $Link["Destination"] != $Settings["Name"] && $Link["Destination"] != $this->Data[$NodeID]["Name"] )
- { $Conflicts++; }
- }
- }
- }
- }
- }
- }
- }
- return($Conflicts/2);
- }
-
- /* Center the graph */
- function center()
- {
- /* Determine the real center */
- $TargetCenterX = ($this->X2 - $this->X1) / 2 + $this->X1;
- $TargetCenterY = ($this->Y2 - $this->Y1) / 2 + $this->Y1;
-
- /* Get current boundaries */
- $XMin = $this->X2; $XMax = $this->X1;
- $YMin = $this->Y2; $YMax = $this->Y1;
- foreach($this->Data as $Key => $Settings)
- {
- $X = $Settings["X"];
- $Y = $Settings["Y"];
-
- if ( $X < $XMin) { $XMin = $X; }
- if ( $X > $XMax) { $XMax = $X; }
- if ( $Y < $YMin) { $YMin = $Y; }
- if ( $Y > $YMax) { $YMax = $Y; }
- }
- $CurrentCenterX = ($XMax - $XMin) / 2 + $XMin;
- $CurrentCenterY = ($YMax - $YMin) / 2 + $YMin;
-
- /* Compute the offset to apply */
- $XOffset = $TargetCenterX - $CurrentCenterX;
- $YOffset = $TargetCenterY - $CurrentCenterY;
-
- /* Correct the points position */
- foreach($this->Data as $Key => $Settings)
- {
- $this->Data[$Key]["X"] = $Settings["X"] + $XOffset;
- $this->Data[$Key]["Y"] = $Settings["Y"] + $YOffset;
- }
- }
-
- /* Create the encoded string */
- function drawSpring($Object,$Settings="")
- {
- $this->pChartObject = $Object;
-
- $Pass = isset($Settings["Pass"]) ? $Settings["Pass"] : 50;
- $Retries = isset($Settings["Retry"]) ? $Settings["Retry"] : 10;
- $this->MagneticForceA = isset($Settings["MagneticForceA"]) ? $Settings["MagneticForceA"] : 1.5;
- $this->MagneticForceR = isset($Settings["MagneticForceR"]) ? $Settings["MagneticForceR"] : 2;
- $this->RingSize = isset($Settings["RingSize"]) ? $Settings["RingSize"] : 40;
- $DrawVectors = isset($Settings["DrawVectors"]) ? $Settings["DrawVectors"] : FALSE;
- $DrawQuietZone = isset($Settings["DrawQuietZone"]) ? $Settings["DrawQuietZone"] : FALSE;
- $CenterGraph = isset($Settings["CenterGraph"]) ? $Settings["CenterGraph"] : TRUE;
- $TextPadding = isset($Settings["TextPadding"]) ? $Settings["TextPadding"] : 4;
- $Algorithm = isset($Settings["Algorithm"]) ? $Settings["Algorithm"] : ALGORITHM_WEIGHTED;
-
- $FontSize = $Object->FontSize;
- $this->X1 = $Object->GraphAreaX1;
- $this->Y1 = $Object->GraphAreaY1;
- $this->X2 = $Object->GraphAreaX2;
- $this->Y2 = $Object->GraphAreaY2;
-
- $Conflicts = 1; $Jobs = 0; $this->History["MinimumConflicts"] = -1;
- while ($Conflicts != 0 && $Jobs < $Retries )
- {
- $Jobs++;
-
- /* Compute the initial settings */
- $this->firstPass($Algorithm);
-
- /* Apply the vectors */
- if ( $Pass > 0 )
- {
- for ($i=0; $i<=$Pass; $i++) { $this->doPass(); }
- }
-
- $Conflicts = $this->lastPass();
- if ( $this->History["MinimumConflicts"] == -1 || $Conflicts < $this->History["MinimumConflicts"] )
- { $this->History["MinimumConflicts"] = $Conflicts; $this->History["Result"] = $this->Data; }
- }
-
- $Conflicts = $this->History["MinimumConflicts"];
- $this->Data = $this->History["Result"];
-
- if ( $CenterGraph ) { $this->center(); }
-
- /* Draw the connections */
- $Drawn = "";
- foreach($this->Data as $Key => $Settings)
- {
- $X = $Settings["X"];
- $Y = $Settings["Y"];
-
- if ( isset($Settings["Connections"]) )
- {
- foreach ($Settings["Connections"] as $ID => $NodeID)
- {
- if ( !isset($Drawn[$Key]) ) { $Drawn[$Key] = ""; }
- if ( !isset($Drawn[$NodeID]) ) { $Drawn[$NodeID] = ""; }
-
- if ( isset($this->Data[$NodeID]) && !isset($Drawn[$Key][$NodeID]) && !isset($Drawn[$NodeID][$Key]) )
- {
- $Color = array("R"=>$this->Default["LinkR"],"G"=>$this->Default["LinkG"],"B"=>$this->Default["LinkB"],"Alpha"=>$this->Default["Alpha"]);
-
- if ( $this->Links != "" )
- {
- if ( isset($this->Links[$Key][$NodeID]["R"]) )
- { $Color = array("R"=>$this->Links[$Key][$NodeID]["R"],"G"=>$this->Links[$Key][$NodeID]["G"],"B"=>$this->Links[$Key][$NodeID]["B"],"Alpha"=>$this->Links[$Key][$NodeID]["Alpha"]); }
-
- if ( isset($this->Links[$Key][$NodeID]["Ticks"]) )
- { $Color["Ticks"] = $this->Links[$Key][$NodeID]["Ticks"]; }
- }
-
- $X2 = $this->Data[$NodeID]["X"];
- $Y2 = $this->Data[$NodeID]["Y"];
- $this->pChartObject->drawLine($X,$Y,$X2,$Y2,$Color);
- $Drawn[$Key][$NodeID] = TRUE;
-
- if ( isset($this->Links) && $this->Links != "" )
- {
- if ( isset($this->Links[$Key][$NodeID]["Name"]) || isset($this->Links[$NodeID][$Key]["Name"]) )
- {
- $Name = isset($this->Links[$Key][$NodeID]["Name"]) ? $this->Links[$Key][$NodeID]["Name"] : $this->Links[$NodeID][$Key]["Name"];
- $TxtX = ($X2 - $X)/2 + $X;
- $TxtY = ($Y2 - $Y)/2 + $Y;
-
- if ( $X <= $X2 )
- $Angle = (360-$this->getAngle($X,$Y,$X2,$Y2)) % 360;
- else
- $Angle = (360-$this->getAngle($X2,$Y2,$X,$Y)) % 360;
-
- $Settings = $Color;
- $Settings["Angle"] = $Angle;
- $Settings["Align"] = TEXT_ALIGN_BOTTOMMIDDLE;
- $this->pChartObject->drawText($TxtX,$TxtY,$Name,$Settings);
- }
- }
- }
- }
- }
- }
-
- /* Draw the quiet zones */
- if ( $DrawQuietZone )
- {
- foreach($this->Data as $Key => $Settings)
- {
- $X = $Settings["X"];
- $Y = $Settings["Y"];
- $FreeZone = $Settings["FreeZone"];
-
- $this->pChartObject->drawFilledCircle($X,$Y,$FreeZone,array("R"=>0,"G"=>0,"B"=>0,"Alpha"=>2));
- }
- }
-
-
- /* Draw the nodes */
- foreach($this->Data as $Key => $Settings)
- {
- $X = $Settings["X"];
- $Y = $Settings["Y"];
- $Name = $Settings["Name"];
- $FreeZone = $Settings["FreeZone"];
- $Shape = $Settings["Shape"];
- $Size = $Settings["Size"];
-
- $Color = array("R"=>$Settings["R"],"G"=>$Settings["G"],"B"=>$Settings["B"],"Alpha"=>$Settings["Alpha"],"BorderR"=>$Settings["BorderR"],"BorderG"=>$Settings["BorderG"],"BorderB"=>$Settings["BorderB"],"BorderApha"=>$Settings["BorderAlpha"]);
-
- if ( $Shape == NODE_SHAPE_CIRCLE )
- {
- $this->pChartObject->drawFilledCircle($X,$Y,$Size,$Color);
- }
- elseif ( $Shape == NODE_SHAPE_TRIANGLE )
- {
- $Points = "";
- $Points[] = cos(deg2rad(270)) * $Size + $X; $Points[] = sin(deg2rad(270)) * $Size + $Y;
- $Points[] = cos(deg2rad(45)) * $Size + $X; $Points[] = sin(deg2rad(45)) * $Size + $Y;
- $Points[] = cos(deg2rad(135)) * $Size + $X; $Points[] = sin(deg2rad(135)) * $Size + $Y;
- $this->pChartObject->drawPolygon($Points,$Color);
- }
- elseif ( $Shape == NODE_SHAPE_SQUARE )
- {
- $Offset = $Size/2; $Size = $Size / 2;
- $this->pChartObject->drawFilledRectangle($X-$Offset,$Y-$Offset,$X+$Offset,$Y+$Offset,$Color);
- }
-
- if ( $Name != "" )
- {
- $LabelOptions = array("R"=>$this->Labels["R"],"G"=>$this->Labels["G"],"B"=>$this->Labels["B"],"Alpha"=>$this->Labels["Alpha"]);
-
- if ( $this->Labels["Type"] == LABEL_LIGHT )
- {
- $LabelOptions["Align"] = TEXT_ALIGN_BOTTOMLEFT;
- $this->pChartObject->drawText($X,$Y,$Name,$LabelOptions);
- }
- elseif ( $this->Labels["Type"] == LABEL_CLASSIC )
- {
- $LabelOptions["Align"] = TEXT_ALIGN_TOPMIDDLE;
- $LabelOptions["DrawBox"] = TRUE;
- $LabelOptions["BoxAlpha"] = 50;
- $LabelOptions["BorderOffset"] = 4;
- $LabelOptions["RoundedRadius"] = 3;
- $LabelOptions["BoxRounded"] = TRUE;
- $LabelOptions["NoShadow"] = TRUE;
-
- $this->pChartObject->drawText($X,$Y+$Size+$TextPadding,$Name,$LabelOptions);
- }
- }
- }
-
- /* Draw the vectors */
- if ( $DrawVectors )
- {
- foreach($this->Data as $Key => $Settings)
- {
- $X1 = $Settings["X"];
- $Y1 = $Settings["Y"];
-
- if ( isset($Settings["Vectors"]) && $Settings["Type"] != NODE_TYPE_CENTRAL )
- {
- foreach($Settings["Vectors"] as $ID => $Vector)
- {
- $Type = $Vector["Type"];
- $Force = $Vector["Force"];
- $Angle = $Vector["Angle"];
- $Factor = $Type == "A" ? $this->MagneticForceA : $this->MagneticForceR;
- $Color = $Type == "A" ? array("FillR"=>255,"FillG"=>0,"FillB"=>0) : array("FillR"=>0,"FillG"=>255,"FillB"=>0);
-
- $X2 = cos(deg2rad($Angle)) * $Force * $Factor + $X1;
- $Y2 = sin(deg2rad($Angle)) * $Force * $Factor + $Y1;
-
- $this->pChartObject->drawArrow($X1,$Y1,$X2,$Y2,$Color);
- }
- }
- }
- }
-
- return(array("Pass"=>$Jobs,"Conflicts"=>$Conflicts));
- }
-
- /* Return the distance between two points */
- function getDistance($X1,$Y1,$X2,$Y2)
- { return (sqrt(($X2-$X1)*($X2-$X1)+($Y2-$Y1)*($Y2-$Y1))); }
-
- /* Return the angle made by a line and the X axis */
- 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)); }
- }
-
- function intersect($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4)
- {
- $A = (($X3 * $Y4 - $X4 * $Y3) * ($X1 - $X2) - ($X1 * $Y2 - $X2 * $Y1) * ($X3 - $X4));
- $B = (($Y1 - $Y2) * ($X3 - $X4) - ($Y3 - $Y4) * ($X1 - $X2));
-
- if ( $B == 0 ) { return(FALSE); }
- $Xi = $A / $B;
-
- $C = ($X1 - $X2);
- if ( $C == 0 ) { return(FALSE); }
- $Yi = $Xi * (($Y1 - $Y2)/$C) + (($X1 * $Y2 - $X2 * $Y1)/$C);
-
- if ( $Xi >= min($X1,$X2) && $Xi >= min($X3,$X4) && $Xi <= max($X1,$X2) && $Xi <= max($X3,$X4))
- {
- if ( $Yi >= min($Y1,$Y2) && $Yi >= min($Y3,$Y4) && $Yi <= max($Y1,$Y2) && $Yi <= max($Y3,$Y4))
- { return(TRUE); }
- }
-
- return(FALSE);
- }
- }
-?> \ No newline at end of file
diff --git a/Under-Testing/Website/class/pStock.class.php b/Under-Testing/Website/class/pStock.class.php
deleted file mode 100644
index 7f9dbfb..0000000
--- a/Under-Testing/Website/class/pStock.class.php
+++ /dev/null
@@ -1,216 +0,0 @@
-<?php
- /*
- pStock - class to draw stock charts
-
- Version : 2.1.2
- Made by : Jean-Damien POGOLOTTI
- Last Update : 03/08/11
-
- 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("STOCK_MISSING_SERIE" , 180001);
-
- /* pStock class definition */
- class pStock
- {
- var $pChartObject;
- var $pDataObject;
-
- /* Class creator */
- function pStock($pChartObject,$pDataObject)
- {
- $this->pChartObject = $pChartObject;
- $this->pDataObject = $pDataObject;
- }
-
- /* Draw a stock chart */
- function drawStockChart($Format="")
- {
- $SerieOpen = isset($Format["SerieOpen"]) ? $Format["SerieOpen"] : "Open";
- $SerieClose = isset($Format["SerieClose"]) ? $Format["SerieClose"] : "Close";
- $SerieMin = isset($Format["SerieMin"]) ? $Format["SerieMin"] : "Min";
- $SerieMax = isset($Format["SerieMax"]) ? $Format["SerieMax"] : "Max";
- $SerieMedian = isset($Format["SerieMedian"]) ? $Format["SerieMedian"] : NULL;
- $LineWidth = isset($Format["LineWidth"]) ? $Format["LineWidth"] : 1;
- $LineR = isset($Format["LineR"]) ? $Format["LineR"] : 0;
- $LineG = isset($Format["LineG"]) ? $Format["LineG"] : 0;
- $LineB = isset($Format["LineB"]) ? $Format["LineB"] : 0;
- $LineAlpha = isset($Format["LineAlpha"]) ? $Format["LineAlpha"] : 100;
- $ExtremityWidth = isset($Format["ExtremityWidth"]) ? $Format["ExtremityWidth"] : 1;
- $ExtremityLength = isset($Format["ExtremityLength"]) ? $Format["ExtremityLength"] : 3;
- $ExtremityR = isset($Format["ExtremityR"]) ? $Format["ExtremityR"] : 0;
- $ExtremityG = isset($Format["ExtremityG"]) ? $Format["ExtremityG"] : 0;
- $ExtremityB = isset($Format["ExtremityB"]) ? $Format["ExtremityB"] : 0;
- $ExtremityAlpha = isset($Format["ExtremityAlpha"]) ? $Format["ExtremityAlpha"] : 100;
- $BoxWidth = isset($Format["BoxWidth"]) ? $Format["BoxWidth"] : 8;
- $BoxUpR = isset($Format["BoxUpR"]) ? $Format["BoxUpR"] : 188;
- $BoxUpG = isset($Format["BoxUpG"]) ? $Format["BoxUpG"] : 224;
- $BoxUpB = isset($Format["BoxUpB"]) ? $Format["BoxUpB"] : 46;
- $BoxUpAlpha = isset($Format["BoxUpAlpha"]) ? $Format["BoxUpAlpha"] : 100;
- $BoxUpSurrounding = isset($Format["BoxUpSurrounding"]) ? $Format["BoxUpSurrounding"] : NULL;
- $BoxUpBorderR = isset($Format["BoxUpBorderR"]) ? $Format["BoxUpBorderR"] : $BoxUpR-20;
- $BoxUpBorderG = isset($Format["BoxUpBorderG"]) ? $Format["BoxUpBorderG"] : $BoxUpG-20;
- $BoxUpBorderB = isset($Format["BoxUpBorderB"]) ? $Format["BoxUpBorderB"] : $BoxUpB-20;
- $BoxUpBorderAlpha = isset($Format["BoxUpBorderAlpha"]) ? $Format["BoxUpBorderAlpha"] : 100;
- $BoxDownR = isset($Format["BoxDownR"]) ? $Format["BoxDownR"] : 224;
- $BoxDownG = isset($Format["BoxDownG"]) ? $Format["BoxDownG"] : 100;
- $BoxDownB = isset($Format["BoxDownB"]) ? $Format["BoxDownB"] : 46;
- $BoxDownAlpha = isset($Format["BoxDownAlpha"]) ? $Format["BoxDownAlpha"] : 100;
- $BoxDownSurrounding= isset($Format["BoxDownSurrounding"]) ? $Format["BoxDownSurrounding"] : NULL;
- $BoxDownBorderR = isset($Format["BoxDownBorderR"]) ? $Format["BoxDownBorderR"] : $BoxDownR-20;
- $BoxDownBorderG = isset($Format["BoxDownBorderG"]) ? $Format["BoxDownBorderG"] : $BoxDownG-20;
- $BoxDownBorderB = isset($Format["BoxDownBorderB"]) ? $Format["BoxDownBorderB"] : $BoxDownB-20;
- $BoxDownBorderAlpha= isset($Format["BoxDownBorderAlpha"]) ? $Format["BoxDownBorderAlpha"] : 100;
- $ShadowOnBoxesOnly = isset($Format["ShadowOnBoxesOnly"]) ? $Format["ShadowOnBoxesOnly"] : TRUE;
- $MedianR = isset($Format["MedianR"]) ? $Format["MedianR"] : 255;
- $MedianG = isset($Format["MedianG"]) ? $Format["MedianG"] : 0;
- $MedianB = isset($Format["MedianB"]) ? $Format["MedianB"] : 0;
- $MedianAlpha = isset($Format["MedianAlpha"]) ? $Format["MedianAlpha"] : 100;
- $RecordImageMap = isset($Format["RecordImageMap"]) ? $Format["RecordImageMap"] : FALSE;
- $ImageMapTitle = isset($Format["ImageMapTitle"]) ? $Format["ImageMapTitle"] : "Stock Chart";
-
-
- /* Data Processing */
- $Data = $this->pDataObject->getData();
- $Palette = $this->pDataObject->getPalette();
-
- if ( $BoxUpSurrounding != NULL ) { $BoxUpBorderR = $BoxUpR + $BoxUpSurrounding; $BoxUpBorderG = $BoxUpG + $BoxUpSurrounding; $BoxUpBorderB = $BoxUpB + $BoxUpSurrounding; }
- if ( $BoxDownSurrounding != NULL ) { $BoxDownBorderR = $BoxDownR + $BoxDownSurrounding; $BoxDownBorderG = $BoxDownG + $BoxDownSurrounding; $BoxDownBorderB = $BoxDownB + $BoxDownSurrounding; }
-
- if ( $LineWidth != 1 ) { $LineOffset = $LineWidth / 2; }
- $BoxOffset = $BoxWidth / 2;
-
- $Data = $this->pChartObject->DataSet->getData();
- list($XMargin,$XDivs) = $this->pChartObject->scaleGetXSettings();
-
- if ( !isset($Data["Series"][$SerieOpen]) || !isset($Data["Series"][$SerieClose]) || !isset($Data["Series"][$SerieMin]) || !isset($Data["Series"][$SerieMax]) )
- return(STOCK_MISSING_SERIE);
-
- $Plots = "";
- foreach($Data["Series"][$SerieOpen]["Data"] as $Key => $Value)
- {
- $Point = "";
- if ( isset($Data["Series"][$SerieClose]["Data"][$Key]) || isset($Data["Series"][$SerieMin]["Data"][$Key]) || isset($Data["Series"][$SerieMax]["Data"][$Key]) )
- $Point = array($Value,$Data["Series"][$SerieClose]["Data"][$Key],$Data["Series"][$SerieMin]["Data"][$Key],$Data["Series"][$SerieMax]["Data"][$Key]);
- if ( $SerieMedian != NULL && isset($Data["Series"][$SerieMedian]["Data"][$Key]) )
- $Point[] = $Data["Series"][$SerieMedian]["Data"][$Key];
-
- $Plots[] = $Point;
- }
-
- $AxisID = $Data["Series"][$SerieOpen]["Axis"];
- $Mode = $Data["Axis"][$AxisID]["Display"];
- $Format = $Data["Axis"][$AxisID]["Format"];
- $Unit = $Data["Axis"][$AxisID]["Unit"];
-
- $YZero = $this->pChartObject->scaleComputeY(0,array("AxisID"=>$AxisID));
- $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs;
-
- $X = $this->pChartObject->GraphAreaX1 + $XMargin;
- $Y = $this->pChartObject->GraphAreaY1 + $XMargin;
-
- $LineSettings = array("R"=>$LineR,"G"=>$LineG,"B"=>$LineB,"Alpha"=>$LineAlpha);
- $ExtremitySettings = array("R"=>$ExtremityR,"G"=>$ExtremityG,"B"=>$ExtremityB,"Alpha"=>$ExtremityAlpha);
- $BoxUpSettings = array("R"=>$BoxUpR,"G"=>$BoxUpG,"B"=>$BoxUpB,"Alpha"=>$BoxUpAlpha,"BorderR"=>$BoxUpBorderR,"BorderG"=>$BoxUpBorderG,"BorderB"=>$BoxUpBorderB,"BorderAlpha"=>$BoxUpBorderAlpha);
- $BoxDownSettings = array("R"=>$BoxDownR,"G"=>$BoxDownG,"B"=>$BoxDownB,"Alpha"=>$BoxDownAlpha,"BorderR"=>$BoxDownBorderR,"BorderG"=>$BoxDownBorderG,"BorderB"=>$BoxDownBorderB,"BorderAlpha"=>$BoxDownBorderAlpha);
- $MedianSettings = array("R"=>$MedianR,"G"=>$MedianG,"B"=>$MedianB,"Alpha"=>$MedianAlpha);
-
- foreach($Plots as $Key =>$Points)
- {
- $PosArray = $this->pChartObject->scaleComputeY($Points,array("AxisID"=>$AxisID));
-
- $Values = "Open :".$Data["Series"][$SerieOpen]["Data"][$Key]."<BR>Close : ".$Data["Series"][$SerieClose]["Data"][$Key]."<BR>Min : ".$Data["Series"][$SerieMin]["Data"][$Key]."<BR>Max : ".$Data["Series"][$SerieMax]["Data"][$Key]."<BR>";
- if ( $SerieMedian != NULL ) { $Values = $Values."Median : ".$Data["Series"][$SerieMedian]["Data"][$Key]."<BR>"; }
- if ( $PosArray[0] > $PosArray[1] ) { $ImageMapColor = $this->pChartObject->toHTMLColor($BoxUpR,$BoxUpG,$BoxUpB); } else { $ImageMapColor = $this->pChartObject->toHTMLColor($BoxDownR,$BoxDownG,$BoxDownB); }
-
- if ( $Data["Orientation"] == SCALE_POS_LEFTRIGHT )
- {
- if ( $YZero > $this->pChartObject->GraphAreaY2-1 ) { $YZero = $this->pChartObject->GraphAreaY2-1; }
- if ( $YZero < $this->pChartObject->GraphAreaY1+1 ) { $YZero = $this->pChartObject->GraphAreaY1+1; }
-
- if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->pChartObject->GraphAreaX2-$this->pChartObject->GraphAreaX1-$XMargin*2)/$XDivs; }
-
- if ( $ShadowOnBoxesOnly ) { $RestoreShadow = $this->pChartObject->Shadow; $this->pChartObject->Shadow = FALSE; }
-
- if ( $LineWidth == 1 )
- $this->pChartObject->drawLine($X,$PosArray[2],$X,$PosArray[3],$LineSettings);
- else
- $this->pChartObject->drawFilledRectangle($X-$LineOffset,$PosArray[2],$X+$LineOffset,$PosArray[3],$LineSettings);
-
- if ( $ExtremityWidth == 1 )
- {
- $this->pChartObject->drawLine($X-$ExtremityLength,$PosArray[2],$X+$ExtremityLength,$PosArray[2],$ExtremitySettings);
- $this->pChartObject->drawLine($X-$ExtremityLength,$PosArray[3],$X+$ExtremityLength,$PosArray[3],$ExtremitySettings);
-
- if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($X-$ExtremityLength).",".floor($PosArray[2]).",".floor($X+$ExtremityLength).",".floor($PosArray[3]),$ImageMapColor,$ImageMapTitle,$Values); }
- }
- else
- {
- $this->pChartObject->drawFilledRectangle($X-$ExtremityLength,$PosArray[2],$X+$ExtremityLength,$PosArray[2]-$ExtremityWidth,$ExtremitySettings);
- $this->pChartObject->drawFilledRectangle($X-$ExtremityLength,$PosArray[3],$X+$ExtremityLength,$PosArray[3]+$ExtremityWidth,$ExtremitySettings);
-
- if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($X-$ExtremityLength).",".floor($PosArray[2]-$ExtremityWidth).",".floor($X+$ExtremityLength).",".floor($PosArray[3]+$ExtremityWidth),$ImageMapColor,$ImageMapTitle,$Values); }
- }
-
- if ( $ShadowOnBoxesOnly ) { $this->pChartObject->Shadow = $RestoreShadow; }
-
- if ( $PosArray[0] > $PosArray[1] )
- $this->pChartObject->drawFilledRectangle($X-$BoxOffset,$PosArray[0],$X+$BoxOffset,$PosArray[1],$BoxUpSettings);
- else
- $this->pChartObject->drawFilledRectangle($X-$BoxOffset,$PosArray[0],$X+$BoxOffset,$PosArray[1],$BoxDownSettings);
-
- if ( isset($PosArray[4]) )
- $this->pChartObject->drawLine($X-$ExtremityLength,$PosArray[4],$X+$ExtremityLength,$PosArray[4],$MedianSettings);
-
- $X = $X + $XStep;
- }
- elseif ( $Data["Orientation"] == SCALE_POS_TOPBOTTOM )
- {
- if ( $YZero > $this->pChartObject->GraphAreaX2-1 ) { $YZero = $this->pChartObject->GraphAreaX2-1; }
- if ( $YZero < $this->pChartObject->GraphAreaX1+1 ) { $YZero = $this->pChartObject->GraphAreaX1+1; }
-
- if ( $XDivs == 0 ) { $XStep = 0; } else { $XStep = ($this->pChartObject->GraphAreaY2-$this->pChartObject->GraphAreaY1-$XMargin*2)/$XDivs; }
-
- if ( $LineWidth == 1 )
- $this->pChartObject->drawLine($PosArray[2],$Y,$PosArray[3],$Y,$LineSettings);
- else
- $this->pChartObject->drawFilledRectangle($PosArray[2],$Y-$LineOffset,$PosArray[3],$Y+$LineOffset,$LineSettings);
-
- if ( $ShadowOnBoxesOnly ) { $RestoreShadow = $this->pChartObject->Shadow; $this->pChartObject->Shadow = FALSE; }
-
- if ( $ExtremityWidth == 1 )
- {
- $this->pChartObject->drawLine($PosArray[2],$Y-$ExtremityLength,$PosArray[2],$Y+$ExtremityLength,$ExtremitySettings);
- $this->pChartObject->drawLine($PosArray[3],$Y-$ExtremityLength,$PosArray[3],$Y+$ExtremityLength,$ExtremitySettings);
-
- if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($PosArray[2]).",".floor($Y-$ExtremityLength).",".floor($PosArray[3]).",".floor($Y+$ExtremityLength),$ImageMapColor,$ImageMapTitle,$Values); }
- }
- else
- {
- $this->pChartObject->drawFilledRectangle($PosArray[2],$Y-$ExtremityLength,$PosArray[2]-$ExtremityWidth,$Y+$ExtremityLength,$ExtremitySettings);
- $this->pChartObject->drawFilledRectangle($PosArray[3],$Y-$ExtremityLength,$PosArray[3]+$ExtremityWidth,$Y+$ExtremityLength,$ExtremitySettings);
-
- if ( $RecordImageMap ) { $this->pChartObject->addToImageMap("RECT",floor($PosArray[2]-$ExtremityWidth).",".floor($Y-$ExtremityLength).",".floor($PosArray[3]+$ExtremityWidth).",".floor($Y+$ExtremityLength),$ImageMapColor,$ImageMapTitle,$Values); }
- }
-
- if ( $ShadowOnBoxesOnly ) { $this->pChartObject->Shadow = $RestoreShadow; }
-
- if ( $PosArray[0] < $PosArray[1] )
- $this->pChartObject->drawFilledRectangle($PosArray[0],$Y-$BoxOffset,$PosArray[1],$Y+$BoxOffset,$BoxUpSettings);
- else
- $this->pChartObject->drawFilledRectangle($PosArray[0],$Y-$BoxOffset,$PosArray[1],$Y+$BoxOffset,$BoxDownSettings);
-
- if ( isset($PosArray[4]) )
- $this->pChartObject->drawLine($PosArray[4],$Y-$ExtremityLength,$PosArray[4],$Y+$ExtremityLength,$MedianSettings);
-
- $Y = $Y + $XStep;
- }
- }
- }
- }
-?> \ No newline at end of file
diff --git a/Under-Testing/Website/class/pSurface.class.php b/Under-Testing/Website/class/pSurface.class.php
deleted file mode 100644
index f887ac0..0000000
--- a/Under-Testing/Website/class/pSurface.class.php
+++ /dev/null
@@ -1,315 +0,0 @@
-<?php
- /*
- pSurface - class to draw surface charts
-
- Version : 2.1.2
- Made by : Jean-Damien POGOLOTTI
- Last Update : 03/08/11
-
- 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("UNKNOWN" , 0.123456789);
- define("IGNORED" , -1);
-
- define("LABEL_POSITION_LEFT" , 880001);
- define("LABEL_POSITION_RIGHT" , 880002);
- define("LABEL_POSITION_TOP" , 880003);
- define("LABEL_POSITION_BOTTOM" , 880004);
-
- /* pStock class definition */
- class pSurface
- {
- var $pChartObject;
- var $GridSizeX;
- var $GridSizeY;
- var $Points;
-
- /* Class creator */
- function pSurface($pChartObject)
- {
- $this->pChartObject = $pChartObject;
- $this->GridSize = 10;
- $this->Points = "";
- }
-
- /* Define the grid size and initialise the 2D matrix */
- function setGrid($XSize=10,$YSize=10)
- {
- for($X=0; $X<=$XSize; $X++) { for($Y=0; $Y<=$YSize; $Y++) { $this->Points[$X][$Y]=UNKNOWN; } }
-
- $this->GridSizeX = $XSize;
- $this->GridSizeY = $YSize;
- }
-
- /* Add a point on the grid */
- function addPoint($X,$Y,$Value,$Force=TRUE)
- {
- if ( $X < 0 || $X >$this->GridSizeX ) { return(0); }
- if ( $Y < 0 || $Y >$this->GridSizeY ) { return(0); }
-
- if ( $this->Points[$X][$Y] == UNKNOWN || $Force )
- $this->Points[$X][$Y] = $Value;
- elseif ( $this->Points[$X][$Y] == UNKNOWN )
- $this->Points[$X][$Y] = $Value;
- else
- $this->Points[$X][$Y] = ($this->Points[$X][$Y] + $Value)/2;
- }
-
- /* Write the X labels */
- function writeXLabels($Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : $this->pChartObject->FontColorR;
- $G = isset($Format["G"]) ? $Format["G"] : $this->pChartObject->FontColorG;
- $B = isset($Format["B"]) ? $Format["B"] : $this->pChartObject->FontColorB;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $this->pChartObject->FontColorA;
- $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
- $Padding = isset($Format["Padding"]) ? $Format["Padding"] : 5;
- $Position = isset($Format["Position"]) ? $Format["Position"] : LABEL_POSITION_TOP;
- $Labels = isset($Format["Labels"]) ? $Format["Labels"] : NULL;
- $CountOffset = isset($Format["CountOffset"]) ? $Format["CountOffset"] : 0;
-
- if ( $Labels != NULL && !is_array($Labels) ) { $Label = $Labels; $Labels = ""; $Labels[] = $Label; }
-
- $X0 = $this->pChartObject->GraphAreaX1;
- $XSize = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) / ($this->GridSizeX+1);
-
- $Settings = array("Angle"=>$Angle,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
- if ( $Position == LABEL_POSITION_TOP )
- {
- $YPos = $this->pChartObject->GraphAreaY1 - $Padding;
- if ($Angle == 0 ) { $Settings["Align"] = TEXT_ALIGN_BOTTOMMIDDLE; }
- if ($Angle != 0 ) { $Settings["Align"] = TEXT_ALIGN_MIDDLELEFT; }
- }
- elseif ( $Position == LABEL_POSITION_BOTTOM )
- {
- $YPos = $this->pChartObject->GraphAreaY2 + $Padding;
- if ($Angle == 0 ) { $Settings["Align"] = TEXT_ALIGN_TOPMIDDLE; }
- if ($Angle != 0 ) { $Settings["Align"] = TEXT_ALIGN_MIDDLERIGHT; }
- }
- else
- return(-1);
-
- for($X=0;$X<=$this->GridSizeX;$X++)
- {
- $XPos = floor($X0+$X*$XSize + $XSize/2);
-
- if( $Labels == NULL || !isset($Labels[$X]) )
- $Value = $X+$CountOffset;
- else
- $Value = $Labels[$X];
-
- $this->pChartObject->drawText($XPos,$YPos,$Value,$Settings);
- }
- }
-
- /* Write the Y labels */
- function writeYLabels($Format="")
- {
- $R = isset($Format["R"]) ? $Format["R"] : $this->pChartObject->FontColorR;
- $G = isset($Format["G"]) ? $Format["G"] : $this->pChartObject->FontColorG;
- $B = isset($Format["B"]) ? $Format["B"] : $this->pChartObject->FontColorB;
- $Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : $this->pChartObject->FontColorA;
- $Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
- $Padding = isset($Format["Padding"]) ? $Format["Padding"] : 5;
- $Position = isset($Format["Position"]) ? $Format["Position"] : LABEL_POSITION_LEFT;
- $Labels = isset($Format["Labels"]) ? $Format["Labels"] : NULL;
- $CountOffset = isset($Format["CountOffset"]) ? $Format["CountOffset"] : 0;
-
- if ( $Labels != NULL && !is_array($Labels) ) { $Label = $Labels; $Labels = ""; $Labels[] = $Label; }
-
- $Y0 = $this->pChartObject->GraphAreaY1;
- $YSize = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) / ($this->GridSizeY+1);
-
- $Settings = array("Angle"=>$Angle,"R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
- if ( $Position == LABEL_POSITION_LEFT )
- { $XPos = $this->pChartObject->GraphAreaX1 - $Padding; $Settings["Align"] = TEXT_ALIGN_MIDDLERIGHT; }
- elseif ( $Position == LABEL_POSITION_RIGHT )
- { $XPos = $this->pChartObject->GraphAreaX2 + $Padding; $Settings["Align"] = TEXT_ALIGN_MIDDLELEFT; }
- else
- return(-1);
-
- for($Y=0;$Y<=$this->GridSizeY;$Y++)
- {
- $YPos = floor($Y0+$Y*$YSize + $YSize/2);
-
- if( $Labels == NULL || !isset($Labels[$Y]) )
- $Value = $Y+$CountOffset;
- else
- $Value = $Labels[$Y];
-
- $this->pChartObject->drawText($XPos,$YPos,$Value,$Settings);
- }
- }
-
- /* Draw the area arround the specified Threshold */
- function drawContour($Threshold,$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"] : 3;
- $Padding = isset($Format["Padding"]) ? $Format["Padding"] : 0;
-
- $X0 = $this->pChartObject->GraphAreaX1;
- $Y0 = $this->pChartObject->GraphAreaY1;
- $XSize = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) / ($this->GridSizeX+1);
- $YSize = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) / ($this->GridSizeY+1);
-
- $Color = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Ticks"=>$Ticks);
-
- for($X=0;$X<=$this->GridSizeX;$X++)
- {
- for($Y=0;$Y<=$this->GridSizeY;$Y++)
- {
- $Value = $this->Points[$X][$Y];
-
- if ( $Value != UNKNOWN && $Value != IGNORED && $Value >= $Threshold)
- {
- $X1 = floor($X0+$X*$XSize)+$Padding;
- $Y1 = floor($Y0+$Y*$YSize)+$Padding;
- $X2 = floor($X0+$X*$XSize+$XSize);
- $Y2 = floor($Y0+$Y*$YSize+$YSize);
-
- if ( $X > 0 && $this->Points[$X-1][$Y] != UNKNOWN && $this->Points[$X-1][$Y] != IGNORED && $this->Points[$X-1][$Y] < $Threshold)
- $this->pChartObject->drawLine($X1,$Y1,$X1,$Y2,$Color);
- if ( $Y > 0 && $this->Points[$X][$Y-1] != UNKNOWN && $this->Points[$X][$Y-1] != IGNORED && $this->Points[$X][$Y-1] < $Threshold)
- $this->pChartObject->drawLine($X1,$Y1,$X2,$Y1,$Color);
- if ( $X < $this->GridSizeX && $this->Points[$X+1][$Y] != UNKNOWN && $this->Points[$X+1][$Y] != IGNORED && $this->Points[$X+1][$Y] < $Threshold)
- $this->pChartObject->drawLine($X2,$Y1,$X2,$Y2,$Color);
- if ( $Y < $this->GridSizeY && $this->Points[$X][$Y+1] != UNKNOWN && $this->Points[$X][$Y+1] != IGNORED && $this->Points[$X][$Y+1] < $Threshold)
- $this->pChartObject->drawLine($X1,$Y2,$X2,$Y2,$Color);
- }
- }
- }
- }
-
- /* Draw the surface chart */
- function drawSurface($Format="")
- {
- $Palette = isset($Format["Palette"]) ? $Format["Palette"] : NULL;
- $ShadeR1 = isset($Format["ShadeR1"]) ? $Format["ShadeR1"] : 77;
- $ShadeG1 = isset($Format["ShadeG1"]) ? $Format["ShadeG1"] : 205;
- $ShadeB1 = isset($Format["ShadeB1"]) ? $Format["ShadeB1"] : 21;
- $ShadeA1 = isset($Format["ShadeA1"]) ? $Format["ShadeA1"] : 40;
- $ShadeR2 = isset($Format["ShadeR2"]) ? $Format["ShadeR2"] : 227;
- $ShadeG2 = isset($Format["ShadeG2"]) ? $Format["ShadeG2"] : 135;
- $ShadeB2 = isset($Format["ShadeB2"]) ? $Format["ShadeB2"] : 61;
- $ShadeA2 = isset($Format["ShadeA2"]) ? $Format["ShadeA2"] : 100;
- $Border = isset($Format["Border"]) ? $Format["Border"] : FALSE;
- $BorderR = isset($Format["BorderR"]) ? $Format["BorderR"] : 0;
- $BorderG = isset($Format["BorderG"]) ? $Format["BorderG"] : 0;
- $BorderB = isset($Format["BorderB"]) ? $Format["BorderB"] : 0;
- $Surrounding = isset($Format["Surrounding"]) ? $Format["Surrounding"] : -1;
- $Padding = isset($Format["Padding"]) ? $Format["Padding"] : 1;
-
- $X0 = $this->pChartObject->GraphAreaX1;
- $Y0 = $this->pChartObject->GraphAreaY1;
- $XSize = ($this->pChartObject->GraphAreaX2 - $this->pChartObject->GraphAreaX1) / ($this->GridSizeX+1);
- $YSize = ($this->pChartObject->GraphAreaY2 - $this->pChartObject->GraphAreaY1) / ($this->GridSizeY+1);
-
- for($X=0;$X<=$this->GridSizeX;$X++)
- {
- for($Y=0;$Y<=$this->GridSizeY;$Y++)
- {
- $Value = $this->Points[$X][$Y];
-
- if ( $Value != UNKNOWN && $Value != IGNORED )
- {
- $X1 = floor($X0+$X*$XSize)+$Padding;
- $Y1 = floor($Y0+$Y*$YSize)+$Padding;
- $X2 = floor($X0+$X*$XSize+$XSize);
- $Y2 = floor($Y0+$Y*$YSize+$YSize);
-
- if ( $Palette != NULL )
- {
- if ( isset($Palette[$Value]) && isset($Palette[$Value]["R"]) ) { $R = $Palette[$Value]["R"]; } else { $R = 0; }
- if ( isset($Palette[$Value]) && isset($Palette[$Value]["G"]) ) { $G = $Palette[$Value]["G"]; } else { $G = 0; }
- if ( isset($Palette[$Value]) && isset($Palette[$Value]["B"]) ) { $B = $Palette[$Value]["B"]; } else { $B = 0; }
- if ( isset($Palette[$Value]) && isset($Palette[$Value]["Alpha"]) ) { $Alpha = $Palette[$Value]["Alpha"]; } else { $Alpha = 1000; }
- }
- else
- {
- $R = (($ShadeR2-$ShadeR1)/100)*$Value + $ShadeR1;
- $G = (($ShadeG2-$ShadeG1)/100)*$Value + $ShadeG1;
- $B = (($ShadeB2-$ShadeB1)/100)*$Value + $ShadeB1;
- $Alpha = (($ShadeA2-$ShadeA1)/100)*$Value + $ShadeA1;
- }
-
- $Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
- if ( $Border ) { $Settings["BorderR"] = $BorderR; $Settings["BorderG"] = $BorderG; $Settings["BorderB"] = $BorderB; }
- if ( $Surrounding != -1 ) { $Settings["BorderR"] = $R+$Surrounding; $Settings["BorderG"] = $G+$Surrounding; $Settings["BorderB"] = $B+$Surrounding; }
-
- $this->pChartObject->drawFilledRectangle($X1,$Y1,$X2-1,$Y2-1,$Settings);
- }
- }
- }
- }
-
- /* Compute the missing points */
- function computeMissing()
- {
- $Missing = "";
- for($X=0;$X<=$this->GridSizeX;$X++)
- {
- for($Y=0;$Y<=$this->GridSizeY;$Y++)
- {
- if ( $this->Points[$X][$Y] == UNKNOWN )
- $Missing[] = $X.",".$Y;
- }
- }
- shuffle($Missing);
-
- foreach($Missing as $Key => $Pos)
- {
- $Pos = preg_split("/,/",$Pos);
- $X = $Pos[0];
- $Y = $Pos[1];
-
- if ( $this->Points[$X][$Y] == UNKNOWN )
- {
- $NearestNeighbor = $this->getNearestNeighbor($X,$Y);
-
- $Value = 0; $Points = 0;
- for($Xi=$X-$NearestNeighbor;$Xi<=$X+$NearestNeighbor;$Xi++)
- {
- for($Yi=$Y-$NearestNeighbor;$Yi<=$Y+$NearestNeighbor;$Yi++)
- {
- if ($Xi >=0 && $Yi >= 0 && $Xi <= $this->GridSizeX && $Yi <= $this->GridSizeY && $this->Points[$Xi][$Yi] != UNKNOWN && $this->Points[$Xi][$Yi] != IGNORED)
- {
- $Value = $Value + $this->Points[$Xi][$Yi]; $Points++;
- }
- }
- }
-
- if ( $Points != 0 ) { $this->Points[$X][$Y] = $Value / $Points; }
- }
- }
- }
-
- /* Return the nearest Neighbor distance of a point */
- function getNearestNeighbor($Xp,$Yp)
- {
- $Nearest = UNKNOWN;
- for($X=0;$X<=$this->GridSizeX;$X++)
- {
- for($Y=0;$Y<=$this->GridSizeY;$Y++)
- {
- if ( $this->Points[$X][$Y] != UNKNOWN && $this->Points[$X][$Y] != IGNORED )
- {
- $DistanceX = max($Xp,$X)-min($Xp,$X);
- $DistanceY = max($Yp,$Y)-min($Yp,$Y);
- $Distance = max($DistanceX,$DistanceY);
- if ( $Distance < $Nearest || $Nearest == UNKNOWN ) { $Nearest = $Distance; }
- }
- }
- }
- return($Nearest);
- }
- }
-?> \ No newline at end of file
diff --git a/Under-Testing/Website/css/Critical.png b/Under-Testing/Website/css/Critical.png
deleted file mode 100644
index e025d19..0000000
--- a/Under-Testing/Website/css/Critical.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/css/Help.png b/Under-Testing/Website/css/Help.png
deleted file mode 100644
index 42a8f7c..0000000
--- a/Under-Testing/Website/css/Help.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/css/Info.png b/Under-Testing/Website/css/Info.png
deleted file mode 100644
index 5a7a2c3..0000000
--- a/Under-Testing/Website/css/Info.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/css/Warning.png b/Under-Testing/Website/css/Warning.png
deleted file mode 100644
index 0af654e..0000000
--- a/Under-Testing/Website/css/Warning.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/css/chk_off.png b/Under-Testing/Website/css/chk_off.png
deleted file mode 100755
index 1514d51..0000000
--- a/Under-Testing/Website/css/chk_off.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/css/chk_on.png b/Under-Testing/Website/css/chk_on.png
deleted file mode 100755
index a9925a0..0000000
--- a/Under-Testing/Website/css/chk_on.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/css/formCSS.css b/Under-Testing/Website/css/formCSS.css
deleted file mode 100644
index f94bd72..0000000
--- a/Under-Testing/Website/css/formCSS.css
+++ /dev/null
@@ -1,46 +0,0 @@
-/* fancyform styles edited by Refik Hadzialic*/
-html
-{
-font-family:Arial,Helvetica,sans-serif;
-}
-.form label
-{
-display:block;
-padding:0.0em;
-padding-left:22px;
-/*background-position:9px center;*/
-background-repeat:no-repeat;
-/*border:1px solid #252525;*/
-clear:both;cursor:pointer;
-
-font-family:Arial,Helvetica,sans-serif;
-font-style:normal;
-font-size:15px;
-}
-
-.checked
-{
-background-color:#fff;
-background-image:url(chk_on.png);
-}
-
-.unchecked
-{
-background-color:#fff;
-background-image:url(chk_off.png);
-}
-
-.leftcol
-{
-float:left;
-clear:left;
-width:30%;
-}
-
-.rightcol
-{
-float:left;
-clear:right;
-width:50%;
-}
-
diff --git a/Under-Testing/Website/css/info_rhombus.png b/Under-Testing/Website/css/info_rhombus.png
deleted file mode 100644
index 036733e..0000000
--- a/Under-Testing/Website/css/info_rhombus.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/css/information.png b/Under-Testing/Website/css/information.png
deleted file mode 100644
index 93c67f2..0000000
--- a/Under-Testing/Website/css/information.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/css/link.gif b/Under-Testing/Website/css/link.gif
deleted file mode 100644
index daada04..0000000
--- a/Under-Testing/Website/css/link.gif
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/css/tableCSS.css b/Under-Testing/Website/css/tableCSS.css
deleted file mode 100644
index 32a6d71..0000000
--- a/Under-Testing/Website/css/tableCSS.css
+++ /dev/null
@@ -1,147 +0,0 @@
-/* -------------------------------------------------------
-Author: Vitaly Friedman but edited by Refik Hadzialic
-Theme: Green Life - A Fresh, Warm and Readable Table
-URL: http://www.alvit.de/vf
--------------------------------------------------------
-*/
-
- html {
- height: 100%;
- }
- #main {
- float: left;
- width: 350px;
- }
- #sidebar
- {
- float: left;
- width: 700px;
- }
- #footer
- {
- position: absolute;
- bottom: 0;
- padding-top: 0px;
- padding-right: 220px;
- padding-left: 350px;
- border: 0;
- border-style: none;
- }
- body {
- background-color: #F0F0F0;
- font-family: verdana, verdana, ariel;
- height: 100%;
- }
-
- a.pChart
- {
- text-decoration: none;
- color: #6A6A6A;
- }
-
- table {
- font: 11px verdana,verdana, arial;
- margin: 0;
- padding: 0;
- border-collapse: collapse;
- text-align: left;
- color: #333;
- line-height: 19px;
- }
-
- caption {
- font-size: 14px;
- font-weight: bold;
- margin-bottom: 20px;
- text-align: left;
- text-transform: uppercase;
- }
-
- td {
- margin: 0;
- padding: 20px 10px;
- border: 1px dotted #f5f5f5;
- }
-
-
- th {
- font-weight: normal;
- text-transform: uppercase;
- }
-
- thead tr th {
- background-color: #575757;
- padding: 20px 10px;
- color: #fff;
- font-weight: bold;
- border-right: 2px solid #333;
- text-transform: uppercase;
- text-align:center;
- }
-
- tfoot tr th, tfoot tr td {
- background-color: transparent;
- padding: 20px 10px;
- color: #ccc;
- border-top: 1px solid #ccc;
- }
-
- tbody tr th {
- padding: 20px 10px;
- border-bottom: 1px dotted #fafafa;
- }
-
- tr {
- background-color: #FBFDF6;
- }
- tr.odd {
- background-color: #EDF7DC;
- }
-
- tr:hover {
- }
-
- tr:hover td, tr:hover td a, tr:hover th a {
- color: #a10000;
- }
-
- td:hover {
- }
-
- tr:hover th a:hover {
- background-color: #F7FBEF;
- border-bottom: 2px solid #86C200;
- }
-
- table a {
- color: #608117;
- background-image: none;
- text-decoration: none;
- border-bottom: 1px dotted #8A8F95;
- padding: 2px;
- padding-right: 12px; background: transparent url(link.gif) no-repeat 100% 50%;
- }
-
- table a:hover {
- color: #BBC4CD;
- background-image: none;
- text-decoration: none;
- border-bottom: 3px solid #333;
- padding: 2px;
- padding-right: 12px; color: #A2A2A2; background: transparent url(link.gif) no-repeat 100% 50%;
- }
-
- table a:visited {
- text-decoration: none;
- border-bottom: 1px dotted #333;
- text-decoration: none;
- padding-right: 12px; color: #A2A2A2; background: transparent url(visitedLink.gif) no-repeat 100% 50%;
- }
-
- table a:visited:hover {
- background-image: none;
- text-decoration: none;
- border-bottom: 3px solid #333;
- padding: 2px;
- padding-right: 12px; color: #A2A2A2; background: transparent url(visitedLink.gif) no-repeat 100% 50%;
- }
diff --git a/Under-Testing/Website/css/tooltip.css b/Under-Testing/Website/css/tooltip.css
deleted file mode 100644
index 3a50734..0000000
--- a/Under-Testing/Website/css/tooltip.css
+++ /dev/null
@@ -1,33 +0,0 @@
-.tooltip {
- border-bottom: 1px dotted #000000; color: #000000; outline: none;
- cursor: help; text-decoration: none;
- position: relative;
- }
- .tooltip span {
- margin-left: -999em;
- position: absolute;
- }
- .tooltip:hover span {
- border-radius: 5px 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px;
- box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.1); -webkit-box-shadow: 5px 5px rgba(0, 0, 0, 0.1); -moz-box-shadow: 5px 5px rgba(0, 0, 0, 0.1);
- font-family: Calibri, Tahoma, Geneva, sans-serif;
- position: absolute; left: 1em; top: 2em; z-index: 99;
- margin-left: 0; width: 250px;
- }
- .tooltip:hover img {
- border: 0; margin: -10px 0 0 -55px;
- float: left; position: absolute;
- }
- .tooltip:hover em {
- font-family: Candara, Tahoma, Geneva, sans-serif; font-size: 1.2em; font-weight: bold;
- display: block; padding: 0.2em 0 0.6em 0;
- }
- .classic { padding: 0.8em 1em; }
- .custom { padding: 0.5em 0.8em 0.8em 2em; }
- * html a:hover { background: transparent; }
- .classic {background: #f8ff88; border: 1px solid #FFAD33; }
- .critical { background: #f8ff88; border: 1px solid #FF3334; }
- .help { background: #f8ff88; border: 1px solid #2BB0D7; }
- .info { background: #f8ff88; border: 1px solid #2BB0D7; }
- .warning { background: #f8ff88; border: 1px solid #FFAD33; }
-
diff --git a/Under-Testing/Website/css/visitedLink.gif b/Under-Testing/Website/css/visitedLink.gif
deleted file mode 100644
index f7f1867..0000000
--- a/Under-Testing/Website/css/visitedLink.gif
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/delayedLoading.js b/Under-Testing/Website/delayedLoading.js
deleted file mode 100644
index b76bbe3..0000000
--- a/Under-Testing/Website/delayedLoading.js
+++ /dev/null
@@ -1,228 +0,0 @@
- /*
- delayedLoader - JS to delay out of sight pictures rendering
-
- Version : 2.0.2
- Made by : Jean-Damien POGOLOTTI
- Last Update : 10/12/10
-
- 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.
- */
-
- var PictureCache = new Array();
- var PictureCount = 0;
- var WaitPicture = "wait.gif";
- var DivClassName = "pChart";
- var DefaultWidth = 70;
- var DefaultHeight = 230;
- var DefaultAlt = "pChart rendered picture";
-
-
- /* Do the DOM document processing */
- function loaderInit()
- {
- WindowSize = getWindowSize();
- WindowHeight = WindowSize[1];
- Offset = getScrollXY();
- HeightOffset = Offset[1];
-
- /* Enumerate the tags */
- Links = document.getElementsByTagName("a");
- for (i = 0; i < Links.length; i++)
- {
- className = Links[i].className;
-
- if ( className == DivClassName )
- {
- ObjectWidth = Links[i].getAttribute("data-pchart-width");
- ObjectHeight = Links[i].getAttribute("data-pchart-height");
- ObjectID = Links[i].id;
- ObjectTop = Links[i].offsetTop;
- ObjectURL = Links[i].href;
- ObjectAlt = Links[i].getAttribute("data-pchart-alt");
-
- if ( ObjectWidth == null ) { ObjectWidth = DefaultWidth; }
- if ( ObjectHeight == null ) { ObjectHeight = DefaultHeight; }
- if ( ObjectAlt == null ) { ObjectAlt = DefaultAlt; }
-
- if (ObjectID == "") { ObjectID = "pChart-"+i; Links[i].id = ObjectID; }
-
- PictureCache[PictureCount] = new Array();
- PictureCache[PictureCount][0] = ObjectID;
- PictureCache[PictureCount][1] = ObjectTop;
- PictureCache[PictureCount][2] = ObjectURL;
- PictureCache[PictureCount][3] = ObjectAlt;
- PictureCache[PictureCount][4] = ObjectWidth;
- PictureCache[PictureCount][5] = ObjectHeight;
-
- PictureCount++;
- }
- }
-
- /* Replace the <A> tags by <DIV> ones and attach the loader */
- for(i=0;i<PictureCount;i++)
- {
- ATag = document.getElementById(PictureCache[i][0]);
- DivTag = document.createElement("div");
- DivID = "pChart-Div"+i; PictureCache[i][0] = DivID;
-
- DivTag.setAttribute("id", DivID);
- DivTag.style.width = PictureCache[i][4];
- DivTag.style.height = PictureCache[i][5];
- DivTag.style.backgroundColor = "#E0E0E0";
-
- DivTag2 = ATag.parentNode.replaceChild(DivTag, ATag);
-
- DivTop = DivTag.offsetTop;
- PictureCache[i][1] = DivTop;
-
- changeOpac(50, i);
- changeContent("<img src='"+WaitPicture+"' width=24 height=24 alt=''/>",i);
-
- if ( HeightOffset + WindowHeight > PictureCache[i][1] ) { triggerVisible(i); }
- }
- }
-
- /* Replace the contents of the delayed loading DIV */
- function changeContent(html, id)
- { DivID = PictureCache[id][0]; document.getElementById(DivID).innerHTML = html; }
-
- /* Trigger the picture rendering when the pChart DIV became visible */
- function triggerVisible(PictureID)
- {
- if ( !PictureCache[PictureID][6] == true )
- {
- PictureCache[PictureID][6] = true;
- ajaxRender(PictureCache[PictureID][2],PictureID);
- }
- }
-
- /* Catch the navigator window scrolling event */
- function scrollEvent()
- {
- WindowSize = getWindowSize();
- WindowHeight = WindowSize[1];
- Offset = getScrollXY();
- HeightOffset = Offset[1];
-
- for(i=0;i<=PictureCount-1;i++) { if ( HeightOffset + WindowHeight > PictureCache[i][1] ) { triggerVisible(i); } }
- }
-
- /* Cross browser X/Y window offset gatherer */
- function getScrollXY()
- {
- var scrOfX = 0, scrOfY = 0;
-
- if( typeof( window.pageYOffset ) == 'number' )
- { scrOfY = window.pageYOffset; scrOfX = window.pageXOffset; }
- else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) )
- { scrOfY = document.body.scrollTop; scrOfX = document.body.scrollLeft; }
- else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) )
- { scrOfY = document.documentElement.scrollTop; scrOfX = document.documentElement.scrollLeft; }
-
- return [ scrOfX, scrOfY ];
- }
-
- /* Cross browser X/Y window size gatherer */
- function getWindowSize()
- {
- var myWidth = 0, myHeight = 0;
-
- if( typeof( window.innerWidth ) == 'number' )
- { myWidth = window.innerWidth; myHeight = window.innerHeight; }
- else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
- { myWidth = document.documentElement.clientWidth; myHeight = document.documentElement.clientHeight; }
- else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) )
- { myWidth = document.body.clientWidth; myHeight = document.body.clientHeight; }
-
- return [ myWidth, myHeight ];
- }
-
- /* Cross browser alpha transparency changer */
- function changeOpac(opacity, id)
- {
- DivID = PictureCache[id][0];
-
- var object = document.getElementById(DivID).style;
- object.opacity = (opacity / 100);
- object.MozOpacity = (opacity / 100);
- object.KhtmlOpacity = (opacity / 100);
- object.filter = "alpha(opacity=" + opacity + ")";
- }
-
- /* Shade in-out function */
- function opacity(id, opacStart, opacEnd, millisec)
- {
- var speed = Math.round(millisec / 100);
- var timer = 0;
-
- if(opacStart > opacEnd)
- {
- for(i = opacStart; i >= opacEnd; i--)
- {
- setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
- timer++;
- }
- }
- else if(opacStart < opacEnd)
- {
- for(i = opacStart; i <= opacEnd; i++)
- {
- setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
- timer++;
- }
- }
- }
-
- /* Start the loader */
- function StartFade(PictureID)
- {
- Loader = new Image();
- URL = PictureCache[PictureID][2];
- Loader.src = URL;
- setTimeout("CheckLoadingStatus("+PictureID+")", 200);
- }
-
- /* check the picture loading status */
- function CheckLoadingStatus(PictureID)
- {
- DivID = PictureCache[PictureID][0];
- URL = PictureCache[PictureID][2];
- Alt = PictureCache[PictureID][3];
-
- if ( Loader.complete == true )
- {
- changeOpac(0, PictureID);
- HTMLResult = "<center><img src='" + URL + "' alt='"+Alt+"'/></center>";
- document.getElementById(DivID).innerHTML = HTMLResult;
-
- opacity(PictureID,0,100,100);
- }
- else
- setTimeout("CheckLoadingStatus("+PictureID+")", 200);
- }
-
- /* Compute the pChart picture in background */
- function ajaxRender(URL,PictureID)
- {
- var xmlhttp=false;
- /*@cc_on @*/
- /*@if (@_jscript_version >= 5)
- try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } }
- @end @*/
-
- if (!xmlhttp && typeof XMLHttpRequest!='undefined')
- { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp=false; } }
-
- if (!xmlhttp && window.createRequest)
- { try { xmlhttp = window.createRequest(); } catch (e) { xmlhttp=false; } }
-
- xmlhttp.open("GET", URL,true);
-
- xmlhttp.onreadystatechange=function()
- { if (xmlhttp.readyState==4) { StartFade(PictureID); } }
- xmlhttp.send(null)
- }
diff --git a/Under-Testing/Website/devconf.php b/Under-Testing/Website/devconf.php
deleted file mode 100644
index bd13067..0000000
--- a/Under-Testing/Website/devconf.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-
-//Connection stuff
-//DB
-include 'dbconnection.php';
-
-//Socket
-$port = 34500;
-$ip = 'localhost';
-
-$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql');
-mysql_select_db($dbname);
-//End of connection stuff
-include 'mutexFunctions.php'; //mutex functions, isfree, lock and release
-
-
-$nameOfLock = 'Webpage';
-$timeToKeepTheMutex = 360;
-
-$locking = isLocked($nameOfLock);//Check if the webpage is already open
-if ($locking == '1') //1 means nobody is on the website
- {
-
- $lockMe = Lock($nameOfLock,$timeToKeepTheMutex); //Set a mutex for the webpage
- if ($lockMe == '1')
- {
-
- $softwareLock = 'SoftwareStarted';
- $softwareRunning = isLocked($softwareLock);
- if($softwareRunning == '1') //1 means software is not started yet, start it
- {
-
- $startApp = fsockopen($ip, 34600, $errno, $error, 5);
- if (!$startApp)
- {
- printf('THE SOFTWARE THAT SHOULD RUN IN BACKGROUND IS NOT RUNNING!');
- }
- else
- {
-
- socket_set_timeout( $startApp, 50);
- fwrite($startApp, "START APP");
- usleep(2500);
- fclose($startApp);
- }
- sleep(6);
- $softwareRunning1 = isLocked($softwareLock);
- if($softwareRunning1 == '0')
- {
- $fp = fsockopen($ip, $port, $errno, $error, 5);
- if (!$fp)
- {
- echo 'Could not open the socket or connect to the testing software!';
-
- }
- else
- {
-
- socket_set_timeout($fp,50);
- fwrite($fp, "UPDATE DEVICE");
- if(!feof($fp))
- {
- while(!feof($fp))
- {
- $received = fgets($fp, 128);
- if ($received == "CONFIRM\n")
- {
- flush();
- }
- elseif ($received == "TEST DONE\n")
- {
- flush();
- usleep(100);
- echo 'Update device Done';
- fwrite($fp, 'DISCONNECT');
- break;
- }
- else {
- flush();
- usleep(100);
- echo ''.$received;
- }
-
- }
- }
- }
- fclose($fp);
- }
- elseif($softwareRunning1 == '1')
- {
- echo 'Testing software was not started(didn\'t obtain the lock)! Check it!';
- }
- else
- {
- echo 'Testing software didn\'t obtain the lock';
- }
-
-
- }
- elseif($softwareRunning == '0') //0 means the software is still running in the background
- {
- echo 'Testing software is still running! Maybe you should kill it (if not started manually!)';
- }
- else
- {
- echo 'We have an unknown error! Refresh te web page!';
- }
- }
- elseif($lockMe == '0')
- {
- echo 'Someone was faster than you';
- }
- else
- {
-
- echo 'We have an error here';
- }
- }
-
-elseif ($locking == '0') //0 means somebody is already on the web site
- {
- echo 'Somebody is using the web site already!' . "<br>";
- }
-else
- {
- echo 'We have some serious error here';
- }
-?>
-
-
diff --git a/Under-Testing/Website/devconfig.php b/Under-Testing/Website/devconfig.php
deleted file mode 100644
index dc35163..0000000
--- a/Under-Testing/Website/devconfig.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<!DOCTYPE html>
-<html>
-
-<head>
- <title>GSM selftest Software</title>
- <meta name="generator" content="BBEdit 9.6" />
- <link rel="stylesheet" href="css/tooltip.css" type="text/css" media="screen">
-</head>
-
-<body background="Images/BackGround.jpg">
-
-<FORM name="testForm" form action="devconf.php" method="POST">
- <table style="width:50%; margin:auto" border="0">
- <tr>
- <td height="100px" align="center"><a href="index.php" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">HOME</font></a></td>
- <td height="100px" align="center"><a href="about.html" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">About Us</font></a></td>
- <td height="120px" align="center"><a href="report.pdf" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">Help</font></a></td>
- </tr>
-
- <tr>
-
- <td height="45px" align="right">
-
-
- </td>
- <td>
- </td>
- <td height="45px" align="left"></td>
-
- </tr>
- <tr height="50px">
- </tr>
- </FORM>
- <tr>
- <table style="width:50%; margin:auto" border="0">
- <tr>
- <td height="130px" align="center" valign="bottom">
- <a href="devconfigAuto.php" STYLE="TEXT-DECORATION: NONE" onclick="this.style.display='none'; return true;"> <img src="Images/AutoIcon.png"></img></br></a>
-
- <font size="3" face="Century Gothic" color="LightGray" align ="center">Automatic Configuration</font>
- </td>
- <td height="130px" align="center" valign="bottom">
- <a href="devconfigManual.php" STYLE="TEXT-DECORATION: NONE"><img src="Images/ManualIcon.png"></img></br></a>
- <font size="3" face="Century Gothic" color="LightGray" align ="center">Manual Configuration</font>
- </td>
- </tr>
- </table>
- </tr>
-
- <tr>
- <td height="200px" align="center"></td>
- <td height="200px" align="center"></td>
- <td height="200px" align="center"></td>
- </tr>
-
- <tr>
- <table style="width:100%; margin-top: -10px; height: 300px; align: center" valign="bottom" border="0">
- <tr>
- <td height="100px" align="center" valign="bottom"><font size="1" face="Century Gothic" color="LightGray">Albert-Ludwig University of Freiburg 2011</font></td>
- </tr>
- </table>
- </tr>
- </table>
-
-
-</body>
-</html>
diff --git a/Under-Testing/Website/devconfigAuto.php b/Under-Testing/Website/devconfigAuto.php
deleted file mode 100644
index c1473ed..0000000
--- a/Under-Testing/Website/devconfigAuto.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<!DOCTYPE html>
-<html>
-
-<head>
- <title>GSM selftest Software</title>
- <meta name="generator" content="BBEdit 9.6" />
- <link rel="stylesheet" href="css/tooltip.css" type="text/css" media="screen">
-
-</head>
-
-<body background="Images/BackGround.jpg">
-
-<FORM name="testForm" form action="devconf.php" method="POST">
- <table style="width:50%; margin:auto" border="0">
- <tr>
- <td height="100px" align="center"><a href="index.php" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">HOME</font></a></td>
- <td height="100px" align="center"><a href="about.html" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">About Us</font></a></td>
- <td height="120px" align="center"><a href="report.pdf" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">Help</font></a></td>
- </tr>
-
- <tr>
-
- <td height="45px" align="right">
- <a href="devconfigAuto.php" STYLE="TEXT-DECORATION: NONE;"onclick="this.style.display='None'; return true"><img src="Images/AutoIcon.png"></img></a>
- </td>
- <td>
- </td>
- <td height="45px" align="left">
- <a href="devconfigManual.php" STYLE="TEXT-DECORATION: NONE"><img src="Images/ManualIcon.png"></img></a>
- </td>
-
- </tr>
- <tr height="50px">
- </tr>
- </FORM>
- <tr>
- <table style="width:50%; margin:auto" border="0">
- <tr>
- <td height="100px" align="center" valign="bottom">
- <font size="4" face="Century Gothic" color="LightGray">
- <?php include("devconf.php"); ?>
- </font>
- </td>
- </tr>
- </table>
-
- </tr>
-
- <tr>
- <td height="200px" align="center"></td>
- <td height="200px" align="center"></td>
- <td height="200px" align="center"></td>
- </tr>
-
- <tr>
- <table style="width:100%; margin-top: -10px; height: 300px; align: center" valign="bottom" border="0">
- <tr>
- <td height="100px" align="center" valign="bottom"><font size="1" face="Century Gothic" color="LightGray">Albert-Ludwig University of Freiburg 2011</td></font>
- </tr>
- </table>
- </tr>
- </table>
-
-
-</body>
-</html>
diff --git a/Under-Testing/Website/devconfigManual.php b/Under-Testing/Website/devconfigManual.php
deleted file mode 100644
index 3f58b2f..0000000
--- a/Under-Testing/Website/devconfigManual.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<html>
-
-<head>
- <title>GSM selftest Software</title>
- <meta name="generator" content="BBEdit 9.6" />
- <link rel="stylesheet" href="css/tooltip.css" type="text/css" media="screen">
-</head>
-
-<body background="Images/BackGround.jpg">
-
-<!--<FORM name="testForm" form action="devconf.php" method="POST">-->
- <table style="width:50%; margin:auto" border="0">
- <tr>
- <td height="100px" align="center"><a href="index.php" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">HOME</font></a></td>
- <td height="100px" align="center"><a href="about.html" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">About Us</font></a></td>
- <td height="120px" align="center"><a href="report.pdf" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">Help</font></a></td>
- </tr>
-
- <tr>
-
- <td height="45px" align="right">
- <a href="devconfigAuto.php" STYLE="TEXT-DECORATION: NONE" onclick="this.style.display='none'; return true;"> <img src="Images/AutoIcon.png"></img></a>
- </td>
- <td>
- </td>
- <td height="45px" align="left">
- <a href="devconfigManual.php" STYLE="TEXT-DECORATION: NONE"> <img src="Images/ManualIcon.png"></img></a>
-
- </td>
-
- </tr>
- <tr height="50px">
- </tr>
- <!--</FORM>-->
- <tr>
- <?php include("main.php"); ?>
- </tr>
-
- <tr>
- <td height="200px" align="center"></td>
- <td height="200px" align="center"><?php $message ?></td>
- <td height="200px" align="center"></td>
- </tr>
-
- <tr>
- <table style="width:100%; margin-top: -10px; height: 300px; align: center" valign="bottom" border="0">
- <tr>
- <td height="100px" align="center" valign="bottom"><font size="1" face="Century Gothic" color="LightGray">Albert-Ludwig University of Freiburg 2011</td>
- </tr>
- </table>
- </tr>
- </table>
-
-
-</body>
-</html>
diff --git a/Under-Testing/Website/fonts/Bedizen.ttf b/Under-Testing/Website/fonts/Bedizen.ttf
deleted file mode 100644
index d115733..0000000
--- a/Under-Testing/Website/fonts/Bedizen.ttf
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/fonts/Forgotte.ttf b/Under-Testing/Website/fonts/Forgotte.ttf
deleted file mode 100644
index a2f7f4a..0000000
--- a/Under-Testing/Website/fonts/Forgotte.ttf
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/fonts/GeosansLight.ttf b/Under-Testing/Website/fonts/GeosansLight.ttf
deleted file mode 100644
index 055932a..0000000
--- a/Under-Testing/Website/fonts/GeosansLight.ttf
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/fonts/MankSans.ttf b/Under-Testing/Website/fonts/MankSans.ttf
deleted file mode 100644
index a6146a9..0000000
--- a/Under-Testing/Website/fonts/MankSans.ttf
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/fonts/Silkscreen.ttf b/Under-Testing/Website/fonts/Silkscreen.ttf
deleted file mode 100644
index ae4425d..0000000
--- a/Under-Testing/Website/fonts/Silkscreen.ttf
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/fonts/advent_light.ttf b/Under-Testing/Website/fonts/advent_light.ttf
deleted file mode 100644
index 514030a..0000000
--- a/Under-Testing/Website/fonts/advent_light.ttf
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/fonts/calibri.ttf b/Under-Testing/Website/fonts/calibri.ttf
deleted file mode 100644
index 8b6e3c9..0000000
--- a/Under-Testing/Website/fonts/calibri.ttf
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/fonts/pf_arma_five.ttf b/Under-Testing/Website/fonts/pf_arma_five.ttf
deleted file mode 100644
index db04ec3..0000000
--- a/Under-Testing/Website/fonts/pf_arma_five.ttf
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/fonts/verdana.ttf b/Under-Testing/Website/fonts/verdana.ttf
deleted file mode 100644
index 5a059d2..0000000
--- a/Under-Testing/Website/fonts/verdana.ttf
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/blackberry_dunno.png b/Under-Testing/Website/icons/blackberry_dunno.png
deleted file mode 100644
index 4ee9ee0..0000000
--- a/Under-Testing/Website/icons/blackberry_dunno.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/blackberry_fail.png b/Under-Testing/Website/icons/blackberry_fail.png
deleted file mode 100644
index 650d942..0000000
--- a/Under-Testing/Website/icons/blackberry_fail.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/blackberry_work.png b/Under-Testing/Website/icons/blackberry_work.png
deleted file mode 100644
index 3fe1d09..0000000
--- a/Under-Testing/Website/icons/blackberry_work.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/box_dunno.png b/Under-Testing/Website/icons/box_dunno.png
deleted file mode 100644
index 744ec7a..0000000
--- a/Under-Testing/Website/icons/box_dunno.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/box_fail.png b/Under-Testing/Website/icons/box_fail.png
deleted file mode 100644
index 3398e05..0000000
--- a/Under-Testing/Website/icons/box_fail.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/box_work.png b/Under-Testing/Website/icons/box_work.png
deleted file mode 100644
index 666fced..0000000
--- a/Under-Testing/Website/icons/box_work.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/server_dunno.png b/Under-Testing/Website/icons/server_dunno.png
deleted file mode 100644
index 588514e..0000000
--- a/Under-Testing/Website/icons/server_dunno.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/server_fail.png b/Under-Testing/Website/icons/server_fail.png
deleted file mode 100644
index a699864..0000000
--- a/Under-Testing/Website/icons/server_fail.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/server_work.png b/Under-Testing/Website/icons/server_work.png
deleted file mode 100644
index 210979f..0000000
--- a/Under-Testing/Website/icons/server_work.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/sip_dunno.png b/Under-Testing/Website/icons/sip_dunno.png
deleted file mode 100644
index e494a61..0000000
--- a/Under-Testing/Website/icons/sip_dunno.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/sip_fail.png b/Under-Testing/Website/icons/sip_fail.png
deleted file mode 100644
index 02d7029..0000000
--- a/Under-Testing/Website/icons/sip_fail.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/sip_work.png b/Under-Testing/Website/icons/sip_work.png
deleted file mode 100644
index 5774487..0000000
--- a/Under-Testing/Website/icons/sip_work.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/telephone_dunno.png b/Under-Testing/Website/icons/telephone_dunno.png
deleted file mode 100644
index 2ac9dd6..0000000
--- a/Under-Testing/Website/icons/telephone_dunno.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/telephone_fail.png b/Under-Testing/Website/icons/telephone_fail.png
deleted file mode 100644
index 222050d..0000000
--- a/Under-Testing/Website/icons/telephone_fail.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/telephone_work.png b/Under-Testing/Website/icons/telephone_work.png
deleted file mode 100644
index 5086dd2..0000000
--- a/Under-Testing/Website/icons/telephone_work.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/uni-network_dunno.png b/Under-Testing/Website/icons/uni-network_dunno.png
deleted file mode 100644
index 7d99f0e..0000000
--- a/Under-Testing/Website/icons/uni-network_dunno.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/uni-network_fail.png b/Under-Testing/Website/icons/uni-network_fail.png
deleted file mode 100644
index 3da0a70..0000000
--- a/Under-Testing/Website/icons/uni-network_fail.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/icons/uni-network_work.png b/Under-Testing/Website/icons/uni-network_work.png
deleted file mode 100644
index fdc7989..0000000
--- a/Under-Testing/Website/icons/uni-network_work.png
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/index.php b/Under-Testing/Website/index.php
deleted file mode 100644
index bb4b579..0000000
--- a/Under-Testing/Website/index.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-
-<head>
- <title>GSM selftest Software</title>
- <meta name="generator" content="BBEdit 9.6" />
-</head>
-
-<body onUnload="window.location.href=thisPage.html;" background="Images/BackGround.jpg" style="height: 100%;">
-
-<FORM name="testForm" form action="mutexSmartTest.php" method="POST">
- <table style="width:50%; height: 100%; margin:auto;" border="0">
- <tr>
- <td height="120px" align="center"><a href="index.php" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">HOME</font></a></td>
- <td height="120px" align="center"><a href="about.html" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">About Us</font></a></td>
- <td height="120px" align="center"><a href="report.pdf" STYLE="TEXT-DECORATION: NONE"><font size="3" face="Century Gothic" color="LightGray">Help</font></a></td>
- </tr>
-
- <tr>
- <td height="80px" align="center"></td>
- </tr>
-
- <tr>
- <!--<td height="100px" align="center"><INPUT type="image" value="DeviceConfig" name="DeviceConf" src="Images/MobilePhoneIcon.png"></td>-->
- <td height="100px" align="center"><a href="devconfig.php" STYLE="TEXT-DECORATION: NONE"> <img src="Images/MobilePhoneIcon.png"></img></td>
- <td height="100px" align="center"><INPUT type="image" value="Smart test" name="smart" src="Images/SmartIcon.png" onclick="this.style.display='none'; return true;"></td>
- <td height="100px" align="center"><a href="TaskTest.html" STYLE="TEXT-DECORATION: NONE"> <img src="Images/ChooseIcon.png"></img></td>
- <!--<td height="100px" align="center"><INPUT type="image" value="Smart test" name="smart" src="Images/ChooseIcon.png"></td>-->
- </tr>
-
- <tr>
- <td height="100px" align="center"><font size="4" face="Century Gothic" color="white">Device Configuration</font></td>
- <td height="100px" align="center"><font size="4" face="Century Gothic" color="white">Smart Test</font></td>
- <td height="100px" align="center"><font size="4" face="Century Gothic" color="white">Choose The Test</font></td>
- </tr>
-
- <tr>
- <table style="width:100%; margin-top: -10px; height: 300px; align: center" valign="bottom" border="0">
- <tr>
- <td height="100px" align="center" valign="bottom"><font size="1" face="Century Gothic" color="LightGray">Albert-Ludwig University of Freiburg 2011</td>
- </tr>
- </table>
- </tr>
- </table>
-</FORM>
-
-</body>
-</html>
diff --git a/Under-Testing/Website/insertData.php b/Under-Testing/Website/insertData.php
deleted file mode 100644
index 2facf1c..0000000
--- a/Under-Testing/Website/insertData.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?
-
-function getNewTaskNo()
-{
- $sql = "SELECT MAX(taskNo) FROM TaskTable"; //the SQL command to find the max value in taskNo
- $execute = mysql_query($sql); //execute the command
- $result = mysql_result($execute,0);
-
- if ($result == NULL)
- {
- // there is no single job in the table
- return 1;
- }
- else
- {
- //increment the new taskNo
- return $result + 1;
- }
-}
-
-
-function insertTask($taskNo, $from, $to)
-{
- $trans = "START TRANSACTION;";
- $execute = mysql_query($trans);
-
- if ($execute!=1)
- {
- return 3; //could not start transaction
- }
-
- $sql = "INSERT INTO `TaskTable` (`taskNo`, `from`, `to`) VALUES($taskNo, '$from', '$to')";
- $execute = mysql_query($sql); //insert new task into the TaskTable
-
- if ($execute == 1) //I added to the DB the task!
- {
- $sql = "SELECT @taskID := LAST_INSERT_ID()"; //find the last taskId
- $execute = mysql_query($sql);
- $taskId = mysql_result($execute,0); //I have the last taskId which I will use to insert it into TempTaskTable
-
- $sql = "INSERT INTO `TempTaskTable` (`taskID`, `taskNo`, `from`, `to`) VALUES($taskId, $taskNo, '$from', '$to')";
- $execute = mysql_query($sql); //insert new task into the TempTaskTable
-
- if ($execute == 1)
- {
- $trans = "COMMIT;"; //command to end the transaction
- $execute = mysql_query($trans);//finish the transaction
-
- if ($execute == 1)
- {
- return 1; //task was successfuly added to both tables, TaskTable and TempTaskTable
- }
- else
- {
- return 0; //nothing was added to the tables
- }
- }
- else
- {
- return 2; //the task is in the TaskTable but not in TempTaskTable
- }
- }
- else
- {
- return 0; //nothing was added to the table, some error occured
- }
-}
-
-?>
diff --git a/Under-Testing/Website/insertdevice.php b/Under-Testing/Website/insertdevice.php
deleted file mode 100644
index 7875891..0000000
--- a/Under-Testing/Website/insertdevice.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-include 'dbconnection.php';
-
-$db = mysql_connect($dbhost,$dbuser,$dbpass);
-mysql_select_db($dbname,$db);
-
-$link = $db;
-if (!$link) {
- die('Could not connect: ' . mysql_error());
-}
-
-else {
- $sql="UPDATE DeviceAddressTable SET portName = '$_REQUEST[portname]', number = '$_REQUEST[number]' WHERE deviceName = '$_REQUEST[device]'";
-
- if($result = mysql_query($sql ,$db))
- {
- $message = '<font size="3" face="Century Gothic" color="LightGray"> UPDATE Device Succeed</font>';
- }
- else
- {
- $message = 'ERROR: '.mysql_error();
- }
- header('Location: http://132.230.4.202/tricode/devconfigManual.php');
- }
-
-mysql_close($con)
-
-?>
diff --git a/Under-Testing/Website/loader.gif b/Under-Testing/Website/loader.gif
deleted file mode 100644
index 240d4e1..0000000
--- a/Under-Testing/Website/loader.gif
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/main.php b/Under-Testing/Website/main.php
deleted file mode 100644
index 3a5bd25..0000000
--- a/Under-Testing/Website/main.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<SCRIPT language=Javascript>
-
- function isNumberKey(evt)
- {
- var charCode = (evt.which) ? evt.which : event.keyCode
- if (charCode > 31 && (charCode < 48 || charCode > 57))
- return false;
-
- return true;
- }
-
- function ValidateForm(form){
- ErrorText= "";
- if ( ( form.device[0].checked == false ) && ( form.device[1].checked == false ) && ( form.device[2].checked == false )&& ( form.device[3].checked == false )&& ( form.device[4].checked == false )) {
- alert ( "Please choose your The device" );
- return false;
- }
-
- var port = form.portname.value;
- var ime = form.imei.value;
- var num = form.number.value;
-
- if ((port==null || port=="") && (num==null || num=="")) {alert("* all information must be filled out");return false;}
-}
-</SCRIPT>
-
- <table style="width:50%; margin:auto" border="0">
- <tr>
- <td height="100px" width ="120px" align="left">
- <font size="3" face="Century Gothic" color="LightGray">
- <form name ="insert" action="insertdevice.php" method="POST">
- <input type="radio" name="device" value="GSMRZ1" /> RZ GSM 1<br>
- <input type="radio" name="device" value="GSMext.Eplus" /> E-Plus<br>
- <input type="radio" name="device" value="GSMext.O2" /> O2<br>
- <input type="radio" name="device" value="GSMext.Voda" /> Vodaphone<br>
- <input type="radio" name="device" value="GSMext.Tm" /> T-Mobile<br>
-
- </font>
- </td>
- <td height="100px" width ="100px" align="left">
- <font size="3" face="Century Gothic" color="LightGray">
- Port Address<br>
- IMEI<br>
- Number<br>
- </font>
- </td>
- <td height="100px" width ="90px" align="left">
- <font size="3" face="Century Gothic" color="LightGray">
- : <input type="text" name="portname" /> *</br>
- : <input type="text" name="imei" onkeypress="return isNumberKey(event)"/><br>
- : <input type="text" name="number" onkeypress="return isNumberKey(event)"/> *<br>
- </font>
- </td>
- <td height="100px" width ="50px" align="left">
- <font size="3" face="Century Gothic" color="LightGray">
- <INPUT type="image" value="submit" name="submit" src="Images/SubmitButton.png" onClick="ValidateForm(this.form)"><br />
- </font>
- </td>
-
- </form>
- </tr>
- </table>
-
diff --git a/Under-Testing/Website/mutexFunctions.php b/Under-Testing/Website/mutexFunctions.php
deleted file mode 100644
index af45610..0000000
--- a/Under-Testing/Website/mutexFunctions.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?
-//Mutex functions
-function Lock($lockName,$seconds)
-{
- $sql = "SELECT GET_LOCK('$lockName', $seconds);";
- $res = mysql_query($sql);
- if (!$res)
- {
- die('Could not query:' . mysql_error());
- }
- return mysql_result($res,0);
-}
-
-function IsLocked($lockName)
-{
- $sql = "SELECT IS_FREE_LOCK('$lockName');";
- $res = mysql_query($sql);
- if (!$res)
- {
- die('Could not query:' . mysql_error());
- }
- return mysql_result($res,0);
-}
-
-function ReleaseLock($lockName)
-{
- $sql = "SELECT RELEASE_LOCK('$lockName');";
- $res = mysql_query($sql);
- if (!$res)
- {
- die('Could not query:' . mysql_error());
- }
- return mysql_result($res,0);
-}
-//End of mutex functions
-?>
diff --git a/Under-Testing/Website/mutexSmartTest.php b/Under-Testing/Website/mutexSmartTest.php
deleted file mode 100644
index a44b121..0000000
--- a/Under-Testing/Website/mutexSmartTest.php
+++ /dev/null
@@ -1,1012 +0,0 @@
-<html>
-<head>
-<script src='delayedLoading.js' type="text/javascript"></script>
-<!--ADD HERE ALL THE NEEDED META DATA -->
-<title>Network test live results!</title>
-<link rel="stylesheet" href="css/tableCSS.css" type="text/css" media="screen">
-</head>
-<body onscroll="scrollEvent();" onload="loaderInit();">
-<div>
-<?php
-@apache_setenv('no-gzip',1);
-@ini_set('zlib.output_compression',0);
-@ini_set('implicit_flush',1);
-
-# DB Connection
-include 'dbconnection.php';
-
-# Socket configuration
-$port = 34500;
-$ip = 'localhost';
-
-$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql');
-
-mysql_select_db($dbname);
-
-#mutex functions, isfree, lock and release
-include 'mutexFunctions.php';
-
-
-$nameOfLock = 'Webpage';
-$timeToKeepTheMutex = 360;
-
-#Check if the webpage is already open
-$locking = isLocked($nameOfLock);
-
-#1 means nobody is on the website
-if ($locking == '1')
-{
- $lockMe = Lock($nameOfLock,$timeToKeepTheMutex); //Set a mutex for the webpage
- if ($lockMe == '1') #1 means a successful lock
- {
- #check if the software is running!
- $softwareLock = 'SoftwareStarted';
- $taskAmount= 1;
- $numberofTask =0;
- if($taskAmount != 0 or $taskAmount == 'ON')
- {
- $softwareRunning = isLocked($softwareLock);
- #1 means software is not started yet, start it
- if($softwareRunning == '1')
- {
- $startApp = fsockopen($ip, 34600, $errno, $error, 5);
- if (!$startApp)
- {
- printf('THE SOFTWARE THAT SHOULD RUN IN BACKGROUND IS NOT RUNNING! -- try to start startSoftware.py script under Server-Code folder');
- }
- else
- {
- socket_set_timeout( $startApp, 50); //one should set the number of the longest test, so we can define the timeout
- fwrite($startApp, "START APP");
- usleep(2500);
- fclose($startApp);
-
-
- #sleep till the software starts
- sleep(5);
-
- #try to lock the controller
- $softwareRunning1 = isLocked($softwareLock);
- if($softwareRunning1 == '0') //Software running and waiting for connection!
- {
- //try to open the socket and connect to the software
- $fp = fsockopen($ip, $port, $errno, $error, 5);
- if (!$fp)
- {
- echo 'Could not open the socket or connect to the testing software! Check ports on both sides!';
- }
- else
- {
- socket_set_timeout($fp,50);
- # send message to controller to start the smart test
- fwrite($fp, "SMART TEST");
-
- if(!feof($fp))
- {
- while(!feof($fp))
- {
- #receive data!
- $received = fgets($fp, 128);
-
- if ($received == "CONFIRM\n")
- #we got the confirmation from the controller
- {
- $GSMRZ1 = 0;
- $GSMRZ2 = 0;
- $GSMRZ3 = 0;
-
- $SIP = 0;
- $UNISIP = 0;
- $LANDLINE = 0;
- $LSFKS = 0;
-
- $GSMEE = 0;
- $GSMEV = 0;
- $GSMET = 0;
- $GSMEO = 0;
-
- $SIPP = 0;
- $LANDLINEP = 0;
- $UNISIPP = 0;
- $NANOBTS1P = 0;
- $NANOBTS2P = 0;
-
- echo str_pad(' ',4096).'<br>'."\n";
- ob_implicit_flush(1);
-
- echo '<div id="main">
- <table summary = "Results">
- <thead>
- <tr>
- <th scope = "col"> From: </th>
- <th scope = "col" > To: </th>
- <th scope = "col"> Message: </th>
- <th scope = "col"> Status: </th>
- </tr>
- </thead>
- <tbody>';
- ob_implicit_flush(1);
- sleep(6);
- $pings = mysql_query("select * from PingResultTable where taskNo=(select max(taskNo) from PingResultTable)");
-
- while($row = mysql_fetch_array($pings))
- {
- $SIPP = $row['sipServer'];
- $LANDLINEP = $row['sipGate'];
- $UNISIPP = $row['unisip'];
- $NANOBTS1P = $row['gsmBox1'];
- $NANOBTS2P = $row['gsmBox2'];
- }
- }
- elseif ($received == "TEST DONE\n")
- {
- if ($taskAmount == "ON")
- {
- $taskAmount = "SMART TEST";
- }
-
- echo '</tbody></table>';
- echo '</div>';
- echo '<div id="sidebar">';
-echo "<a class='pChart' href='networkResult.php?S=$SIP&RZ1=$GSMRZ1&RZ2=$GSMRZ2&RZ3=$GSMRZ3&US=$UNISIP&LL=$LANDLINE&LS=$LSFKS&EE=$GSMEE&EV=$GSMEV&ET=$GSMET&EO=$GSMEO&SP=$SIPP&SGP=$LANDLINEP&USP=$UNISIPP&NBP1=$NANOBTS1P&NBP2=$NANOBTS2P' data-pchart-alt='Picture3'>Picture 3</a></div>";
-echo '<div id="footer"><font size ="3" face="Century Gothic" color="black">SMART TEST<br>Number of tasks: '.$numberofTask.'<br> TEST SUCCESSFULLY FINISHED!</font></div>';
- ob_implicit_flush(1);
- usleep(100);
- #tell the testing software it may close
- fwrite($fp, 'DISCONNECT');
- break;
- }
- else
- {
- //parse the received data!
- $numberofTask++;
- $received = str_replace("\n",'',$received);
- $dataForTable = explode("|", $received);
- $callFrom = strtoupper($dataForTable[1]);
- $callTo = strtoupper($dataForTable[2]);
- $testStatus = strtoupper($dataForTable[3]);
-
- if($callFrom == 'SIP' || $callTo == 'SIP')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $SIP = 1;
- $SIPP = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- //Check that SIP already working or not, if working, leave as it is, otherwise update that sip broken. same with LSFKS
- if ($SIP != 1)
- {
- $SIP = 1;
- }
- $SIPP = 1;
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'SIP')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- $SIP = 1;
- $SIPP = 1;
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '999')
- {
- if ($SIP != 1)
- {
- $SIP = -1;
- }
- $SIPP = 2;
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'SIP')
- {
- if ($testStatus == '999')
- {
- if ($SIP != 1)
- {
- $SIP = 0;
- }
- if ($SIPP != 1)
- {
- $SIPP = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998')
- {
- if ($SIP != 1)
- {
- $SIP = -1;
- }
- $SIPP = 2;
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- }
- if($callFrom == 'GSMRZ1' || $callTo == 'GSMRZ1')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMRZ1 = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMRZ1 != 1)
- {
- $GSMRZ1 = -1;
- }
- }
- if ($callFrom == 'GSMRZ1')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ1 != 1)
- {
- $GSMRZ1 = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ1 != 1)
- {
- $GSMRZ1 = 0;
- }
- }
- }
- elseif ($callTo == 'GSMRZ1')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ1 != 1)
- {
- $GSMRZ1 = 0;
- }
- }
- elseif($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ1 != 1)
- {
- $GSMRZ1 = 0;
- }
- }
- }
- }
-
- if($callFrom == 'GSMRZ2' || $callTo == 'GSMRZ2')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMRZ2 = 1;
- $NANOBTS1P = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2 = -1;
- }
- $NANOBTS1P = 1;
- }
- if ($callFrom == 'GSMRZ2')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2= 0;
- }
-
- if ($testStatus == '801')
- {
- $NANOBTS1P= 1;
- }
- if ($testStatus == '999')
- {
- if ($NANOBTS1P != 1)
- {
- $NANOBTS1P= 0;
- }
- }
- }
- elseif ($testStatus == '500')
- {
- $NANOBTS1P = 0;
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2 = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2= 0;
- }
- $NANOBTS1P= 1;
- }
- }
- elseif ($callTo == 'GSMRZ2')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2 = 0;
- }
- if ($testStatus == '802')
- {
- $NANOBTS1P= 1;
- }
- if ($testStatus == '998')
- {
- if ($NANOBTS1P != 1)
- {
- $NANOBTS1P= 0;
- }
- }
- }
- elseif ($testStatus == '501')
- {
- $NANOBTS1P = 0;
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2 = 0;
- }
- }
- elseif($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2 = 0;
- }
- if ($NANOBTS1P != 1)
- {
- $NANOBTS1P= 2;
- }
-
- }
- }
-
- }
-
- if($callFrom == 'GSMRZ3' || $callTo == 'GSMRZ3')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMRZ3 = 1;
- $NANOBTS2P = 1;
- }
- elseif($testStatus == '486')
- {
-
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3 = -1;
- }
- $NANOBTS2P = 1;
- }
- if ($callFrom == 'GSMRZ3')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3= 0;
- }
-
- if ($testStatus == '801')
- {
- $NANOBTS2P= 1;
- }
- if ($testStatus == '999')
- {
- if ($NANOBTS2P != 1)
- {
- $NANOBTS2P= 0;
- }
- }
- }
- elseif ($testStatus == '501')
- {
- $NANOBTS2P = 0;
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3= 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3= 0;
- }
- $NANOBTS2P= 1;
- }
- }
- elseif ($callTo == 'GSMRZ3')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3 = 0;
- }
- if ($testStatus == '802')
- {
- $NANOBTS2P= 1;
- }
- if ($testStatus == '998')
- {
- if ($NANOBTS2P != 1)
- {
- $NANOBTS2P= 0;
- }
- }
- }
- elseif ($testStatus == '501')
- {
- $NANOBTS2P = 0;
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3 = 0;
- }
- }
- elseif($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3 = 0;
- }
- if ($NANOBTS1P != 1)
- {
- $NANOBTS2P= 2;
- }
-
- }
- }
-
- }
- if($callFrom == 'GSMEXT.O2' || $callTo == 'GSMEXT.O2')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMEO = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMEO != 1)
- {
- $GSMEO = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'GSMEXT.O2')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEO != 1)
- {
- $GSMEO = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEO != 1)
- {
- $GSMEO =1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'GSMEXT.O2')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEO != 1)
- {
- $GSMEO = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEO != 1)
- {
- $GSMEO =0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- }
- if($callFrom == 'GSMEXT.VODA' || $callTo == 'GSMEXT.VODA')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMEV = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMEV != 1)
- {
- $GSMEV = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'GSMEXT.VODA')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEV != 1)
- {
- $GSMEV = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEV != 1)
- {
- $GSMEV =1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'GSMEXT.VODA')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEV != 1)
- {
- $GSMEV = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEV != 1)
- {
- $GSMEV =0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- }
-
- if($callFrom == 'GSMEXT.EPLUS' || $callTo == 'GSMEXT.EPLUS')
- {
- if($testStatus == '200')
- {
- $GSMEE = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMEE != 1)
- {
- $GSMEE = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'GSMEXT.EPLUS')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEE != 1)
- {
- $GSMEE = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEE != 1)
- {
- $GSMEE =1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'GSMEXT.EPLUS')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEE != 1)
- {
- $GSMEE = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEE != 1)
- {
- $GSMEE=0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '402')
- {
- if ($GSMEE != 1)
- {
- $GSMEE=0;
- }
- $LSFKS = 1;
- }
- }
- }
-
- if($callFrom == 'GSMEXT.TM' || $callTo == 'GSMEXT.TM')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMET = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMET != 1)
- {
- $GSMET = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'GSMEXT.TM')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMET != 1)
- {
- $GSMET = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMET != 1)
- {
- $GSMET =1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'GSMEXT.TM')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMET != 1)
- {
- $GSMET = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMET != 1)
- {
- $GSMET =0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
-
- }
-
- if($callFrom == 'LANDLINE' || $callTo == 'LANDLINE')
- {
-
- if($testStatus == '200' || $testStatus == '402')
- {
-
- $LANDLINEP = 1;
- $LANDLINE = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- $LANDLINEP = 1;
- if ($LANDLINE != 1)
- {
- $LANDLINE = -1;
- }
- }
- if ($callFrom == 'LANDLINE')
- {
- if ($testStatus == '999')
- {
- if ($LANDLINE != 1)
- {
- $LANDLINE = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- if ($LANDLINEP != 1)
- {
- $LANDLINEP = 2;
- }
- }
- elseif ($testStatus == '500')
- {
- $LANDLINEP = 0;
- if ($LANDLINE != 1)
- {
- $LANDLINE = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- $LANDLINE = 1;
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- $LANDLINEP = 1;
- }
- }
- elseif ($callTo == 'LANDLINE')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($LANDLINE != 1)
- {
- $LANDLINE = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- if ($LANDLINEP != 1)
- {
- $LANDLINEP = 0;
- }
- }
- elseif ($testStatus == '501')
- {
- $LANDLINEP = 0;
- if ($LANDLINE != 1)
- {
- $LANDLINE = 0;
- }
- }
- elseif($testStatus == '998')
- {
- if ($LANDLINE != 1)
- {
- $LANDLINE = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- if ($LANDLINEP != 1)
- {
- $LANDLINEP = 2;
- }
- }
- }
- }
- if($callFrom == 'UNISIP' || $callTo == 'UNISIP')
- {
-
- if($testStatus == '200' || $testStatus == '402')
- {
- $UNISIPP = 1;
- $UNISIP = 1;
- }
- elseif($testStatus == '486')
- {
- $UNISIPP = 1;
- if ($UNISIP != 1)
- {
- $UNISIP = -1;
- }
- }
- if ($callFrom == 'UNISIP')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($UNISIP != 1)
- {
- $UNISIP = -1;
- }
- if ($UNISIPP != 1)
- {
- $UNISIPP = 2;
- }
- }
- elseif ($testStatus == '500')
- {
- $UNISIPP = 0;
- if ($UNISIP != 1)
- {
- $UNISIP = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($UNISIP != 1)
- {
- $UNISIP = 0;
- }
- $UNISIPP = 1;
- }
- }
- if ($callTo == 'UNISIP')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- if ($UNISIP != 1)
- {
- $UNISIP = -1;
- }
- if ($UNISIPP != 1)
- {
- $UNISIPP = 0;
- }
-
- }
- elseif ($testStatus == '501')
- {
- $UNISIPP = 0;
- $UNISIP = 0;
- }
- elseif($testStatus == '999' || $testStatus == '801')
- {
- if ($UNISIP != 1)
- {
- $UNISIP = 0;
- }
- if ($UNISIPP != 1)
- {
- $UNISIPP = 0;
- }
- }
- }
- }
- echo '<tr>
- <th scope = "row" id = "r100">'. $dataForTable[1] . '</th>
- <th scope = "row" id = "r100">'. $dataForTable[2] . '</th>
- <td> ' . $dataForTable[4] . ' </td>
- <td>' . $dataForTable[3] . '</td>
- </tr>';
- ob_implicit_flush(1);
- usleep(100);
- # tesll controller to continue the test
- fwrite($fp, "CONTINUE");
- }
- }
- }
-
- fclose($fp);//close the soccket and the connection
- }
-
- }
- elseif($softwareRunning1 == '1')
- {
- echo 'Controller was not started(didn\'t obtain the lock)! Check it!';
- }
- else
- {
- echo 'Testing software didn\'t obtain the lock';
- }
- } }
- elseif($softwareRunning == '0') //0 means the software is still running in the background
- {
- echo 'Testing software is still running! Maybe you should kill it (if not started manually!)';
- }
- else
- {
- echo 'We have an unknown error! Refresh te web page!';
- }
- }
- else
- {
- echo 'No single test was selected! Please go back and select at least one test';
- }
- }
- elseif($lockMe == '0') //0 means if the attempt timed out (for example, because another client has previously locked the name)
- {
- echo 'Someone was faster than you';
- }
- else
- {
- // # if an error occurred (such as running out of memory or the thread was killed with
- echo 'We have an error here';
- }
-}
-elseif ($locking == '0') //0 means somebody is already on the web site
-{
- echo 'Somebody is using the web site already!' . "<br>";
-}
-else
-{
- echo 'We have some serious error here';
-}
-?>
-</div>
-</body>
-</html>
-
diff --git a/Under-Testing/Website/mutexTry.php b/Under-Testing/Website/mutexTry.php
deleted file mode 100644
index b09c702..0000000
--- a/Under-Testing/Website/mutexTry.php
+++ /dev/null
@@ -1,995 +0,0 @@
-d>
-<script src='delayedLoading.js' type="text/javascript"></script>
-<!--ADD HERE ALL THE NEEDED META DATA -->
-<title>Network test live results!</title>
-<link rel="stylesheet" href="css/tableCSS.css" type="text/css" media="screen">
-</head>
-<body onscroll="scrollEvent();" onload="loaderInit();">
-<div>
-<?php
-@apache_setenv('no-gzip',1);
-@ini_set('zlib.output_compression',0);
-@ini_set('implicit_flush',1);
-
-include 'dbconnection.php';
-
-#Socket Config
-$port = 34500;
-$ip = 'localhost';
-
-$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql');
-
-mysql_select_db($dbname);
-
-include 'mutexFunctions.php'; //mutex functions, isfree, lock and release
-include 'insertData.php'; //insert task functions
-
-$nameOfLock = 'Webpage';
-$timeToKeepTheMutex = 360;
-
-$locking = isLocked($nameOfLock);//Check if the webpage is already open
-
-if ($locking == '1') //1 means nobody is on the website
-{
- $lockMe = Lock($nameOfLock,$timeToKeepTheMutex); //Set a mutex for the webpage
- if ($lockMe == '1') //1 means a successful lock
- {
-
- include 'post.php'; // read posted data and add them to the database
- $softwareLock = 'SoftwareStarted';
-
- if($taskAmount != 0)
- {
- $softwareRunning = isLocked($softwareLock);
- if($softwareRunning == '1') //1 means software is not started yet, start it
- {
- $startApp = fsockopen($ip, 34600, $errno, $error, 5);
- if (!$startApp)
- {
- printf('THE SOFTWARE THAT SHOULD RUN IN BACKGROUND IS NOT RUNNING!');
- }
- else
- {
- socket_set_timeout( $startApp, 50); //one should set the number of the longest test, so we can define the timeout
- fwrite($startApp, "START APP");
- usleep(2500);
- fclose($startApp);
- }
- sleep(5); //sleep till the software starts
- //the software should be running already and set the lock, now we test it and then connect to it!
-
- $softwareRunning1 = isLocked($softwareLock);
- if($softwareRunning1 == '0') //Software running and waiting for connection!
- {
- //try to open the socket and connect to the software
- $fp = fsockopen($ip, $port, $errno, $error, 5);
-
- if (!$fp)
- {
- echo 'Could not open the socket or connect to the testing software! Check ports on both sides!';
- }
- else
- {
- socket_set_timeout($fp,50);
- fwrite($fp, "START TEST");
-
- if(!feof($fp))
- {
- while(!feof($fp))
- {
- $received = fgets($fp, 128); //receive data!
-
- if ($received == "CONFIRM\n") //we got the confirmation from the testing software
- {
- $GSMRZ1 = 0;
- $GSMRZ2 = 0;
- $GSMRZ3 = 0;
-
- $SIP = 0;
- $UNISIP = 0;
- $LANDLINE = 0;
- $LSFKS = 0;
-
- $GSMEE = 0;
- $GSMEV = 0;
- $GSMET = 0;
- $GSMEO = 0;
-
- $SIPP = 2;
- $LANDLINEP = 2;
- $UNISIPP = 2;
- $NANOBTS1P = 2;
- $NANOBTS2P = 2;
- echo str_pad(' ',4096).'<br>'."\n";
- ob_implicit_flush(1);
- echo '<div id="main">
- <table summary = "Results">
- <thead>
- <tr>
- <th scope = "col"> From: </th>
- <th scope = "col" > To: </th>
- <th scope = "col"> Message: </th>
- <th scope = "col"> Status: </th>
- </tr>
- </thead>
- <tbody>';
- ob_implicit_flush(1);
- sleep(6);
- $pings = mysql_query("select * from PingResultTable where taskNo=(select max(taskNo) from PingResultTable)");
-
- while($row = mysql_fetch_array($pings))
- {
- $SIPP = $row['sipServer'];
- $LANDLINEP = $row['sipGate'];
- $UNISIPP = $row['unisip'];
- $NANOBTS1P = $row['gsmBox1'];
- $NANOBTS2P = $row['gsmBox2'];
- }
- }
- elseif ($received == "TEST DONE\n")
- {
-
-
- echo '</tbody></table>';
- echo '</div>';
- echo '<div id="sidebar">';
-echo "<a class='pChart' href='networkResult.php?S=$SIP&RZ1=$GSMRZ1&RZ2=$GSMRZ2&RZ3=$GSMRZ3&US=$UNISIP&LL=$LANDLINE&LS=$LSFKS&EE=$GSMEE&EV=$GSMEV&ET=$GSMET&EO=$GSMEO&SP=$SIPP&SGP=$LANDLINEP&USP=$UNISIPP&NBP1=$NANOBTS1P&NBP2=$NANOBTS2P&TASKID=$taskNo' data-pchart-alt='Picture3'>Picture 3</a></div>";
-echo '<div id="footer"><font size ="3" face="Century Gothic" color="black"> Number of tasks: '.$taskAmount.'<br> Number of tasks tried to add to the DB but had an error: '. $errorAdding .'<br> TEST SUCCESSFULLY FINISHED!</font></div>';
- ob_implicit_flush(1);
- usleep(100);
- fwrite($fp, 'DISCONNECT'); //tell the testing software it may close
- break;
- }
- else
- {
- //parse the received data!
- $received = str_replace("\n",'',$received);
- $dataForTable = explode("|", $received);
- $callFrom = strtoupper($dataForTable[1]);
- $callTo = strtoupper($dataForTable[2]);
- $testStatus = strtoupper($dataForTable[3]);
-
- if($callFrom == 'SIP' || $callTo == 'SIP')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $SIP = 1;
- $SIPP = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- //Check that SIP already working or not, if working, leave as it is, otherwise update that sip broken. same with LSFKS
- if ($SIP != 1)
- {
- $SIP = 1;
- }
- $SIPP = 1;
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'SIP')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- $SIP = 1;
- $SIPP = 1;
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '999')
- {
- if ($SIP != 1)
- {
- $SIP = -1;
- }
- $SIPP = 2;
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'SIP')
- {
- if ($testStatus == '999')
- {
- if ($SIP != 1)
- {
- $SIP = 0;
- }
- if ($SIPP != 1)
- {
- $SIPP = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998')
- {
- if ($SIP != 1)
- {
- $SIP = -1;
- }
- $SIPP = 2;
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- }
- if($callFrom == 'GSMRZ1' || $callTo == 'GSMRZ1')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMRZ1 = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMRZ1 != 1)
- {
- $GSMRZ1 = -1;
- }
- }
- if ($callFrom == 'GSMRZ1')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ1 != 1)
- {
- $GSMRZ1 = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ1 != 1)
- {
- $GSMRZ1 = 0;
- }
- }
- }
- elseif ($callTo == 'GSMRZ1')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ1 != 1)
- {
- $GSMRZ1 = 0;
- }
- }
- elseif($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ1 != 1)
- {
- $GSMRZ1 = 0;
- }
- }
- }
- }
-
- if($callFrom == 'GSMRZ2' || $callTo == 'GSMRZ2')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMRZ2 = 1;
- $NANOBTS1P = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2 = -1;
- }
- $NANOBTS1P = 1;
- }
- if ($callFrom == 'GSMRZ2')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2= 0;
- }
-
- if ($testStatus == '801')
- {
- $NANOBTS1P= 1;
- }
- if ($testStatus == '999')
- {
- if ($NANOBTS1P != 1)
- {
- $NANOBTS1P= 0;
- }
- }
- }
- elseif ($testStatus == '500')
- {
- $NANOBTS1P = 0;
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2 = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2= 0;
- }
- $NANOBTS1P= 1;
- }
- }
- elseif ($callTo == 'GSMRZ2')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2 = 0;
- }
- if ($testStatus == '802')
- {
- $NANOBTS1P= 1;
- }
- if ($testStatus == '998')
- {
- if ($NANOBTS1P != 1)
- {
- $NANOBTS1P= 0;
- }
- }
- }
- elseif ($testStatus == '501')
- {
- $NANOBTS1P = 0;
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2 = 0;
- }
- }
- elseif($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2 = 0;
- }
- if ($NANOBTS1P != 1)
- {
- $NANOBTS1P= 2;
- }
-
- }
- }
-
- }
-
- if($callFrom == 'GSMRZ3' || $callTo == 'GSMRZ3')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMRZ3 = 1;
- $NANOBTS2P = 1;
- }
- elseif($testStatus == '486')
- {
-
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3 = -1;
- }
- $NANOBTS2P = 1;
- }
- if ($callFrom == 'GSMRZ3')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3= 0;
- }
-
- if ($testStatus == '801')
- {
- $NANOBTS2P= 1;
- }
- if ($testStatus == '999')
- {
- if ($NANOBTS2P != 1)
- {
- $NANOBTS2P= 0;
- }
- }
- }
- elseif ($testStatus == '501')
- {
- $NANOBTS2P = 0;
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3= 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3= 0;
- }
- $NANOBTS2P= 1;
- }
- }
- elseif ($callTo == 'GSMRZ3')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3 = 0;
- }
- if ($testStatus == '802')
- {
- $NANOBTS2P= 1;
- }
- if ($testStatus == '998')
- {
- if ($NANOBTS2P != 1)
- {
- $NANOBTS2P= 0;
- }
- }
- }
- elseif ($testStatus == '501')
- {
- $NANOBTS2P = 0;
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3 = 0;
- }
- }
- elseif($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3 = 0;
- }
- if ($NANOBTS1P != 1)
- {
- $NANOBTS2P= 2;
- }
-
- }
- }
-
- }
- if($callFrom == 'GSMEXT.O2' || $callTo == 'GSMEXT.O2')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMEO = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMEO != 1)
- {
- $GSMEO = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'GSMEXT.O2')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEO != 1)
- {
- $GSMEO = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEO != 1)
- {
- $GSMEO =1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'GSMEXT.O2')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEO != 1)
- {
- $GSMEO = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEO != 1)
- {
- $GSMEO =0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- }
- if($callFrom == 'GSMEXT.VODA' || $callTo == 'GSMEXT.VODA')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMEV = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMEV != 1)
- {
- $GSMEV = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'GSMEXT.VODA')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEV != 1)
- {
- $GSMEV = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEV != 1)
- {
- $GSMEV =1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'GSMEXT.VODA')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEV != 1)
- {
- $GSMEV = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEV != 1)
- {
- $GSMEV =0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- }
-
- if($callFrom == 'GSMEXT.EPLUS' || $callTo == 'GSMEXT.EPLUS')
- {
- if($testStatus == '200')
- {
- $GSMEE = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMEE != 1)
- {
- $GSMEE = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'GSMEXT.EPLUS')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEE != 1)
- {
- $GSMEE = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEE != 1)
- {
- $GSMEE =1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'GSMEXT.EPLUS')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEE != 1)
- {
- $GSMEE = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEE != 1)
- {
- $GSMEE=0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '402')
- {
- if ($GSMEE != 1)
- {
- $GSMEE=0;
- }
- $LSFKS = 1;
- }
- }
- }
-
- if($callFrom == 'GSMEXT.TM' || $callTo == 'GSMEXT.TM')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMET = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMET != 1)
- {
- $GSMET = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'GSMEXT.TM')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMET != 1)
- {
- $GSMET = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMET != 1)
- {
- $GSMET =1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'GSMEXT.TM')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMET != 1)
- {
- $GSMET = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMET != 1)
- {
- $GSMET =0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
-
- }
-
- if($callFrom == 'LANDLINE' || $callTo == 'LANDLINE')
- {
-
- if($testStatus == '200' || $testStatus == '402')
- {
-
- $LANDLINEP = 1;
- $LANDLINE = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- $LANDLINEP = 1;
- if ($LANDLINE != 1)
- {
- $LANDLINE = -1;
- }
- }
- if ($callFrom == 'LANDLINE')
- {
- if ($testStatus == '999')
- {
- if ($LANDLINE != 1)
- {
- $LANDLINE = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- if ($LANDLINEP != 1)
- {
- $LANDLINEP = 2;
- }
- }
- elseif ($testStatus == '500')
- {
- $LANDLINEP = 0;
- if ($LANDLINE != 1)
- {
- $LANDLINE = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- $LANDLINE = 1;
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- $LANDLINEP = 1;
- }
- }
- elseif ($callTo == 'LANDLINE')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($LANDLINE != 1)
- {
- $LANDLINE = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- if ($LANDLINEP != 1)
- {
- $LANDLINEP = 0;
- }
- }
- elseif ($testStatus == '501')
- {
- $LANDLINEP = 0;
- if ($LANDLINE != 1)
- {
- $LANDLINE = 0;
- }
- }
- elseif($testStatus == '998')
- {
- if ($LANDLINE != 1)
- {
- $LANDLINE = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- if ($LANDLINEP != 1)
- {
- $LANDLINEP = 2;
- }
- }
- }
- }
- if($callFrom == 'UNISIP' || $callTo == 'UNISIP')
- {
-
- if($testStatus == '200' || $testStatus == '402')
- {
- $UNISIPP = 1;
- $UNISIP = 1;
- }
- elseif($testStatus == '486')
- {
- $UNISIPP = 1;
- if ($UNISIP != 1)
- {
- $UNISIP = -1;
- }
- }
- if ($callFrom == 'UNISIP')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($UNISIP != 1)
- {
- $UNISIP = -1;
- }
- if ($UNISIPP != 1)
- {
- $UNISIPP = 2;
- }
- }
- elseif ($testStatus == '500')
- {
- $UNISIPP = 0;
- if ($UNISIP != 1)
- {
- $UNISIP = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($UNISIP != 1)
- {
- $UNISIP = 0;
- }
- $UNISIPP = 1;
- }
- }
- if ($callTo == 'UNISIP')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- if ($UNISIP != 1)
- {
- $UNISIP = -1;
- }
- if ($UNISIPP != 1)
- {
- $UNISIPP = 0;
- }
-
- }
- elseif ($testStatus == '501')
- {
- $UNISIPP = 0;
- $UNISIP = 0;
- }
- elseif($testStatus == '999' || $testStatus == '801')
- {
- if ($UNISIP != 1)
- {
- $UNISIP = 0;
- }
- if ($UNISIPP != 1)
- {
- $UNISIPP = 0;
- }
- }
- }
- }
- echo '<tr>
- <th scope = "row" id = "r100">'. $dataForTable[1] . '</th>
- <th scope = "row" id = "r100">'. $dataForTable[2] . '</th>
- <td> ' . $dataForTable[4] . ' </td>
- <td>' . $dataForTable[3] . '</td>
- </tr>';
- ob_implicit_flush(1);
- usleep(100);
- fwrite($fp, "CONTINUE"); //tell the software to proceed with the test and confirm receiving data
- }
- }
- }
-
- fclose($fp);//close the soccket and the connection
-
- }
-
- }
- elseif($softwareRunning1 == '1')
- {
- echo 'Testing software was not started(didn\'t obtain the lock)! Check it!';
- }
- else
- {
- echo 'Testing software didn\'t obtain the lock';
- }
- }
- elseif($softwareRunning == '0') //0 means the software is still running in the background
- {
- echo 'Testing software is still running! Maybe you should kill it (if not started manually!)';
- }
- else
- {
- echo 'We have an unknown error! Refresh te web page!';
- }
- }
- else
- {
- echo 'No single test was selected! Please go back and select at least one test';
- }
- }
- elseif($lockMe == '0') //0 means if the attempt timed out (for example, because another client has previously locked the name)
- {
- echo 'Someone was faster than you';
- }
- else
- {
- // # if an error occurred (such as running out of memory or the thread was killed with
- echo 'We have an error here';
- }
- }
-elseif ($locking == '0') //0 means somebody is already on the web site
-{
-echo 'Somebody is using the web site already!' . "<br>";
-}
-else
-{
- echo 'We have some serious error here';
-}
-?>
-</div>
-</body>
-</html>
-
diff --git a/Under-Testing/Website/networkResult.php b/Under-Testing/Website/networkResult.php
deleted file mode 100644
index 962d607..0000000
--- a/Under-Testing/Website/networkResult.php
+++ /dev/null
@@ -1,309 +0,0 @@
-<?php
- /* CAT:Drawing */
-
- /* pChart library inclusions */
- include("class/pData.class.php");
-
- include("class/pDraw.class.php");
- include("class/pImage.class.php");
-
- include("class/pSurface.class.php");
- //test case php defined for defining the colors and what's OK and what's wrong!
- include 'testCase.php';
-
- //Triangle function used for defining a triangle, used later to draw a triangle polygon!
- function Triangle($x,$y)
- {
- $Bx = $x - 7;
- $By = $y + 18;
- $Cx = $x + 7;
- $Cy = $y + 18;
- return array($x,$y,$Bx,$By,$Cx,$Cy);
- }
-
- /* Create and populate the pData object */
- $MyData = new pData();
- $MyData->addPoints(array($GSMINTPercent,$GSMEXTPercent,$SIPPercent,$UNISIPPercent,$LANDLINEPercent),"Hits");
- $MyData->setAxisName(0,"Network operability");
- $MyData->addPoints(array("GSM University","GSM External","SIP","Uni.Tel.network","Landline"),"Networks");
- $MyData->setSerieDescription("Networks","Networks");
- $MyData->setAbscissa("Networks");
-
-
- /* Create the pChart object */
- $myPicture = new pImage(700,430,$MyData);
-
- /* Draw the background */
- $Settings = array("R"=>170, "G"=>183, "B"=>87, "Dash"=>1, "DashR"=>190, "DashG"=>203, "DashB"=>107);
-// $myPicture->drawFilledRectangle(0,0,700,230,$Settings);
-
- /* Overlay with a gradient */
- $Settings = array("StartR"=>219, "StartG"=>231, "StartB"=>139, "EndR"=>1, "EndG"=>138, "EndB"=>68, "Alpha"=>50);
- $myPicture->drawGradientArea(0,0,700,430,DIRECTION_VERTICAL,$Settings);
- $myPicture->drawGradientArea(0,0,700,20,DIRECTION_VERTICAL,array("StartR"=>0,"StartG"=>0,"StartB"=>0,"EndR"=>50,"EndG"=>50,"EndB"=>50,"Alpha"=>80));
-
- /* Add a border to the picture */
- $myPicture->drawRectangle(0,0,699,429,array("R"=>0,"G"=>0,"B"=>0));
-
- /* Write the picture title */
- $myPicture->setFontProperties(array("FontName"=>"fonts/Silkscreen.ttf","FontSize"=>6));
- $myPicture->drawText(10,13,"Network Test Results - UNI FREIBURG",array("R"=>255,"G"=>255,"B"=>255));
-
-
-
- //CONNECTIONS
- /* BTS PICTURE INTERNAL CONNECTIONS */
- $myPicture->drawLine(80,170,185,230,$BTS1PING); //BTS1 PING
- $myPicture->drawLine(75,225,185,225,$BTS2PING); //BTS2 PING
- $myPicture->drawLine(75,288,185,220,$BTS2PING); //BTS3 PING
- /*GSMBOX LINES */
- $myPicture->drawLine(181,65,299,150); //BTS3 PING
- $myPicture->drawLine(250,65,308,150); //BTS3 PING
- $myPicture->drawLine(347,65,309,150); //BTS3 PING
- $myPicture->drawLine(410,70,316,150); //BTS3 PING
-
- //Arrow for GSM-Box
- $arrowSettings = array("FillR"=>2.5,"FillG"=>2.5,"FillB"=>2.5,"Ticks"=>1);
- $myPicture->drawArrow(303,209,303,161,$arrowSettings);
-
- //Arrow for Landline
- $arrowSettings = array("FillR"=>2.5,"FillG"=>2.5,"FillB"=>2.5,"Ticks"=>1);
- $myPicture->drawArrow(313,210,393,171,$arrowSettings);
-
- //Arrow for University telephone network
- $arrowSettings = array("FillR"=>2.5,"FillG"=>2.5,"FillB"=>2.5,"Ticks"=>1, "TwoHeads"=>TRUE);
- $myPicture->drawArrow(303,298,303,239,$arrowSettings);
-
- //SIP
- $arrowSettings = array("FillR"=>2.5,"FillG"=>2.5,"FillB"=>2.5,"Ticks"=>1, "TwoHeads"=>TRUE);
- $myPicture->drawArrow(316,220,393,220,$arrowSettings);
- /* Write some text */
- $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
- $TextSettings = array("BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
- $myPicture->drawText(346,218,"SIP",$TextSettings);
-
- //IAX
- $arrowSettings = array("FillR"=>2.5,"FillG"=>2.5,"FillB"=>2.5,"Ticks"=>1, "TwoHeads"=>TRUE);
- $myPicture->drawArrow(192,220,297,220,$arrowSettings);
- /* Write some text */
- $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
- $TextSettings = array("BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
- $myPicture->drawText(235,218,"IAX",$TextSettings);
- //######################################
-
- //BTS1
- $Points = Triangle(74,155);
- $myPicture->drawPolygon($Points, $BTS1COL);
- /* Write some text */
- $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
- $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
- $myPicture->drawText(10,169,"nanoBTS0",$TextSettings);
- //##################################
-
- //BTS2
- $Points = Triangle(74,215);
- $myPicture->drawPolygon($Points, $BTS2COL);
- /* Write some text */
- $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
- $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
- $myPicture->drawText(10,229,"nanoBTS1",$TextSettings);
- //###################################
-
- //BTS3
- $Points = Triangle(74,275);
- $myPicture->drawPolygon($Points, $BTS3COL);
- /* Write some text */
- $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
- $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
- $myPicture->drawText(10,289,"nanoBTS3",$TextSettings);
- //###################################
-
-
-
- //LsfKs-Asterisk
- /* Turn on shadow computing */
- $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
- /* Draw a PNG object */
- $myPicture->drawFromPNG(295,210,$LSFKSCOL);
- /* Write some text */
- $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
- $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
- $myPicture->drawText(270,257," LsfKs-Asterisk",$TextSettings);
- //###############################
-
-
- //Open BSC
- /* Turn on shadow computing */
- $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
- /* Draw a PNG object */
- $myPicture->drawFromPNG(171,210,$GSMINTCOL);
- /* Write some text */
- $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
- $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
- $myPicture->drawText(155,275," OpenBSC \r\n LCR \r\n Asterisk",$TextSettings);
- //###############################
-
-
- //E-plus
- /* Turn on shadow computing */
- $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
- /* Draw a PNG object */
- $myPicture->drawFromPNG(171,50,$GSMEECOL);
- /* Write some text */
- $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
- $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
- $myPicture->drawText(171,40,"E-Plus",$TextSettings);
- //###############################
-
-
- //Vodaphone
- /* Turn on shadow computing */
- $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
- /* Draw a PNG object */
- $myPicture->drawFromPNG(231,50,$GSMEVCOL);
- /* Write some text */
- $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
- $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
- $myPicture->drawText(218,40,"Vodafone",$TextSettings);
- //###############################
-
-
- //T-mobile
- /* Turn on shadow computing */
- $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
- /* Draw a PNG object */
- $myPicture->drawFromPNG(336,50,$GSMETCOL);
- /* Write some text */
- $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
- $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
- $myPicture->drawText(330,40,"T-Mobile",$TextSettings);
- //###############################
-
-
- //O2
- /* Turn on shadow computing */
- $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
- /* Draw a PNG object */
- $myPicture->drawFromPNG(396,50,$GSMEOCOL);
- /* Write some text */
- $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
- $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
- $myPicture->drawText(404,40,"02",$TextSettings);
- //###############################
-
-
- //GSMBOX
- /* Turn on shadow computing */
- $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
- /* Draw a PNG object */
- $myPicture->drawFromPNG(293,140,$GSMEXTCOL);
- /* Write some text */
- $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
- $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
- $myPicture->drawText(238,157,"GSM-Box",$TextSettings);
- //###############################
-
-
- //LANDLINE
- /* Turn on shadow computing */
- $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
- /* Draw a PNG object */
- $myPicture->drawFromPNG(393,147,$LANDLINECOL);
- /* Write some text */
- $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
- $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
- $myPicture->drawText(388,137,"Landline",$TextSettings);
- //###############################
-
-
- //University SIP
- /* Turn on shadow computing */
- $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
- /* Draw a PNG object */
- $myPicture->drawFromPNG(283,297,$UNISIPCOL);
- /* Write some text */
- $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
- $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
- $myPicture->drawText(238,365,"University telephone network",$TextSettings);
- //###############################
-
-
- //SIP
- /* Turn on shadow computing */
- $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>20));
- /* Draw a PNG object */
- $myPicture->drawFromPNG(393,208,$SIPCOL);
- /* Write some text */
- $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
- $TextSettings = array("DrawBox"=>TRUE,"BoxRounded"=>TRUE,"R"=>0,"G"=>0,"B"=>0,"Angle"=>0,"FontSize"=>7);
- $myPicture->drawText(399,256,"SIP",$TextSettings);
- //###############################
-
- //PING RESULTS
- //START ############################################
- $myPicture->setGraphArea(530,280,660,290);
-
- // Create the surface object
- $mySurface = new pSurface($myPicture);
-
- // Set the grid size
- $mySurface->setGrid(4,0);
-
- $mySurface->writeXLabels(array("Angle"=>45,"Labels"=>array("SIP","Landline","Uni. Telephone","BTS Cont.1","BTS Cont.2")));
- $mySurface->writeYLabels(array("Labels"=>array("Ping")));
-
- $Palette = array(1=>array("R"=>0,"G"=>255,"B"=>0, "Alpha"=>40),
- 0=>array("R"=>255,"G"=>0,"B"=>1, "Alpha"=>40),
- 2=>array("R"=>255,"G"=>227,"B"=>85));
-
- $mySurface->addPoint(0,0,$SIPP);
- $mySurface->addPoint(1,0,$LANDLINEP);
- $mySurface->addPoint(2,0,$UNISIPP);
- $mySurface->addPoint(3,0,$NANOBTS1P);
- $mySurface->addPoint(4,0,$NANOBTS2P);
-
- // Draw the surface chart
- $mySurface->drawSurface(array("Border"=>TRUE,"Surrounding"=>40,"Palette"=>$Palette));
-
-
- //A BIT OF STATISTICS
- /* Draw the chart scale */
- $myPicture->setGraphArea(520,50,685,220);
- $AxisBoundaries = array(0=>array("Min"=>0,"Max"=>100));
-
- $myPicture->drawScale(array("CycleBackground"=>TRUE,"DrawSubTicks"=>TRUE,"GridR"=>0,"GridG"=>0,"GridB"=>0,"GridAlpha"=>10,"Pos"=>SCALE_POS_TOPBOTTOM,"Mode"=>SCALE_MODE_MANUAL,"ManualScale"=>$AxisBoundaries));
-
- /* Turn on shadow computing */
- $myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10));
-
- /* Create the per bar palette */
- $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"=>224,"G"=>176,"B"=>46,"Alpha"=>100));
-
-
-/* $Palette = array("1"=>array("R"=>91,"G"=>184,"B"=>202,"Alpha"=>100),
- "2"=>array("R"=>166,"G"=>218,"B"=>215,"Alpha"=>100),
- "3"=>array("R"=>223,"G"=>227,"B"=>203,"Alpha"=>100),
- "0"=>array("R"=>114,"G"=>176,"B"=>180,"Alpha"=>100),
- "4"=>array("R"=>241,"G"=>233,"B"=>214,"Alpha"=>100));
-*/
- /* Draw the chart */
- $myPicture->drawBarChart(array("DisplayPos"=>LABEL_POS_INSIDE,"DisplayValues"=>TRUE,"Rounded"=>TRUE,"Surrounding"=>30,"OverrideColors"=>$Palette));
- //############################################STATISTICS
-
- //DATE AND TEST NUMBER
- /* Write some text */
- $myPicture->setFontProperties(array("FontName"=>"fonts/verdana.ttf","FontSize"=>7));
- $TextSettings = array("BoxRounded"=>TRUE,"R"=>255,"G"=>255,"B"=>255,"Angle"=>0,"FontSize"=>9);
- $taskInfo ='Task #: ' . $TASKID . ' ' . date("d.m.Y H:m:s");
- $myPicture->drawText(460,425,$taskInfo,$TextSettings);
- //###########################################################
-
-
-
- /* Render the picture (choose the best way) */
- $myPicture->autoOutput("example.drawFilledCircle.png");
-?>
diff --git a/Under-Testing/Website/post.php b/Under-Testing/Website/post.php
deleted file mode 100644
index c574768..0000000
--- a/Under-Testing/Website/post.php
+++ /dev/null
@@ -1,516 +0,0 @@
-<?
-$smartStatus = $_REQUEST["smart"]; //smart test
-$sipgsmrz1 = $_REQUEST["sip_gsmrz1"]; //SIP to GSMRZ1
-$sipgsmrz2 = $_REQUEST["sip_gsmrz2"]; //SIP to GSMRZ2
-$sipgsmrz3 = $_REQUEST["sip_gsmrz3"]; //SIP to GSMRZ3
-
-$sipland = $_REQUEST["sip_landln"]; //SIP to landline
-$sipuniv = $_REQUEST["sip_sipuniv"]; //SIP to University
-
-$sipgsmee = $_REQUEST["sip_gsmee"];
-$sipgsmev = $_REQUEST["sip_gsmev"];
-$sipgsmet = $_REQUEST["sip_gsmet"];
-$sipgsmeo = $_REQUEST["sip_gsmeo"];
-
-$gsmrzsip1 = $_REQUEST["gsmrz1_sip"]; //GSMRZ1 to SIP
-$gsmrzsip2 = $_REQUEST["gsmrz2_sip"]; //GSMRZ2 to SIP
-$gsmrzsip3 = $_REQUEST["gsmrz3_sip"]; //GSMRZ3 to SIP
-
-
-$gsm2gsm12 = $_REQUEST["gsmrz1_gsmrz2"]; //GSMRZ1 to GSMRZ2
-$gsm2gsm13 = $_REQUEST["gsmrz1_gsmrz3"]; //GSMRZ1 to GSMRZ3
-$gsm2gsm23 = $_REQUEST["gsmrz2_gsmrz3"]; //GSMRZ2 to GSMRZ3
-
-$landsip = $_REQUEST["landline_sip"]; //Landline to SIP
-
-$landgsmrz1 = $_REQUEST["landline_gsmrz1"]; //Landline to GSMRZ1
-$landgsmrz2 = $_REQUEST["landline_gsmrz2"]; //Landline to GSMRZ1
-$landgsmrz3 = $_REQUEST["landline_gsmrz3"]; //Landline to GSMRZ1
-
-//Add allso for external GSM
-$gsmrz1gsmee = $_REQUEST["gsmrz1_gsmee"]; //GSMRZ1 to E-Plus
-$gsmrz1gsmev = $_REQUEST["gsmrz1_gsmev"]; //GSMRZ1 to E-Plus
-$gsmrz1gsmet = $_REQUEST["gsmrz1_gsmet"]; //GSMRZ1 to E-Plus
-$gsmrz1gsmeo = $_REQUEST["gsmrz1_gsmeo"]; //GSMRZ1 to E-Plus
-
-
-$gsmrz2gsmee = $_REQUEST["gsmrz2_gsmee"]; //GSMRZ2 to E-Plus
-$gsmrz2gsmev = $_REQUEST["gsmrz2_gsmev"]; //GSMRZ2 to E-Plus
-$gsmrz2gsmet = $_REQUEST["gsmrz2_gsmet"]; //GSMRZ2 to E-Plus
-$gsmrz2gsmeo = $_REQUEST["gsmrz2_gsmeo"]; //GSMRZ2 to E-Plus
-
-
-$gsmrz3gsmee = $_REQUEST["gsmrz3_gsmee"]; //GSMRZ3 to E-Plus
-$gsmrz3gsmev = $_REQUEST["gsmrz3_gsmev"]; //GSMRZ3 to E-Plus
-$gsmrz3gsmet = $_REQUEST["gsmrz3_gsmet"]; //GSMRZ3 to E-Plus
-$gsmrz3gsmeo = $_REQUEST["gsmrz3_gsmeo"]; //GSMRZ3 to E-Plus
-
-
-$gsmrz1unisip = $_REQUEST["gsmrz1_unisip"]; //GSMRZ1 to E-Plus
-$gsmrz2unisip = $_REQUEST["gsmrz2_unisip"]; //GSMRZ2 to E-Plus
-$gsmrz3unisip = $_REQUEST["gsmrz3_unisip"]; //GSMRZ3 to E-Plus
-
-
-//############################################################
-$taskNo = getNewTaskNo();
-$errorAdding = 0;
-$taskAmount = 0;
-
-
-if($smartStatus == 'on')
-{
- $taskAmount = 'ON';
-}
-if($sipgsmrz1 == 'on')
-{
- $taskAdded = insertTask($taskNo,'sip','GSMRZ1');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($sipgsmrz2 == 'on')
-{
- $taskAdded = insertTask($taskNo,'sip','GSMRZ2');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($sipgsmrz3 == 'on')
-{
- $taskAdded = insertTask($taskNo,'sip','GSMRZ3');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsmrzsip1 == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ1','sip');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsmrzsip2 == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ2','sip');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsmrzsip3 == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ3','sip');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($sipland == 'on')
-{
- $taskAdded = insertTask($taskNo,'sip','landline');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($sipuniv == 'on')
-{
- $taskAdded = insertTask($taskNo,'sip','unisip');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsm2gsm12 == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ1','GSMRZ2');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsm2gsm13 == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ1','GSMRZ3');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsm2gsm23 == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ2','GSMRZ3');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($landsip == 'on')
-{
- $taskAdded = insertTask($taskNo,'landline','sip');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($landgsmrz1 == 'on')
-{
- $taskAdded = insertTask($taskNo,'landline','GSMRZ1');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($landgsmrz2 == 'on')
-{
- $taskAdded = insertTask($taskNo,'landline','GSMRZ2');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($landgsmrz3 == 'on')
-{
- $taskAdded = insertTask($taskNo,'landline','GSMRZ3');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-
-
-if($gsmrz1gsmee == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ1','GSMExt.Eplus');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsmrz1gsmev == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ1','GSMExt.Voda');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsmrz1gsmet == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ1','GSMExt.Tm');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsmrz1gsmeo == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ1','GSMExt.O2');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-
-
-if($gsmrz2gsmee == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ2','GSMExt.Eplus');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsmrz2gsmev == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ2','GSMExt.Voda');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsmrz2gsmet == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ2','GSMExt.Tm');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsmrz2gsmeo == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ2','GSMExt.O2');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-
-
-if($gsmrz3gsmee == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ3','GSMExt.Eplus');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsmrz3gsmev == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ3','GSMExt.Voda');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsmrz3gsmet == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ3','GSMExt.Tm');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsmrz3gsmeo == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ3','GSMExt.O2');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-
-
-
-if($gsmrz1unisip == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ1','unisip');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsmrz2unisip == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ2','unisip');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($gsmrz3unisip == 'on')
-{
- $taskAdded = insertTask($taskNo,'GSMRZ3','unisip');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($sipgsmee == 'on')
-{
- $taskAdded = insertTask($taskNo,'sip','GSMExt.Eplus');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($sipgsmev == 'on')
-{
- $taskAdded = insertTask($taskNo,'sip','GSMExt.Voda');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($sipgsmet == 'on')
-{
- $taskAdded = insertTask($taskNo,'sip','GSMExt.Tm');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-if($sipgsmeo == 'on')
-{
- $taskAdded = insertTask($taskNo,'sip','GSMExt.O2');
- if($taskAdded != 1)
- {
- $errorAdding = 1;
- }
- if($taskAdded == 1)
- {
- $taskAmount++;
- }
-}
-
-
-?>
diff --git a/Under-Testing/Website/report.pdf b/Under-Testing/Website/report.pdf
deleted file mode 100644
index 8fa060b..0000000
--- a/Under-Testing/Website/report.pdf
+++ /dev/null
Binary files differ
diff --git a/Under-Testing/Website/testCase.php b/Under-Testing/Website/testCase.php
deleted file mode 100644
index fe5c655..0000000
--- a/Under-Testing/Website/testCase.php
+++ /dev/null
@@ -1,244 +0,0 @@
-<?
- //color definitions
- $colorDunno = array("R"=>216,"G"=>166,"B"=>14,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0);
- $colorFail = array("R"=>255, "G"=>25, "B"=>25,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0);
- $colorWork = array("R"=>150,"G"=>215,"B"=>121,"BorderR"=>0,"BorderG"=>0,"BorderB"=>0);
-
-
-$TASKID = $_GET['TASKID'];
-
-$GSMRZ1 = $_GET['RZ1'];
-$GSMRZ2 = $_GET['RZ2'];
-$GSMRZ3 = $_GET['RZ3'];
-
-
-$SIP = $_GET['S'];
-$UNISIP = $_GET['US'];
-$LANDLINE = $_GET['LL'];
-$LSFKS = $_GET['LS'];
-
-$GSMEE = $_GET['EE'];
-$GSMEV = $_GET['EV'];
-$GSMET = $_GET['ET'];
-$GSMEO = $_GET['EO'];
-
-
-$SIPP = $_GET['SP'];
-$LANDLINEP = $_GET['SGP'];
-$UNISIPP = $_GET['USP'];
-$NANOBTS1P = $_GET['NBP1'];
-$NANOBTS2P = $_GET['NBP2'];
-
-$GSMEXTCOL = 'icons/box_dunno.png';
-$GSMINTCOL = "icons/server_dunno.png";
-$LSFKSCOL = "icons/server_dunno.png";
-
-$SIPCOL = 'icons/sip_dunno.png';
-$UNISIPCOL = 'icons/uni-network_dunno.png';
-$LANDLINECOL = 'icons/telephone_dunno.png';
-
-$BTS1COL = $colorDunno;
-$BTS2COL = $colorDunno;
-$BTS3COL = $colorDunno;
-
-$GSMEECOL = 'icons/blackberry_dunno.png';
-$GSMEVCOL = 'icons/blackberry_dunno.png';
-$GSMETCOL = 'icons/blackberry_dunno.png';
-$GSMEOCOL = 'icons/blackberry_dunno.png';
-
-
-$BTS1PING = array("R"=>255,"G"=>0,"B"=>0); //put here the color :)
-$BTS1PING["Ticks"]=2;
-$BTS1PING["Weight"]=0;
-
-$BTS2PING = array("R"=>255,"G"=>0,"B"=>0);
-$BTS2PING["Ticks"]=2;
-$BTS2PING["Weight"]=0;
-
-$BTS3PING = array("R"=>255,"G"=>0,"B"=>0);
-$BTS3PING["Ticks"]=2;
-$BTS3PING["Weight"]=0;
-
-if ($GSMRZ1 > 0 || $GSMRZ2 > 0 || $GSMRZ3 > 0)
-{
- $GSMINT = 1;
- $GSMINTCOL = 'icons/server_work.png';
-}
-elseif($GSMRZ1 < 0 || $GSMRZ2 < 0 || $GSMRZ3 < 0)
-{
- $GSMINT = -1;
- $GSMINTCOL = 'icons/server_fail.png';
-}
-
-if($LANDLINE>0)
-{
- $LANDLINECOL = 'icons/telephone_work.png';
-}
-elseif($LANDLINE<0)
-{
- $LANDLINECOL = 'icons/telephone_fail.png';
-}
-
-if($SIP > 0 && $GSMINT > 0)
-{
- $LSFKS = 1;
-}
-
-if($LSFKS>0)
-{
- $LSFKSCOL = 'icons/server_work.png';
-}
-elseif($LSFKS<0)
-{
- $LSFKSCOL = 'icons/server_fail.png';
-}
-
-if($SIP>0)
-{
- $SIPCOL = 'icons/sip_work.png';
-}
-elseif($SIP<0)
-{
- $SIPCOL = 'icons/sip_fail.png';
-}
-
-if($UNISIP > 0)
-{
- $UNISIPCOL = 'icons/uni-network_work.png';
-}
-elseif($UNISIP < 0)
-{
- $UNISIPCOL = 'icons/uni-network_fail.png';
-}
-
-if($GSMEE > 0 || $GSMEV > 0 || $GSMET > 0 || $GSMEO > 0)
-{
- $GSMEXTCOL = 'icons/box_work.png';
-}
-elseif($GSMEE < 0 || $GSMEV < 0 || $GSMET < 0 || $GSMEO < 0)
-{
- $GSMEXTCOL = 'icons/box_fail.png';
-}
-
-if($GSMRZ1 > 0)
-{
- $BTS1COL = $colorWork;
-}
-elseif($GSMRZ1 < 0)
-{
- $BTS1COL = $colorFail;
-}
-
-if($GSMRZ2 > 0)
-{
- $BTS2COL = $colorWork;
-}
-elseif($GSMRZ2 < 0)
-{
- $BTS2COL = $colorFail;
-}
-
-if($GSMRZ3 > 0)
-{
- $BTS3COL = $colorWork;
-}
-elseif($GSMRZ3 < 0)
-{
- $BTS3COL = $colorFail;
-}
-
-if($GSMEE > 0)
-{
- $GSMEECOL = 'icons/blackberry_work.png';
-}
-elseif($GSMEE < 0)
-{
- $GSMEECOL = 'icons/blackberry_fail.png';
-}
-
-if($GSMEV > 0)
-{
- $GSMEVCOL = 'icons/blackberry_work.png';
-}
-elseif($GSMEV < 0)
-{
- $GSMEVCOL = 'icons/blackberry_fail.png';
-}
-
-if($GSMET > 0)
-{
- $GSMETCOL = 'icons/blackberry_work.png';
-}
-elseif($GSMET < 0)
-{
- $GSMETCOL = 'icons/blackberry_fail.png';
-}
-
-if($GSMEO > 0)
-{
- $GSMEOCOL = 'icons/blackberry_work.png';
-}
-elseif($GSMEO < 0)
-{
- $GSMEOCOL = 'icons/blackberry_fail.png';
-}
-
-
-
-//NETWORK OPERABILITY CALCULATION
-$GSMINTOCalc = 0;
-$GSMEXTOCalc = 0;
-
-//internal GSM calcuation
-if($GSMRZ1>0)
-{
- $GSMINTOCalc += 1;
-}
-if($GSMRZ2>0)
-{
- $GSMINTOCalc += 1;
-}
-if($GSMRZ3>0)
-{
- $GSMINTOCalc += 1;
-}
-
-//external GSM calculation
-if($GSMET>0)
-{
- $GSMEXTOCalc += 1;
-}
-if($GSMEO>0)
-{
- $GSMEXTOCalc += 1;
-}
-if($GSMEE>0)
-{
- $GSMEXTOCalc += 1;
-}
-if($GSMEV>0)
-{
- $GSMEXTOCalc += 1;
-}
-
-if($SIP<0)
-{
- $SIP=0;
-}
-
-if($LANDLINE<0)
-{
- $LANDLINE=0;
-}
-if($UNISIP<0)
-{
- $UNISIP=0;
-}
-$GSMINTPercent = round(($GSMINTOCalc/3),2)*100;
-$GSMEXTPercent = round(($GSMEXTOCalc/4),2)*100;
-$SIPPercent = $SIP*100;
-$UNISIPPercent = $UNISIP*100;
-$LANDLINEPercent = $LANDLINE*100;
-
-
-?>
diff --git a/Under-Testing/Website/wait.gif b/Under-Testing/Website/wait.gif
deleted file mode 100644
index 1c72ebb..0000000
--- a/Under-Testing/Website/wait.gif
+++ /dev/null
Binary files differ
diff --git a/Website/mutexSmartTest.php b/Website/mutexSmartTest.php
index 663f2f0..a44b121 100644
--- a/Website/mutexSmartTest.php
+++ b/Website/mutexSmartTest.php
@@ -60,7 +60,7 @@ if ($locking == '1')
fwrite($startApp, "START APP");
usleep(2500);
fclose($startApp);
- }
+
#sleep till the software starts
sleep(5);
@@ -125,7 +125,18 @@ if ($locking == '1')
</tr>
</thead>
<tbody>';
- ob_implicit_flush(1);
+ ob_implicit_flush(1);
+ sleep(6);
+ $pings = mysql_query("select * from PingResultTable where taskNo=(select max(taskNo) from PingResultTable)");
+
+ while($row = mysql_fetch_array($pings))
+ {
+ $SIPP = $row['sipServer'];
+ $LANDLINEP = $row['sipGate'];
+ $UNISIPP = $row['unisip'];
+ $NANOBTS1P = $row['gsmBox1'];
+ $NANOBTS2P = $row['gsmBox2'];
+ }
}
elseif ($received == "TEST DONE\n")
{
@@ -186,7 +197,6 @@ echo '<div id="footer"><font size ="3" face="Century Gothic" color="black">SMART
{
$LSFKS = 0;
}
-
}
elseif($testStatus == '999')
{
@@ -256,7 +266,10 @@ echo '<div id="footer"><font size ="3" face="Century Gothic" color="black">SMART
}
elseif($testStatus == '998' || $testStatus == '802')
{
- $GSMRZ1 = 0; //where is nanoBTS1
+ if ($GSMRZ1 != 1)
+ {
+ $GSMRZ1 = 0;
+ }
}
}
elseif ($callTo == 'GSMRZ1')
@@ -270,7 +283,10 @@ echo '<div id="footer"><font size ="3" face="Century Gothic" color="black">SMART
}
elseif($testStatus == '999' || $testStatus == '801')
{
- $GSMRZ1 = 0; //where is nanoBTS1
+ if ($GSMRZ1 != 1)
+ {
+ $GSMRZ1 = 0;
+ }
}
}
}
@@ -314,11 +330,17 @@ echo '<div id="footer"><font size ="3" face="Century Gothic" color="black">SMART
elseif ($testStatus == '500')
{
$NANOBTS1P = 0;
- $GSMRZ2= 0;
+ if ($GSMRZ2 != 1)
+ {
+ $GSMRZ2 = 0;
+ }
}
elseif($testStatus == '998' || $testStatus == '802')
{
- $GSMRZ2 = 0; //where is nanoBTS1
+ if ($GSMRZ2 != 1)
+ {
+ $GSMRZ2= 0;
+ }
$NANOBTS1P= 1;
}
}
@@ -345,11 +367,17 @@ echo '<div id="footer"><font size ="3" face="Century Gothic" color="black">SMART
elseif ($testStatus == '501')
{
$NANOBTS1P = 0;
- $GSMRZ2= 0;
+ if ($GSMRZ2 != 1)
+ {
+ $GSMRZ2 = 0;
+ }
}
elseif($testStatus == '999' || $testStatus == '801')
{
- $GSMRZ2 = 0; //where is nanoBTS1
+ if ($GSMRZ2 != 1)
+ {
+ $GSMRZ2 = 0;
+ }
if ($NANOBTS1P != 1)
{
$NANOBTS1P= 2;
@@ -370,7 +398,7 @@ echo '<div id="footer"><font size ="3" face="Century Gothic" color="black">SMART
elseif($testStatus == '486')
{
- if ($GSMRZ3 != 1)
+ if ($GSMRZ3 != 1)
{
$GSMRZ3 = -1;
}
@@ -397,14 +425,20 @@ echo '<div id="footer"><font size ="3" face="Century Gothic" color="black">SMART
}
}
}
- elseif ($testStatus == '5010')
+ elseif ($testStatus == '501')
{
$NANOBTS2P = 0;
- $GSMRZ3= 0;
+ if ($GSMRZ3 != 1)
+ {
+ $GSMRZ3= 0;
+ }
}
elseif($testStatus == '998' || $testStatus == '802')
{
- $GSMRZ3 = 0; //where is nanoBTS1
+ if ($GSMRZ3 != 1)
+ {
+ $GSMRZ3= 0;
+ }
$NANOBTS2P= 1;
}
}
@@ -431,18 +465,24 @@ echo '<div id="footer"><font size ="3" face="Century Gothic" color="black">SMART
elseif ($testStatus == '501')
{
$NANOBTS2P = 0;
- $GSMRZ3= 0;
+ if ($GSMRZ3 != 1)
+ {
+ $GSMRZ3 = 0;
+ }
}
elseif($testStatus == '999' || $testStatus == '801')
{
- $GSMRZ3 = 0; //where is nanoBTS1
+ if ($GSMRZ3 != 1)
+ {
+ $GSMRZ3 = 0;
+ }
if ($NANOBTS1P != 1)
{
$NANOBTS2P= 2;
}
}
- }//
+ }
}
if($callFrom == 'GSMEXT.O2' || $callTo == 'GSMEXT.O2')
@@ -771,7 +811,10 @@ echo '<div id="footer"><font size ="3" face="Century Gothic" color="black">SMART
elseif ($testStatus == '500')
{
$LANDLINEP = 0;
- $LANDLINE = 0;
+ if ($LANDLINE != 1)
+ {
+ $LANDLINE = 0;
+ }
}
elseif($testStatus == '998' || $testStatus == '802')
{
@@ -803,7 +846,10 @@ echo '<div id="footer"><font size ="3" face="Century Gothic" color="black">SMART
elseif ($testStatus == '501')
{
$LANDLINEP = 0;
- $LANDLINE = 0;
+ if ($LANDLINE != 1)
+ {
+ $LANDLINE = 0;
+ }
}
elseif($testStatus == '998')
{
@@ -854,11 +900,17 @@ echo '<div id="footer"><font size ="3" face="Century Gothic" color="black">SMART
elseif ($testStatus == '500')
{
$UNISIPP = 0;
- $UNISIP = 0;
+ if ($UNISIP != 1)
+ {
+ $UNISIP = 0;
+ }
}
elseif($testStatus == '998' || $testStatus == '802')
{
- $UNISIP = 1;
+ if ($UNISIP != 1)
+ {
+ $UNISIP = 0;
+ }
$UNISIPP = 1;
}
}
diff --git a/Website/mutexSmartTest.php_old b/Website/mutexSmartTest.php_old
deleted file mode 100644
index 5ce264a..0000000
--- a/Website/mutexSmartTest.php_old
+++ /dev/null
@@ -1,951 +0,0 @@
-<html>
-<head>
-<script src='delayedLoading.js' type="text/javascript"></script>
-<!--ADD HERE ALL THE NEEDED META DATA -->
-<title>Network test live results!</title>
-<link rel="stylesheet" href="css/tableCSS.css" type="text/css" media="screen">
-</head>
-<body onscroll="scrollEvent();" onload="loaderInit();">
-<div>
-<?php
-//Connection stuff
-//DB
-include 'dbconnection.php';
-
-$port = 34500;
-$ip = 'localhost';
-
-$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql');
-
-mysql_select_db($dbname);
-//End of connection stuff
-include 'mutexFunctions.php'; //mutex functions, isfree, lock and release
- //insert task functions
-
-$nameOfLock = 'Webpage';
-$timeToKeepTheMutex = 360;
-
-$locking = isLocked($nameOfLock);//Check if the webpage is already open
-
-if ($locking == '1') //1 means nobody is on the website
-{
- $lockMe = Lock($nameOfLock,$timeToKeepTheMutex); //Set a mutex for the webpage
- if ($lockMe == '1') //1 means a successful lock
- {
- $softwareLock = 'SoftwareStarted';
- $taskAmount= 1;
- $numberofTask =0;
- if($taskAmount != 0 or $taskAmount == 'ON')
- {
- $softwareRunning = isLocked($softwareLock);
- if($softwareRunning == '1') //1 means software is not started yet, start it
- {
- $startApp = fsockopen($ip, 34600, $errno, $error, 5);
- if (!$startApp)
- {
- printf('THE SOFTWARE THAT SHOULD RUN IN BACKGROUND IS NOT RUNNING!');
- }
- else
- {
- socket_set_timeout( $startApp, 50); //one should set the number of the longest test, so we can define the timeout
- fwrite($startApp, "START APP");
- usleep(2500);
- fclose($startApp);
- }
-
- sleep(6); //sleep till the software starts
-
- //the software should be running already and set the lock, now we test it and then connect to it!
- $softwareRunning1 = isLocked($softwareLock);
- if($softwareRunning1 == '0') //Software running and waiting for connection!
- {
- //try to open the socket and connect to the software
- $fp = fsockopen($ip, $port, $errno, $error, 5);
-
- if (!$fp)
- {
- echo 'Could not open the socket or connect to the testing software! Check ports on both sides!';
-
- }
- else
- {
- socket_set_timeout($fp,50); //one should set the number of the longest test, so we can define the timeout function (it is the number after "$fp,")
- fwrite($fp, "SMART TEST");
-
- //fwrite($fp, "SMART TEST"); //send command to start the tests
- if(!feof($fp))
- {
- while(!feof($fp))
- {
- $received = fgets($fp, 128); //receive data!
-
- if ($received == "CONFIRM\n") //we got the confirmation from the testing software
- {
- //test finished successfully
-
- $GSMRZ1 = 0;
- $GSMRZ2 = 0;
- $GSMRZ3 = 0;
-
- $SIP = 0;
- $UNISIP = 0;
- $LANDLINE = 0;
- $LSFKS = 0;
-
- $GSMEE = 0;
- $GSMEV = 0;
- $GSMET = 0;
- $GSMEO = 0;
-
- $SIPP = 0;
- $LANDLINEP = 0;
- $UNISIPP = 0;
- $NANOBTS1P = 0;
- $NANOBTS2P = 0;
- /////////// end of test!
- echo '<div id="main">
- <table summary = "Results">
- <thead>
- <tr>
- <th scope = "col"> From: </th>
- <th scope = "col" > To: </th>
- <th scope = "col"> Message: </th>
- <th scope = "col"> Status: </th>
- </tr>
- </thead>
- <!-- start of the table rows-->
- <tbody>';
- echo str_repeat("\n",7024);
- flush();
-
- }
- elseif ($received == "TEST DONE\n")
- {
- if ($taskAmount == "ON"){$taskAmount = "SMART TEST";}
-
- echo '</tbody></table>';
- echo '</div>';
- echo '<div id="sidebar">';
- echo "<a class='pChart' href='networkResult.php?S=$SIP&RZ1=$GSMRZ1&RZ2=$GSMRZ2&RZ3=$GSMRZ3&US=$UNISIP&LL=$LANDLINE&LS=$LSFKS&EE=$GSMEE&EV=$GSMEV&ET=$GSMET&EO=$GSMEO&SP=$SIPP&SGP=$LANDLINEP&USP=$UNISIPP&NBP1=$NANOBTS1P&NBP2=$NANOBTS2P' data-pchart-alt='Picture3'>Picture 3</a></div>";
- echo '<div id="footer"><font size ="3" face="Century Gothic" color="black">Number of tasks: '.$numberofTask.'<br> TEST SUCCESSFULLY FINISHED!</font></div>';
- echo str_repeat("\n",7024);
- flush();
- usleep(100);
- fwrite($fp, 'DISCONNECT'); //tell the testing software it may close
- break;
- }
- else
- {
- //parse the received data!
- $numberofTask++;
- $received = str_replace("\n",'',$received);
- $dataForTable = explode("|", $received);
- $callFrom = strtoupper($dataForTable[1]);
- $callTo = strtoupper($dataForTable[2]);
- $testStatus = strtoupper($dataForTable[3]);
-
- if($callFrom == 'SIP' || $callTo == 'SIP')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $SIP = 1;
- $SIPP = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- //Check that SIP already working or not, if working, leave as it is, otherwise update that sip broken. same with LSFKS
- if ($SIP != 1)
- {
- $SIP = 1;
- }
- $SIPP = 1;
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'SIP')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- $SIP = 1;
- $SIPP = 1;
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
-
- }
- elseif($testStatus == '999')
- {
- if ($SIP != 1)
- {
- $SIP = -1;
- }
- $SIPP = 2;
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'SIP')
- {
- if ($testStatus == '999')
- {
- if ($SIP != 1)
- {
- $SIP = 0;
- }
- if ($SIPP != 1)
- {
- $SIPP = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998')
- {
- if ($SIP != 1)
- {
- $SIP = -1;
- }
- $SIPP = 2;
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- }
- if($callFrom == 'GSMRZ1' || $callTo == 'GSMRZ1')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMRZ1 = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMRZ1 != 1)
- {
- $GSMRZ1 = -1;
- }
- }
- if ($callFrom == 'GSMRZ1')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ1 != 1)
- {
- $GSMRZ1 = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- $GSMRZ1 = 0; //where is nanoBTS1
- }
- }
- elseif ($callTo == 'GSMRZ1')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ1 != 1)
- {
- $GSMRZ1 = 0;
- }
- }
- elseif($testStatus == '999' || $testStatus == '801')
- {
- $GSMRZ1 = 0; //where is nanoBTS1
- }
- }
- }
-
- if($callFrom == 'GSMRZ2' || $callTo == 'GSMRZ2')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMRZ2 = 1;
- $NANOBTS1P = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2 = -1;
- }
- $NANOBTS1P = 1;
- }
- if ($callFrom == 'GSMRZ2')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2= 0;
- }
-
- if ($testStatus == '801')
- {
- $NANOBTS1P= 1;
- }
- if ($testStatus == '999')
- {
- if ($NANOBTS1P != 1)
- {
- $NANOBTS1P= 0;
- }
- }
- }
- elseif ($testStatus == '500')
- {
- $NANOBTS1P = 0;
- $GSMRZ2= 0;
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- $GSMRZ2 = 0; //where is nanoBTS1
- $NANOBTS1P= 1;
- }
- }
- elseif ($callTo == 'GSMRZ2')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2 = 0;
- }
- if ($testStatus == '802')
- {
- $NANOBTS1P= 1;
- }
- if ($testStatus == '998')
- {
- if ($NANOBTS1P != 1)
- {
- $NANOBTS1P= 0;
- }
- }
- }
- elseif ($testStatus == '501')
- {
- $NANOBTS1P = 0;
- $GSMRZ2= 0;
- }
- elseif($testStatus == '999' || $testStatus == '801')
- {
- $GSMRZ2 = 0; //where is nanoBTS1
- if ($NANOBTS1P != 1)
- {
- $NANOBTS1P= 2;
- }
-
- }
- }
-
- }
-
- if($callFrom == 'GSMRZ3' || $callTo == 'GSMRZ3')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMRZ3 = 1;
- $NANOBTS2P = 1;
- }
- elseif($testStatus == '486')
- {
-
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3 = -1;
- }
- $NANOBTS2P = 1;
- }
- if ($callFrom == 'GSMRZ3')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3= 0;
- }
-
- if ($testStatus == '801')
- {
- $NANOBTS2P= 1;
- }
- if ($testStatus == '999')
- {
- if ($NANOBTS2P != 1)
- {
- $NANOBTS2P= 0;
- }
- }
- }
- elseif ($testStatus == '5010')
- {
- $NANOBTS2P = 0;
- $GSMRZ3= 0;
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- $GSMRZ3 = 0; //where is nanoBTS1
- $NANOBTS2P= 1;
- }
- }
- elseif ($callTo == 'GSMRZ3')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3 = 0;
- }
- if ($testStatus == '802')
- {
- $NANOBTS2P= 1;
- }
- if ($testStatus == '998')
- {
- if ($NANOBTS2P != 1)
- {
- $NANOBTS2P= 0;
- }
- }
- }
- elseif ($testStatus == '501')
- {
- $NANOBTS2P = 0;
- $GSMRZ3= 0;
- }
- elseif($testStatus == '999' || $testStatus == '801')
- {
- $GSMRZ3 = 0; //where is nanoBTS1
- if ($NANOBTS1P != 1)
- {
- $NANOBTS2P= 2;
- }
-
- }
- }//
-
- }
- if($callFrom == 'GSMEXT.O2' || $callTo == 'GSMEXT.O2')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMEO = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMEO != 1)
- {
- $GSMEO = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'GSMEXT.O2')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEO != 1)
- {
- $GSMEO = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEO != 1)
- {
- $GSMEO =1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'GSMEXT.O2')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEO != 1)
- {
- $GSMEO = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEO != 1)
- {
- $GSMEO =0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- }
- if($callFrom == 'GSMEXT.VODA' || $callTo == 'GSMEXT.VODA')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMEV = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMEV != 1)
- {
- $GSMEV = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'GSMEXT.VODA')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEV != 1)
- {
- $GSMEV = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEV != 1)
- {
- $GSMEV =1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'GSMEXT.VODA')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEV != 1)
- {
- $GSMEV = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEV != 1)
- {
- $GSMEV =0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- }
-
- if($callFrom == 'GSMEXT.EPLUS' || $callTo == 'GSMEXT.EPLUS')
- {
- if($testStatus == '200')
- {
- $GSMEE = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMEE != 1)
- {
- $GSMEE = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'GSMEXT.EPLUS')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEE != 1)
- {
- $GSMEE = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEE != 1)
- {
- $GSMEE =1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'GSMEXT.EPLUS')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEE != 1)
- {
- $GSMEE = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEE != 1)
- {
- $GSMEE=0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '402')
- {
- if ($GSMEE != 1)
- {
- $GSMEE=0;
- }
- $LSFKS = 1;
- }
- }
- }
-
- if($callFrom == 'GSMEXT.TM' || $callTo == 'GSMEXT.TM')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMET = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMET != 1)
- {
- $GSMET = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'GSMEXT.TM')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMET != 1)
- {
- $GSMET = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMET != 1)
- {
- $GSMET =1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'GSMEXT.TM')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMET != 1)
- {
- $GSMET = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMET != 1)
- {
- $GSMET =0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
-
- }
-
- if($callFrom == 'LANDLINE' || $callTo == 'LANDLINE')
- {
-
- if($testStatus == '200' || $testStatus == '402')
- {
-
- $LANDLINEP = 1;
- $LANDLINE = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($LANDLINE != 1)
- {
- $LANDLINE = -1;
- }
- }
- if ($callFrom == 'LANDLINE')
- {
- if ($testStatus == '999')
- {
- if ($LANDLINE != 1)
- {
- $LANDLINE = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- if ($LANDLINEP != 1)
- {
- $LANDLINEP = 2;
- }
- }
- elseif ($testStatus == '500')
- {
- $LANDLINEP = 0;
- $LANDLINE = 0;
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- $LANDLINE = 1;
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- $LANDLINEP = 1;
- }
- }
- elseif ($callTo == 'LANDLINE')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($LANDLINE != 1)
- {
- $LANDLINE = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- if ($LANDLINEP != 1)
- {
- $LANDLINEP = 0;
- }
- }
- elseif ($testStatus == '501')
- {
- $LANDLINEP = 0;
- $LANDLINE = 0;
- }
- elseif($testStatus == '998')
- {
- if ($LANDLINE != 1)
- {
- $LANDLINE = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- if ($LANDLINEP != 1)
- {
- $LANDLINEP = 2;
- }
- }
- }
- }
- if($callFrom == 'UNISIP' || $callTo == 'UNISIP')
- {
-
- if($testStatus == '200' || $testStatus == '402')
- {
- $UNISIPP = 1;
- $UNISIP = 1;
- }
- elseif($testStatus == '486')
- {
- $UNISIPP = 1;
- if ($UNISIP != 1)
- {
- $UNISIP = -1;
- }
- }
- if ($callFrom == 'UNISIP')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($UNISIP != 1)
- {
- $UNISIP = -1;
- }
- if ($UNISIPP != 1)
- {
- $UNISIPP = 2;
- }
- }
- elseif ($testStatus == '500')
- {
- $UNISIPP = 0;
- $UNISIP = 0;
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- $UNISIP = 1;
- $UNISIPP = 1;
- }
- }
- if ($callTo == 'UNISIP')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- if ($UNISIP != 1)
- {
- $UNISIP = -1;
- }
- if ($UNISIPP != 1)
- {
- $UNISIPP = 0;
- }
-
- }
- elseif ($testStatus == '501')
- {
- $UNISIPP = 0;
- $UNISIP = 0;
- }
- elseif($testStatus == '999' || $testStatus == '801')
- {
- if ($UNISIP != 1)
- {
- $UNISIP = 0;
- }
- if ($UNISIPP != 1)
- {
- $UNISIPP = 0;
- }
- }
- }
- }
- //END OF TEST CASE EXAMPLE
- echo '<tr>
- <th scope = "row" id = "r100">'. $dataForTable[1] . '</th>
- <th scope = "row" id = "r100">'. $dataForTable[2] . '</th>
- <td> ' . $dataForTable[4] . ' </td>
- <td>' . $dataForTable[3] . '</td>
- </tr>';
- echo str_repeat("\n",7024);
- flush();
- usleep(100);
- fwrite($fp, "CONTINUE"); //tell the software to proceed with the test and confirm receiving data
- }
- }
- }
-
- fclose($fp);//close the soccket and the connection
-
- }
-
- }
- elseif($softwareRunning1 == '1')
- {
- echo 'Testing software was not started(didn\'t obtain the lock)! Check it!';
- }
- else
- {
- echo 'Testing software didn\'t obtain the lock';
- }
- }
- elseif($softwareRunning == '0') //0 means the software is still running in the background
- {
- echo 'Testing software is still running! Maybe you should kill it (if not started manually!)';
- }
- else
- {
- echo 'We have an unknown error! Refresh te web page!';
- }
-
- }
- else
- {
- echo 'No single test was selected! Please go back and select at least one test';
- }
- }
- elseif($lockMe == '0') //0 means if the attempt timed out (for example, because another client has previously locked the name)
- {
- echo 'Someone was faster than you';
- }
- else
- {
- // # if an error occurred (such as running out of memory or the thread was killed with
- echo 'We have an error here';
- }
-}
-elseif ($locking == '0') //0 means somebody is already on the web site
-{
- echo 'Somebody is using the web site already!' . "<br>";
-}
-else
-{
- echo 'We have some serious error here';
-}
-?>
-</div>
-</body>
-</html>
-
diff --git a/Website/mutexTry.php b/Website/mutexTry.php
index 308323d..b09c702 100644
--- a/Website/mutexTry.php
+++ b/Website/mutexTry.php
@@ -10,19 +10,17 @@ d>
@apache_setenv('no-gzip',1);
@ini_set('zlib.output_compression',0);
@ini_set('implicit_flush',1);
-//Connection stuff
-//DB
+
include 'dbconnection.php';
-//Socket
+#Socket Config
$port = 34500;
$ip = 'localhost';
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql');
-//$dbname = 'gsmselftesting';
mysql_select_db($dbname);
-//End of connection stuff
+
include 'mutexFunctions.php'; //mutex functions, isfree, lock and release
include 'insertData.php'; //insert task functions
@@ -33,139 +31,123 @@ $locking = isLocked($nameOfLock);//Check if the webpage is already open
if ($locking == '1') //1 means nobody is on the website
{
- $lockMe = Lock($nameOfLock,$timeToKeepTheMutex); //Set a mutex for the webpage
- if ($lockMe == '1') //1 means a successful lock
- {
-
- include 'post.php'; // read posted data and add them to the database
-// echo 'WE had errors: '. $errorAdding;
- //stuff to do here
- //check if the software is running!
- $softwareLock = 'SoftwareStarted';
-
- //$taskAmount= 1
- if($taskAmount != 0)
- {
- $softwareRunning = isLocked($softwareLock);
- if($softwareRunning == '1') //1 means software is not started yet, start it
- {
- $startApp = fsockopen($ip, 34600, $errno, $error, 5);
- if (!$startApp)
- {
- printf('THE SOFTWARE THAT SHOULD RUN IN BACKGROUND IS NOT RUNNING!');
- }
- else
- {
- socket_set_timeout( $startApp, 50); //one should set the number of the longest test, so we can define the timeout
- fwrite($startApp, "START APP");
- usleep(2500);
- fclose($startApp);
- }
-
- //exec("/usr/bin/python /var/www/tricode/gsmselftest2.py > /dev/null 2>&1 &"); //start the software in background and don't wait for any output
- sleep(6); //sleep half second till the software starts
- //the software should be running already and set the lock, now we test it and then connect to it!
+ $lockMe = Lock($nameOfLock,$timeToKeepTheMutex); //Set a mutex for the webpage
+ if ($lockMe == '1') //1 means a successful lock
+ {
+
+ include 'post.php'; // read posted data and add them to the database
+ $softwareLock = 'SoftwareStarted';
+
+ if($taskAmount != 0)
+ {
+ $softwareRunning = isLocked($softwareLock);
+ if($softwareRunning == '1') //1 means software is not started yet, start it
+ {
+ $startApp = fsockopen($ip, 34600, $errno, $error, 5);
+ if (!$startApp)
+ {
+ printf('THE SOFTWARE THAT SHOULD RUN IN BACKGROUND IS NOT RUNNING!');
+ }
+ else
+ {
+ socket_set_timeout( $startApp, 50); //one should set the number of the longest test, so we can define the timeout
+ fwrite($startApp, "START APP");
+ usleep(2500);
+ fclose($startApp);
+ }
+ sleep(5); //sleep till the software starts
+ //the software should be running already and set the lock, now we test it and then connect to it!
- $softwareRunning1 = isLocked($softwareLock);
- if($softwareRunning1 == '0') //Software running and waiting for connection!
- {
- //try to open the socket and connect to the software
- $fp = fsockopen($ip, $port, $errno, $error, 5);
-
- if (!$fp)
- {
- echo 'Could not open the socket or connect to the testing software! Check ports on both sides!';
-
- }
- else
- {
- socket_set_timeout($fp,50); //one should set the number of the longest test, so we can define the timeout function (it is the number after "$fp,")
-
- fwrite($fp, "START TEST");
-
- //fwrite($fp, "SMART TEST"); //send command to start the tests
- if(!feof($fp))
- {
- while(!feof($fp))
- {
- $received = fgets($fp, 128); //receive data!
-
- if ($received == "CONFIRM\n") //we got the confirmation from the testing software
- {
- //test finished successfully
-
- $GSMRZ1 = 0;
- $GSMRZ2 = 0;
- $GSMRZ3 = 0;
-
- $SIP = 0;
- $UNISIP = 0;
- $LANDLINE = 0;
- $LSFKS = 0;
-
- $GSMEE = 0;
- $GSMEV = 0;
- $GSMET = 0;
- $GSMEO = 0;
-
- $SIPP = 2;
- $LANDLINEP = 2;
- $UNISIPP = 2;
- $NANOBTS1P = 2;
- $NANOBTS2P = 2;
- /////////// end of test!
- echo str_pad(' ',4096).'<br>'."\n";
- ob_implicit_flush(1);
-
- echo '<div id="main">
- <table summary = "Results">
- <thead>
- <tr>
- <th scope = "col"> From: </th>
- <th scope = "col" > To: </th>
- <th scope = "col"> Message: </th>
- <th scope = "col"> Status: </th>
- </tr>
- </thead>
- <!-- start of the table rows-->
- <tbody>';
- ob_implicit_flush(1);
- sleep(6);
- $pings = mysql_query("select * from PingResultTable where taskNo=(select max(taskNo) from PingResultTable)");
-
- while($row = mysql_fetch_array($pings))
- {
- // echo $row['taskNo'];
- $SIPP = $row['sipServer'];
- $LANDLINEP = $row['sipGate'];
- $UNISIPP = $row['unisip'];
- $NANOBTS1P = $row['gsmBox1'];
- $NANOBTS2P = $row['gsmBox2'];
- }
- }
- elseif ($received == "TEST DONE\n")
- {
+ $softwareRunning1 = isLocked($softwareLock);
+ if($softwareRunning1 == '0') //Software running and waiting for connection!
+ {
+ //try to open the socket and connect to the software
+ $fp = fsockopen($ip, $port, $errno, $error, 5);
+
+ if (!$fp)
+ {
+ echo 'Could not open the socket or connect to the testing software! Check ports on both sides!';
+ }
+ else
+ {
+ socket_set_timeout($fp,50);
+ fwrite($fp, "START TEST");
+
+ if(!feof($fp))
+ {
+ while(!feof($fp))
+ {
+ $received = fgets($fp, 128); //receive data!
+
+ if ($received == "CONFIRM\n") //we got the confirmation from the testing software
+ {
+ $GSMRZ1 = 0;
+ $GSMRZ2 = 0;
+ $GSMRZ3 = 0;
+
+ $SIP = 0;
+ $UNISIP = 0;
+ $LANDLINE = 0;
+ $LSFKS = 0;
+
+ $GSMEE = 0;
+ $GSMEV = 0;
+ $GSMET = 0;
+ $GSMEO = 0;
+
+ $SIPP = 2;
+ $LANDLINEP = 2;
+ $UNISIPP = 2;
+ $NANOBTS1P = 2;
+ $NANOBTS2P = 2;
+ echo str_pad(' ',4096).'<br>'."\n";
+ ob_implicit_flush(1);
+ echo '<div id="main">
+ <table summary = "Results">
+ <thead>
+ <tr>
+ <th scope = "col"> From: </th>
+ <th scope = "col" > To: </th>
+ <th scope = "col"> Message: </th>
+ <th scope = "col"> Status: </th>
+ </tr>
+ </thead>
+ <tbody>';
+ ob_implicit_flush(1);
+ sleep(6);
+ $pings = mysql_query("select * from PingResultTable where taskNo=(select max(taskNo) from PingResultTable)");
+
+ while($row = mysql_fetch_array($pings))
+ {
+ $SIPP = $row['sipServer'];
+ $LANDLINEP = $row['sipGate'];
+ $UNISIPP = $row['unisip'];
+ $NANOBTS1P = $row['gsmBox1'];
+ $NANOBTS2P = $row['gsmBox2'];
+ }
+ }
+ elseif ($received == "TEST DONE\n")
+ {
- echo '</tbody></table>';
- echo '</div>';
- echo '<div id="sidebar">';
- echo "<a class='pChart' href='networkResult.php?S=$SIP&RZ1=$GSMRZ1&RZ2=$GSMRZ2&RZ3=$GSMRZ3&US=$UNISIP&LL=$LANDLINE&LS=$LSFKS&EE=$GSMEE&EV=$GSMEV&ET=$GSMET&EO=$GSMEO&SP=$SIPP&SGP=$LANDLINEP&USP=$UNISIPP&NBP1=$NANOBTS1P&NBP2=$NANOBTS2P&TASKID=$taskNo' data-pchart-alt='Picture3'>Picture 3</a></div>";
- echo '<div id="footer"><font size ="3" face="Century Gothic" color="black"> Number of tasks: '.$taskAmount.'<br> Number of tasks tried to add to the DB but had an error: '. $errorAdding .'<br> TEST SUCCESSFULLY FINISHED!</font></div>';
- ob_implicit_flush(1);
- usleep(100);
- fwrite($fp, 'DISCONNECT'); //tell the testing software it may close
- break;
- }
- else
- {
- //parse the received data!
- $received = str_replace("\n",'',$received);
- $dataForTable = explode("|", $received);
- $callFrom = strtoupper($dataForTable[1]);
- $callTo = strtoupper($dataForTable[2]);
- $testStatus = strtoupper($dataForTable[3]);
- //ADD HERE THE TEST CASES BUT MAKE IT INSIDE OF A FILE (e.q. include 'testing.php'); HERE I PUT IT ONLY FOR EXAMPLE PURPOSES!
+ echo '</tbody></table>';
+ echo '</div>';
+ echo '<div id="sidebar">';
+echo "<a class='pChart' href='networkResult.php?S=$SIP&RZ1=$GSMRZ1&RZ2=$GSMRZ2&RZ3=$GSMRZ3&US=$UNISIP&LL=$LANDLINE&LS=$LSFKS&EE=$GSMEE&EV=$GSMEV&ET=$GSMET&EO=$GSMEO&SP=$SIPP&SGP=$LANDLINEP&USP=$UNISIPP&NBP1=$NANOBTS1P&NBP2=$NANOBTS2P&TASKID=$taskNo' data-pchart-alt='Picture3'>Picture 3</a></div>";
+echo '<div id="footer"><font size ="3" face="Century Gothic" color="black"> Number of tasks: '.$taskAmount.'<br> Number of tasks tried to add to the DB but had an error: '. $errorAdding .'<br> TEST SUCCESSFULLY FINISHED!</font></div>';
+ ob_implicit_flush(1);
+ usleep(100);
+ fwrite($fp, 'DISCONNECT'); //tell the testing software it may close
+ break;
+ }
+ else
+ {
+ //parse the received data!
+ $received = str_replace("\n",'',$received);
+ $dataForTable = explode("|", $received);
+ $callFrom = strtoupper($dataForTable[1]);
+ $callTo = strtoupper($dataForTable[2]);
+ $testStatus = strtoupper($dataForTable[3]);
if($callFrom == 'SIP' || $callTo == 'SIP')
{
@@ -198,7 +180,6 @@ if ($locking == '1') //1 means nobody is on the website
{
$LSFKS = 0;
}
-
}
elseif($testStatus == '999')
{
@@ -268,7 +249,10 @@ if ($locking == '1') //1 means nobody is on the website
}
elseif($testStatus == '998' || $testStatus == '802')
{
- $GSMRZ1 = 0; //where is nanoBTS1
+ if ($GSMRZ1 != 1)
+ {
+ $GSMRZ1 = 0;
+ }
}
}
elseif ($callTo == 'GSMRZ1')
@@ -282,7 +266,10 @@ if ($locking == '1') //1 means nobody is on the website
}
elseif($testStatus == '999' || $testStatus == '801')
{
- $GSMRZ1 = 0; //where is nanoBTS1
+ if ($GSMRZ1 != 1)
+ {
+ $GSMRZ1 = 0;
+ }
}
}
}
@@ -326,11 +313,17 @@ if ($locking == '1') //1 means nobody is on the website
elseif ($testStatus == '500')
{
$NANOBTS1P = 0;
- $GSMRZ2= 0;
+ if ($GSMRZ2 != 1)
+ {
+ $GSMRZ2 = 0;
+ }
}
elseif($testStatus == '998' || $testStatus == '802')
{
- $GSMRZ2 = 0; //where is nanoBTS1
+ if ($GSMRZ2 != 1)
+ {
+ $GSMRZ2= 0;
+ }
$NANOBTS1P= 1;
}
}
@@ -357,11 +350,17 @@ if ($locking == '1') //1 means nobody is on the website
elseif ($testStatus == '501')
{
$NANOBTS1P = 0;
- $GSMRZ2= 0;
+ if ($GSMRZ2 != 1)
+ {
+ $GSMRZ2 = 0;
+ }
}
elseif($testStatus == '999' || $testStatus == '801')
{
- $GSMRZ2 = 0; //where is nanoBTS1
+ if ($GSMRZ2 != 1)
+ {
+ $GSMRZ2 = 0;
+ }
if ($NANOBTS1P != 1)
{
$NANOBTS1P= 2;
@@ -382,7 +381,7 @@ if ($locking == '1') //1 means nobody is on the website
elseif($testStatus == '486')
{
- if ($GSMRZ3 != 1)
+ if ($GSMRZ3 != 1)
{
$GSMRZ3 = -1;
}
@@ -409,14 +408,20 @@ if ($locking == '1') //1 means nobody is on the website
}
}
}
- elseif ($testStatus == '5010')
+ elseif ($testStatus == '501')
{
$NANOBTS2P = 0;
- $GSMRZ3= 0;
+ if ($GSMRZ3 != 1)
+ {
+ $GSMRZ3= 0;
+ }
}
elseif($testStatus == '998' || $testStatus == '802')
{
- $GSMRZ3 = 0; //where is nanoBTS1
+ if ($GSMRZ3 != 1)
+ {
+ $GSMRZ3= 0;
+ }
$NANOBTS2P= 1;
}
}
@@ -443,18 +448,24 @@ if ($locking == '1') //1 means nobody is on the website
elseif ($testStatus == '501')
{
$NANOBTS2P = 0;
- $GSMRZ3= 0;
+ if ($GSMRZ3 != 1)
+ {
+ $GSMRZ3 = 0;
+ }
}
elseif($testStatus == '999' || $testStatus == '801')
{
- $GSMRZ3 = 0; //where is nanoBTS1
+ if ($GSMRZ3 != 1)
+ {
+ $GSMRZ3 = 0;
+ }
if ($NANOBTS1P != 1)
{
$NANOBTS2P= 2;
}
}
- }//
+ }
}
if($callFrom == 'GSMEXT.O2' || $callTo == 'GSMEXT.O2')
@@ -783,7 +794,10 @@ if ($locking == '1') //1 means nobody is on the website
elseif ($testStatus == '500')
{
$LANDLINEP = 0;
- $LANDLINE = 0;
+ if ($LANDLINE != 1)
+ {
+ $LANDLINE = 0;
+ }
}
elseif($testStatus == '998' || $testStatus == '802')
{
@@ -815,7 +829,10 @@ if ($locking == '1') //1 means nobody is on the website
elseif ($testStatus == '501')
{
$LANDLINEP = 0;
- $LANDLINE = 0;
+ if ($LANDLINE != 1)
+ {
+ $LANDLINE = 0;
+ }
}
elseif($testStatus == '998')
{
@@ -866,11 +883,17 @@ if ($locking == '1') //1 means nobody is on the website
elseif ($testStatus == '500')
{
$UNISIPP = 0;
- $UNISIP = 0;
+ if ($UNISIP != 1)
+ {
+ $UNISIP = 0;
+ }
}
elseif($testStatus == '998' || $testStatus == '802')
{
- $UNISIP = 1;
+ if ($UNISIP != 1)
+ {
+ $UNISIP = 0;
+ }
$UNISIPP = 1;
}
}
@@ -906,65 +929,60 @@ if ($locking == '1') //1 means nobody is on the website
}
}
}
- //END OF TEST CASE EXAMPLE
- echo '<tr>
- <th scope = "row" id = "r100">'. $dataForTable[1] . '</th>
- <th scope = "row" id = "r100">'. $dataForTable[2] . '</th>
- <td> ' . $dataForTable[4] . ' </td>
- <td>' . $dataForTable[3] . '</td>
- </tr>';
- //echo $received . '<br>';
- ob_implicit_flush(1);
- usleep(100);
- fwrite($fp, "CONTINUE"); //tell the software to proceed with the test and confirm receiving data
- }
- }
- }
-
- fclose($fp);//close the soccket and the connection
-
- }
+ echo '<tr>
+ <th scope = "row" id = "r100">'. $dataForTable[1] . '</th>
+ <th scope = "row" id = "r100">'. $dataForTable[2] . '</th>
+ <td> ' . $dataForTable[4] . ' </td>
+ <td>' . $dataForTable[3] . '</td>
+ </tr>';
+ ob_implicit_flush(1);
+ usleep(100);
+ fwrite($fp, "CONTINUE"); //tell the software to proceed with the test and confirm receiving data
+ }
+ }
+ }
+
+ fclose($fp);//close the soccket and the connection
+
+ }
- }
- elseif($softwareRunning1 == '1')
- {
- echo 'Testing software was not started(didn\'t obtain the lock)! Check it!';
- }
- else
- {
- echo 'Testing software didn\'t obtain the lock';
- }
- }
- elseif($softwareRunning == '0') //0 means the software is still running in the background
- {
- echo 'Testing software is still running! Maybe you should kill it (if not started manually!)';
- }
- else
- {
- echo 'We have an unknown error! Refresh te web page!';
- }
-
- //$release = ReleaseLock($nameOfLock);
- //echo $release . "<br>";
- }
- else
- {
- echo 'No single test was selected! Please go back and select at least one test';
- }
- }
- elseif($lockMe == '0') //0 means if the attempt timed out (for example, because another client has previously locked the name)
- {
- echo 'Someone was faster than you';
- }
- else
- {
- // # if an error occurred (such as running out of memory or the thread was killed with
- echo 'We have an error here';
- }
-}
+ }
+ elseif($softwareRunning1 == '1')
+ {
+ echo 'Testing software was not started(didn\'t obtain the lock)! Check it!';
+ }
+ else
+ {
+ echo 'Testing software didn\'t obtain the lock';
+ }
+ }
+ elseif($softwareRunning == '0') //0 means the software is still running in the background
+ {
+ echo 'Testing software is still running! Maybe you should kill it (if not started manually!)';
+ }
+ else
+ {
+ echo 'We have an unknown error! Refresh te web page!';
+ }
+ }
+ else
+ {
+ echo 'No single test was selected! Please go back and select at least one test';
+ }
+ }
+ elseif($lockMe == '0') //0 means if the attempt timed out (for example, because another client has previously locked the name)
+ {
+ echo 'Someone was faster than you';
+ }
+ else
+ {
+ // # if an error occurred (such as running out of memory or the thread was killed with
+ echo 'We have an error here';
+ }
+ }
elseif ($locking == '0') //0 means somebody is already on the web site
{
- echo 'Somebody is using the web site already!' . "<br>";
+echo 'Somebody is using the web site already!' . "<br>";
}
else
{
diff --git a/Website/mutexTry.php_old b/Website/mutexTry.php_old
deleted file mode 100755
index 5579437..0000000
--- a/Website/mutexTry.php_old
+++ /dev/null
@@ -1,966 +0,0 @@
-<html>
-<head>
-<script src='delayedLoading.js' type="text/javascript"></script>
-<!--ADD HERE ALL THE NEEDED META DATA -->
-<title>Network test live results!</title>
-<link rel="stylesheet" href="css/tableCSS.css" type="text/css" media="screen">
-</head>
-<body onscroll="scrollEvent();" onload="loaderInit();">
-<div>
-<?php
-
-//Connection stuff
-//DB
-include 'dbconnection.php'
-
-//Socket
-$port = 34500;
-$ip = 'localhost';
-
-$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql');
-
-mysql_select_db($dbname);
-//End of connection stuff
-include 'mutexFunctions.php'; //mutex functions, isfree, lock and release
-include 'insertData.php'; //insert task functions
-
-$nameOfLock = 'Webpage';
-$timeToKeepTheMutex = 360;
-
-$locking = isLocked($nameOfLock);//Check if the webpage is already open
-
-if ($locking == '1') //1 means nobody is on the website
-{
- $lockMe = Lock($nameOfLock,$timeToKeepTheMutex); //Set a mutex for the webpage
- if ($lockMe == '1') //1 means a successful lock
- {
-
- include 'post.php'; // read posted data and add them to the database
- //check if the software is running!
- $softwareLock = 'SoftwareStarted';
-
- if($taskAmount != 0)
- {
- $softwareRunning = isLocked($softwareLock);
- if($softwareRunning == '1') //1 means software is not started yet, start it
- {
- $startApp = fsockopen($ip, 34600, $errno, $error, 5);
- if (!$startApp)
- {
- printf('THE SOFTWARE THAT SHOULD RUN IN BACKGROUND IS NOT RUNNING!');
- }
- else
- {
- socket_set_timeout( $startApp, 50); //one should set the number of the longest test, so we can define the timeout
- fwrite($startApp, "START APP");
- usleep(2500);
- fclose($startApp);
- }
-
- sleep(6); //sleep till the software starts
- //the software should be running already and set the lock, now we test it and then connect to it!
-
- $softwareRunning1 = isLocked($softwareLock);
- if($softwareRunning1 == '0') //Software running and waiting for connection!
- {
- //try to open the socket and connect to the software
- $fp = fsockopen($ip, $port, $errno, $error, 5);
-
- if (!$fp)
- {
- echo 'Could not open the socket or connect to the testing software! Check ports on both sides!';
-
- }
- else
- {
- socket_set_timeout($fp,50); //one should set the number of the longest test, so we can define the timeout function (it is the number after "$fp,")
-
- fwrite($fp, "START TEST");
-
- if(!feof($fp))
- {
- while(!feof($fp))
- {
- $received = fgets($fp, 128); //receive data!
-
- if ($received == "CONFIRM\n") //we got the confirmation from the testing software
- {
- //test finished successfully
-
- $GSMRZ1 = 0;
- $GSMRZ2 = 0;
- $GSMRZ3 = 0;
-
- $SIP = 0;
- $UNISIP = 0;
- $LANDLINE = 0;
- $LSFKS = 0;
-
- $GSMEE = 0;
- $GSMEV = 0;
- $GSMET = 0;
- $GSMEO = 0;
-
- $SIPP = 2;
- $LANDLINEP = 2;
- $UNISIPP = 2;
- $NANOBTS1P = 2;
- $NANOBTS2P = 2;
- /////////// end of test!
- echo '<div id="main">
- <table summary = "Results">
- <thead>
- <tr>
- <th scope = "col"> From: </th>
- <th scope = "col" > To: </th>
- <th scope = "col"> Message: </th>
- <th scope = "col"> Status: </th>
- </tr>
- </thead>
- <!-- start of the table rows-->
- <tbody>';
- echo str_repeat("\n",7024);
- flush();
- sleep(6);
- $pings = mysql_query("select * from PingResultTable where taskNo=(select max(taskNo) from PingResultTable)");
-
- while($row = mysql_fetch_array($pings))
- {
- // echo $row['taskNo'];
- $SIPP = $row['sipServer'];
- $LANDLINEP = $row['sipGate'];
- $UNISIPP = $row['unisip'];
- $NANOBTS1P = $row['gsmBox1'];
- $NANOBTS2P = $row['gsmBox2'];
- }
- }
- elseif ($received == "TEST DONE\n")
- {
-
-
- echo '</tbody></table>';
- echo '</div>';
- echo '<div id="sidebar">';
- echo "<a class='pChart' href='networkResult.php?S=$SIP&RZ1=$GSMRZ1&RZ2=$GSMRZ2&RZ3=$GSMRZ3&US=$UNISIP&LL=$LANDLINE&LS=$LSFKS&EE=$GSMEE&EV=$GSMEV&ET=$GSMET&EO=$GSMEO&SP=$SIPP&SGP=$LANDLINEP&USP=$UNISIPP&NBP1=$NANOBTS1P&NBP2=$NANOBTS2P&TASKID=$taskNo' data-pchart-alt='Picture3'>Picture 3</a></div>";
- echo '<div id="footer"><font size ="3" face="Century Gothic" color="black"> Number of tasks: '.$taskAmount.'<br> Number of tasks tried to add to the DB but had an error: '. $errorAdding .'<br> TEST SUCCESSFULLY FINISHED!</font></div>';
- echo str_repeat("\n",7024);
- flush();
- usleep(100);
- fwrite($fp, 'DISCONNECT'); //tell the testing software it may close
- break;
- }
- else
- {
- //parse the received data!
- $received = str_replace("\n",'',$received);
- $dataForTable = explode("|", $received);
- $callFrom = strtoupper($dataForTable[1]);
- $callTo = strtoupper($dataForTable[2]);
- $testStatus = strtoupper($dataForTable[3]);
-
- if($callFrom == 'SIP' || $callTo == 'SIP')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $SIP = 1;
- $SIPP = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- //Check that SIP already working or not, if working, leave as it is, otherwise update that sip broken. same with LSFKS
- if ($SIP != 1)
- {
- $SIP = 1;
- }
- $SIPP = 1;
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'SIP')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- $SIP = 1;
- $SIPP = 1;
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
-
- }
- elseif($testStatus == '999')
- {
- if ($SIP != 1)
- {
- $SIP = -1;
- }
- $SIPP = 2;
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'SIP')
- {
- if ($testStatus == '999')
- {
- if ($SIP != 1)
- {
- $SIP = 0;
- }
- if ($SIPP != 1)
- {
- $SIPP = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998')
- {
- if ($SIP != 1)
- {
- $SIP = -1;
- }
- $SIPP = 2;
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- }
- if($callFrom == 'GSMRZ1' || $callTo == 'GSMRZ1')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMRZ1 = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMRZ1 != 1)
- {
- $GSMRZ1 = -1;
- }
- }
- if ($callFrom == 'GSMRZ1')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ1 != 1)
- {
- $GSMRZ1 = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- $GSMRZ1 = 0;
- }
- }
- elseif ($callTo == 'GSMRZ1')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ1 != 1)
- {
- $GSMRZ1 = 0;
- }
- }
- elseif($testStatus == '999' || $testStatus == '801')
- {
- $GSMRZ1 = 0;
- }
- }
- }
-
- if($callFrom == 'GSMRZ2' || $callTo == 'GSMRZ2')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMRZ2 = 1;
- $NANOBTS1P = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2 = -1;
- }
- $NANOBTS1P = 1;
- }
- if ($callFrom == 'GSMRZ2')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2= 0;
- }
-
- if ($testStatus == '801')
- {
- $NANOBTS1P= 1;
- }
- if ($testStatus == '999')
- {
- if ($NANOBTS1P != 1)
- {
- $NANOBTS1P= 0;
- }
- }
- }
- elseif ($testStatus == '500')
- {
- $NANOBTS1P = 0;
- $GSMRZ2= 0;
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- $GSMRZ2 = 0;
- $NANOBTS1P= 1;
- }
- }
- elseif ($callTo == 'GSMRZ2')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ2 != 1)
- {
- $GSMRZ2 = 0;
- }
- if ($testStatus == '802')
- {
- $NANOBTS1P= 1;
- }
- if ($testStatus == '998')
- {
- if ($NANOBTS1P != 1)
- {
- $NANOBTS1P= 0;
- }
- }
- }
- elseif ($testStatus == '501')
- {
- $NANOBTS1P = 0;
- $GSMRZ2= 0;
- }
- elseif($testStatus == '999' || $testStatus == '801')
- {
- $GSMRZ2 = 0;
- if ($NANOBTS1P != 1)
- {
- $NANOBTS1P= 2;
- }
-
- }
- }
-
- }
-
- if($callFrom == 'GSMRZ3' || $callTo == 'GSMRZ3')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMRZ3 = 1;
- $NANOBTS2P = 1;
- }
- elseif($testStatus == '486')
- {
-
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3 = -1;
- }
- $NANOBTS2P = 1;
- }
- if ($callFrom == 'GSMRZ3')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3= 0;
- }
-
- if ($testStatus == '801')
- {
- $NANOBTS2P= 1;
- }
- if ($testStatus == '999')
- {
- if ($NANOBTS2P != 1)
- {
- $NANOBTS2P= 0;
- }
- }
- }
- elseif ($testStatus == '5010')
- {
- $NANOBTS2P = 0;
- $GSMRZ3= 0;
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- $GSMRZ3 = 0;
- $NANOBTS2P= 1;
- }
- }
- elseif ($callTo == 'GSMRZ3')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMRZ3 != 1)
- {
- $GSMRZ3 = 0;
- }
- if ($testStatus == '802')
- {
- $NANOBTS2P= 1;
- }
- if ($testStatus == '998')
- {
- if ($NANOBTS2P != 1)
- {
- $NANOBTS2P= 0;
- }
- }
- }
- elseif ($testStatus == '501')
- {
- $NANOBTS2P = 0;
- $GSMRZ3= 0;
- }
- elseif($testStatus == '999' || $testStatus == '801')
- {
- $GSMRZ3 = 0;
- if ($NANOBTS1P != 1)
- {
- $NANOBTS2P= 2;
- }
-
- }
- }//
-
- }
- if($callFrom == 'GSMEXT.O2' || $callTo == 'GSMEXT.O2')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMEO = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMEO != 1)
- {
- $GSMEO = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'GSMEXT.O2')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEO != 1)
- {
- $GSMEO = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEO != 1)
- {
- $GSMEO =1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'GSMEXT.O2')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEO != 1)
- {
- $GSMEO = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEO != 1)
- {
- $GSMEO =0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- }
- if($callFrom == 'GSMEXT.VODA' || $callTo == 'GSMEXT.VODA')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMEV = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMEV != 1)
- {
- $GSMEV = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'GSMEXT.VODA')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEV != 1)
- {
- $GSMEV = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEV != 1)
- {
- $GSMEV =1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'GSMEXT.VODA')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEV != 1)
- {
- $GSMEV = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEV != 1)
- {
- $GSMEV =0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- }
-
- if($callFrom == 'GSMEXT.EPLUS' || $callTo == 'GSMEXT.EPLUS')
- {
- if($testStatus == '200')
- {
- $GSMEE = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMEE != 1)
- {
- $GSMEE = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'GSMEXT.EPLUS')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEE != 1)
- {
- $GSMEE = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEE != 1)
- {
- $GSMEE =1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'GSMEXT.EPLUS')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMEE != 1)
- {
- $GSMEE = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMEE != 1)
- {
- $GSMEE=0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '402')
- {
- if ($GSMEE != 1)
- {
- $GSMEE=0;
- }
- $LSFKS = 1;
- }
- }
- }
-
- if($callFrom == 'GSMEXT.TM' || $callTo == 'GSMEXT.TM')
- {
- if($testStatus == '200' || $testStatus == '402')
- {
- $GSMET = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($GSMET != 1)
- {
- $GSMET = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- }
- if ($callFrom == 'GSMEXT.TM')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMET != 1)
- {
- $GSMET = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMET != 1)
- {
- $GSMET =1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
- elseif ($callTo == 'GSMEXT.TM')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($GSMET != 1)
- {
- $GSMET = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- if ($GSMET != 1)
- {
- $GSMET =0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- }
- }
-
- }
-
- if($callFrom == 'LANDLINE' || $callTo == 'LANDLINE')
- {
-
- if($testStatus == '200' || $testStatus == '402')
- {
-
- $LANDLINEP = 1;
- $LANDLINE = 1;
- $LSFKS = 1;
- }
- elseif($testStatus == '486')
- {
- if ($LANDLINE != 1)
- {
- $LANDLINE = -1;
- }
- }
- if ($callFrom == 'LANDLINE')
- {
- if ($testStatus == '999')
- {
- if ($LANDLINE != 1)
- {
- $LANDLINE = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = -1;
- }
- if ($LANDLINEP != 1)
- {
- $LANDLINEP = 2;
- }
- }
- elseif ($testStatus == '500')
- {
- $LANDLINEP = 0;
- $LANDLINE = 0;
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- $LANDLINE = 1;
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- $LANDLINEP = 1;
- }
- }
- elseif ($callTo == 'LANDLINE')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($LANDLINE != 1)
- {
- $LANDLINE = 0;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- if ($LANDLINEP != 1)
- {
- $LANDLINEP = 0;
- }
- }
- elseif ($testStatus == '501')
- {
- $LANDLINEP = 0;
- $LANDLINE = 0;
- }
- elseif($testStatus == '998')
- {
- if ($LANDLINE != 1)
- {
- $LANDLINE = -1;
- }
- if ($LSFKS != 1)
- {
- $LSFKS = 0;
- }
- if ($LANDLINEP != 1)
- {
- $LANDLINEP = 2;
- }
- }
- }
- }
- if($callFrom == 'UNISIP' || $callTo == 'UNISIP')
- {
-
- if($testStatus == '200' || $testStatus == '402')
- {
- $UNISIPP = 1;
- $UNISIP = 1;
- }
- elseif($testStatus == '486')
- {
- $UNISIPP = 1;
- if ($UNISIP != 1)
- {
- $UNISIP = -1;
- }
- }
- if ($callFrom == 'UNISIP')
- {
- if ($testStatus == '999' || $testStatus == '801')
- {
- if ($UNISIP != 1)
- {
- $UNISIP = -1;
- }
- if ($UNISIPP != 1)
- {
- $UNISIPP = 2;
- }
- }
- elseif ($testStatus == '500')
- {
- $UNISIPP = 0;
- $UNISIP = 0;
- }
- elseif($testStatus == '998' || $testStatus == '802')
- {
- $UNISIP = 1;
- $UNISIPP = 1;
- }
- }
- if ($callTo == 'UNISIP')
- {
- if ($testStatus == '998' || $testStatus == '802')
- {
- if ($UNISIP != 1)
- {
- $UNISIP = -1;
- }
- if ($UNISIPP != 1)
- {
- $UNISIPP = 0;
- }
-
- }
- elseif ($testStatus == '501')
- {
- $UNISIPP = 0;
- $UNISIP = 0;
- }
- elseif($testStatus == '999' || $testStatus == '801')
- {
- if ($UNISIP != 1)
- {
- $UNISIP = 0;
- }
- if ($UNISIPP != 1)
- {
- $UNISIPP = 0;
- }
- }
- }
- }
- //END OF TEST CASE EXAMPLE
- echo '<tr>
- <th scope = "row" id = "r100">'. $dataForTable[1] . '</th>
- <th scope = "row" id = "r100">'. $dataForTable[2] . '</th>
- <td> ' . $dataForTable[4] . ' </td>
- <td>' . $dataForTable[3] . '</td>
- </tr>';
-
- echo str_repeat("\n",7024);
- flush();
- usleep(100);
- fwrite($fp, "CONTINUE"); //tell the software to proceed with the test and confirm receiving data
- }
- }
- }
-
- fclose($fp);//close the soccket and the connection
-
- }
-
- }
- elseif($softwareRunning1 == '1')
- {
- echo 'Testing software was not started(didn\'t obtain the lock)! Check it!';
- }
- else
- {
- echo 'Testing software didn\'t obtain the lock';
- }
- }
- elseif($softwareRunning == '0') //0 means the software is still running in the background
- {
- echo 'Testing software is still running! Maybe you should kill it (if not started manually!)';
- }
- else
- {
- echo 'We have an unknown error! Refresh te web page!';
- }
-
- }
- else
- {
- echo 'No single test was selected! Please go back and select at least one test';
- }
- }
- elseif($lockMe == '0') //0 means if the attempt timed out (for example, because another client has previously locked the name)
- {
- echo 'Someone was faster than you';
- }
- else
- {
- // # if an error occurred (such as running out of memory or the thread was killed with
- echo 'We have an error here';
- }
-}
-elseif ($locking == '0') //0 means somebody is already on the web site
-{
- echo 'Somebody is using the web site already!' . "<br>";
-}
-else
-{
- echo 'We have some serious error here';
-}
-?>
-</div>
-</body>
-</html>
-