7 Commits

Author SHA1 Message Date
8273ee8749 5.0.0 version. 2018-02-15 23:22:08 +01:00
071529b1e8 4.2.0 version. 2018-02-15 23:20:25 +01:00
fe1dabf59a 4.1.0 version. 2018-02-15 23:18:23 +01:00
fc521a47e0 4.0.0 SP1 version. 2018-02-15 23:16:10 +01:00
8fc8fc9b51 3.3.1 SP4 version. 2018-02-15 23:13:14 +01:00
13254581af 3.3.1 SP3 version. 2018-02-15 23:10:50 +01:00
095feb6932 2.1.1 version. 2018-02-15 23:00:13 +01:00
120 changed files with 54550 additions and 11811 deletions

BIN
58015045-00-XML-API.pdf Normal file

Binary file not shown.

View File

@ -1,365 +0,0 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="textAttributeType">
<xs:restriction base="xs:string">
<xs:pattern value="yes|no" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="integerAttributeType">
<xs:restriction base="xs:integer" />
</xs:simpleType>
<xs:simpleType name="verticalAlignType">
<xs:restriction base="xs:string">
<xs:pattern value="top|middle|bottom" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="horizontalAlignType">
<xs:restriction base="xs:string">
<xs:pattern value="left|middle|right" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="titleTagType" mixed="true">
<xs:attribute name="wrap" default="yes">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="yes|no"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="lineTagType" mixed="true">
<xs:attribute name="Size" default="single">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="double|single" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Align" default="left">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="right|left|center" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="imageType" mixed="true">
<xs:attribute name="verticalAlign" type="verticalAlignType" />
<xs:attribute name="horizontalAlign" type="horizontalAlignType" />
<xs:attribute name="height">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0" />
<xs:maxInclusive value="40" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="width" type="integerAttributeType" default="0" />
</xs:complexType>
<xs:complexType name="softKeyType">
<xs:sequence>
<xs:element name="Label" type="xs:string" />
<xs:element name="URI" type="xs:string" />
</xs:sequence>
<xs:attribute name="index" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1" />
<xs:maxInclusive value="6" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="icon" type="integerAttributeType" default="0" />
</xs:complexType>
<xs:complexType name="iconListType">
<xs:sequence>
<xs:element name="Icon" minOccurs="1" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:attribute name="index" type="integerAttributeType" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="AastraIPPhoneTextScreen">
<xs:complexType>
<xs:sequence>
<xs:element name="Title" type="titleTagType" minOccurs="0" maxOccurs="1"/>
<xs:element name="Text">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1" />
<xs:maxLength value="1000" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="SoftKey" type="softKeyType" minOccurs="0" maxOccurs="6"/>
</xs:sequence>
<xs:attribute name="destroyOnExit" type="textAttributeType" default="no" />
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="LockIn" type="textAttributeType" default="no" />
<xs:attribute name="Timeout" type="integerAttributeType" default="45" />
<xs:attribute name="cancelAction" type="xs:string" />
<xs:attribute name="allowAnswer" type="xs:string" default="no"/>
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneTextMenu">
<xs:complexType>
<xs:sequence>
<xs:element name="Title" type="titleTagType" minOccurs="0" maxOccurs="1"/>
<xs:element name="MenuItem" minOccurs="1" maxOccurs="15">
<xs:complexType>
<xs:all>
<xs:element name="Prompt" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="URI" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="Dial" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="Selection" type="xs:string" minOccurs="0" maxOccurs="1" />
</xs:all>
<xs:attribute name="base" type="xs:string" />
<xs:attribute name="icon" type="integerAttributeType" default="0" />
</xs:complexType>
</xs:element>
<xs:element name="SoftKey" type="softKeyType" minOccurs="0" maxOccurs="6" />
<xs:element name="IconList" type="iconListType" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="destroyOnExit" type="textAttributeType" default="no" />
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="LockIn" type="textAttributeType" default="no" />
<xs:attribute name="Timeout" type="integerAttributeType" default="45" />
<xs:attribute name="defaultIndex" type="integerAttributeType" default="1" />
<xs:attribute name="cancelAction" type="xs:string" />
<xs:attribute name="style" type="xs:string" default="numbered" />
<xs:attribute name="allowAnswer" type="xs:string" default="no"/>
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneInputScreen">
<xs:complexType>
<xs:sequence>
<xs:element name="Title" type="titleTagType" minOccurs="0" maxOccurs="1" />
<xs:element name="Prompt" minOccurs="0" maxOccurs="1" />
<xs:element name="URL" />
<xs:element name="Parameter" minOccurs="0" maxOccurs="1" />
<xs:element name="Default" minOccurs="0" maxOccurs="1" />
<xs:element name="Selection" minOccurs="0" maxOccurs="1" />
<xs:element name="InputField" minOccurs="0" maxOccurs="6">
<xs:complexType>
<xs:sequence>
<xs:element name="Prompt" minOccurs="0" maxOccurs="1" />
<xs:element name="Parameter" minOccurs="0" maxOccurs="1" />
<xs:element name="Default" minOccurs="0" maxOccurs="1" />
<xs:element name="Selection" minOccurs="0" maxOccurs="1" />
<xs:element name="SoftKey" type="softKeyType" minOccurs="0" maxOccurs="6"/>
</xs:sequence>
<xs:attribute name="type" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="IP|string|number|timeUS|dateUS|timeInt|dateInt|Empty" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="password" type="textAttributeType" default="no" />
<xs:attribute name="editable" type="textAttributeType" default="yes" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="IP|string|number|timeUS|dateUS|timeInt|dateInt" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="password" type="textAttributeType" default="no" />
<xs:attribute name="destroyOnExit" type="textAttributeType" default="no" />
<xs:attribute name="editable" type="textAttributeType" default="yes" />
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="LockIn" type="textAttributeType" default="no" />
<xs:attribute name="Timeout" type="integerAttributeType" default="45" />
<xs:attribute name="defaultIndex" type="integerAttributeType" default="1" />
<xs:attribute name="cancelAction" type="xs:string" />
<xs:attribute name="allowAnswer" type="xs:string" default="no"/>
<xs:attribute name="displayMode" default="uncondensed">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="condensed|uncondensed" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneDirectory">
<xs:complexType>
<xs:sequence>
<xs:element name="Title" type="xs:string" />
<xs:element name="MenuItem" minOccurs="1" maxOccurs="15">
<xs:complexType>
<xs:sequence>
<xs:element name="Prompt" type="xs:string" />
<xs:element name="URI" type="xs:string" />
</xs:sequence>
<xs:attribute name="base" type="xs:string" />
<xs:attribute name="icon" type="integerAttributeType" default="0" />
</xs:complexType>
</xs:element>
<xs:element name="SoftKey" type="softKeyType" minOccurs="0" maxOccurs="6" />
<xs:element name="IconList" type="iconListType" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="destroyOnExit" type="textAttributeType" default="no" />
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="LockIn" type="textAttributeType" default="no" />
<xs:attribute name="Timeout" type="integerAttributeType" default="45" />
<xs:attribute name="next" type="xs:string" />
<xs:attribute name="previous" type="xs:string" />
<xs:attribute name="cancelAction" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneExecute">
<xs:complexType>
<xs:sequence>
<xs:element name="ExecuteItem" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="URI" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="triggerDestroyOnExit" type="textAttributeType" default="no" />
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneStatus">
<xs:complexType>
<xs:sequence>
<xs:element name="Session" type="xs:string" minOccurs="0" />
<xs:element name="Message">
<xs:complexType mixed="true">
<xs:attribute name="index" type="integerAttributeType" use="required" />
<xs:attribute name="type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="alert" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Timeout" type="integerAttributeType" default="3" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="triggerDestroyOnExit" type="textAttributeType" default="no" />
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationItem" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Parameter" type="xs:string" />
<xs:element name="Value" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="triggerDestroyOnExit" type="textAttributeType" default="no" />
</xs:complexType>
</xs:element>
<xs:group name="linesAndScroll">
<xs:sequence>
<xs:element name="Scroll" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Line" type="lineTagType" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Height" type="integerAttributeType" default="1" />
</xs:complexType>
</xs:element>
<xs:element name="Line" type="lineTagType" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:group>
<xs:element name="AastraIPPhoneFormattedTextScreen">
<xs:complexType>
<xs:sequence>
<xs:element name="Line" type="lineTagType" minOccurs="0" maxOccurs="unbounded" />
<xs:group ref="linesAndScroll" minOccurs="0" maxOccurs="1"/>
<xs:element name="SoftKey" type="softKeyType" minOccurs="0" maxOccurs="6" />
</xs:sequence>
<xs:attribute name="destroyOnExit" type="textAttributeType" default="no" />
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="LockIn" type="textAttributeType" default="no" />
<xs:attribute name="Timeout" type="integerAttributeType" default="45" />
<xs:attribute name="cancelAction" type="xs:string" />
<xs:attribute name="allowAnswer" type="xs:string" default="no"/>
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneImageScreen">
<xs:complexType>
<xs:sequence>
<xs:element name="Image" type="imageType" />
<xs:element name="SoftKey" type="softKeyType" minOccurs="0" maxOccurs="6" />
</xs:sequence>
<xs:attribute name="destroyOnExit" type="textAttributeType" default="no" />
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="LockIn" type="textAttributeType" default="no" />
<xs:attribute name="Timeout" type="integerAttributeType" default="45" />
<xs:attribute name="cancelAction" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneImageMenu">
<xs:complexType>
<xs:sequence>
<xs:element name="Image" type="imageType" />
<xs:element name="URIList">
<xs:complexType>
<xs:sequence>
<xs:element name="URI" minOccurs="0" maxOccurs="12">
<xs:complexType mixed="true">
<xs:attribute name="base" />
<xs:attribute name="key" use="required" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]|#|\*" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SoftKey" type="softKeyType" minOccurs="0" maxOccurs="6" />
<xs:element name="IconList" type="iconListType" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="destroyOnExit" type="textAttributeType" default="no" />
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="LockIn" type="textAttributeType" default="no" />
<xs:attribute name="Timeout" type="integerAttributeType" default="45" />
<xs:attribute name="cancelAction" type="xs:string" />
<xs:attribute name="allowAnswer" type="xs:string" default="no"/>
</xs:complexType>
</xs:element>
</xs:schema>

Binary file not shown.

View File

@ -1,21 +1,25 @@
AASTRA TELECOM INC.
July 2007
MITEL
July 2017
-PA-001008-00-00-XML-API.pdf - Aastra IP Phone XML API document. For use with IP Phone SIP Release 2.1.0
-58015045-00-XML-API.pdf - Mitel IP Phone XML API document. For use with Mitel SIP Phones Release 5.0.0
-AastraXMLSchema 2.1.0.xsd - XML Schema which can be used to validate XML development.
For use with IP Phone SIP Release 2.1
-XMLSchema.xsd - XML Schema which can be used to validate XML development.
-php_classes 2.1.0.zip - contains the directory php classes with all the XML classes.
-php_classes.zip - contains the directory php classes with all the XML classes.
The files are commented.
-asterisk sample source 2.1.0.zip - contains the source code of XML Asterisk integration described in the XML API document
The files are commented.
-xml-xampp.zip contains the source code of sample XML applications to be used with XAMPP as described in the XML API Document
The files are commented
-startup sample source 2.1.0.zip - contains the source code of the Asterisk self configuration described in the XML API Document
The files are commented.
-csv_directory.zip contains the source code of a directory application using a csv file as the data source.
The files are commented
-ldap_directory.zip contains the source code of a directory application using LDAP.
The files are commented
-pictureCallerID.zip contains the source code of an application providing formatted images for the graphic phones for incoming and outgoing calls.
The files are commented
For XML documents related to IP Phone SIP Release 1.3.0, see file PA-001004-00-00.zip
For XML documents related to IP Phone SIP Release 1.3.1, see file PA-001004-00-01.zip
@ -23,3 +27,30 @@ For XML documents related to IP Phone SIP Release 1.4.1, see file PA-001004-00-0
For XML documents related to IP Phone SIP Release 1.4.2, see file PA-001004-00-03.zip
For XML documents related to IP Phone SIP Release 2.0.1, see file PA-001007-00-00.zip
For XML documents related to IP Phone SIP Release 2.0.2, see file PA-001007-00-01.zip
For XML documents related to IP Phone SIP Release 2.1.0, see file PA-001008-00-00.zip
For XML documents related to IP Phone SIP Release 2.1.1 and 2.1.2, see file PA-001008-00-01.zip
For XML documents related to IP Phone SIP Release 2.2.0, see file PA-001008-00-02.zip
For XML documents related to IP Phone SIP Release 2.2.1, see file PA-001008-00-03.zip
For XML documents related to IP Phone SIP Release 2.3.0, see file PA-001008-01-00.zip
For XML documents related to IP Phone SIP Release 2.3.1, see file PA-001008-01-01.zip
For XML documents related to IP Phone SIP Release 2.4.0, see file PA-001008-03-00.zip
For XML documents related to IP Phone SIP Release 2.4.1, 2.5.0 and 2.5.1 see file PA-001008-03-01.zip
For XML documents related to IP Phone SIP Release 2.5.2 see file PA-001008-04-01.zip
For XML documents related to IP Phone SIP Release 2.5.3 see file PA-001008-04-02.zip
For XML documents related to IP Phone SIP Release 2.6.0 see file PA-001008-05-00.zip
For XML documents related to 6739i Release 3.0.0 see file PA-001011-00-00.zip
For XML documents related to 6739i Release 3.0.1 see file PA-001011-00-01.zip
For XML documents related to 6739i Release 3.2.0 see file PA-001011-02-00.zip
For XML documents related to 6739i Release 3.2.1 see file PA-001011-02-01.zip
For XML documents related to 6739i Release 3.2.2 see file PA-001011-02-04.zip
For XML documents related to IP Phone SIP Release 3.3.0 see file PA-001011-03-00.zip
For XML documents related to IP Phone SIP Release 3.3.1 SP4 see file PA-001011-03-04.zip
For XML documents related to IP Phone SIP Release 4.0.0 see file PA-001011-04-00.zip
For XML documents related to IP Phone SIP Release 4.0.0 SP1 see file PA-001011-04-01.zip
For XML documents related to IP Phone SIP Release 4.0.0 SP2 see file PA-001011-04-02.zip
For XML documents related to IP Phone SIP Release 4.1.0 see file PA-001011-05-00.zip
For XML documents related to IP Phone SIP Release 4.1.0-SP2 see file PA-001011-05-01.zip
For XML documents related to IP Phone SIP Release 4.2.0 see file PA-001011-06-00.zip
For XML documents related to IP Phone SIP Release 4.2.0-SP1 see file PA-001011-06-01.zip
For XML documents related to IP Phone SIP Release 4.3.0 see file 58015044-00-XML_API.zip
For XML documents related to IP Phone SIP Release 4.3.0-SP1 see file 58015044-01-XML_API.zip

27467
XML-API.txt

File diff suppressed because it is too large Load Diff

598
XMLSchema.xsd Normal file
View File

@ -0,0 +1,598 @@
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="textAttributeType">
<xs:restriction base="xs:string">
<xs:pattern value="yes|no" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="layoutType">
<xs:restriction base="xs:string">
<xs:pattern value="1|2" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="modeType">
<xs:restriction base="xs:string">
<xs:pattern value="regular|extended|fullscreen" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="modeType2">
<xs:restriction base="xs:string">
<xs:pattern value="regular|extended" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="integerAttributeType">
<xs:restriction base="xs:integer" />
</xs:simpleType>
<xs:simpleType name="verticalAlignType">
<xs:restriction base="xs:string">
<xs:pattern value="top|middle|bottom" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="horizontalAlignType">
<xs:restriction base="xs:string">
<xs:pattern value="left|middle|right" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="colorType">
<xs:restriction base="xs:string">
<xs:pattern value="white|
black|
darkred|
red|
lightred|
darkgreen|
green|
lightgreen|
darkblue|
blue|
lightblue|
darkyellow|
yellow|
lightyellow|
darkgray|
gray|
lightgray|
darkbrown|
brown|
lightbrown|
darkmagenta|
magenta|
lightmagenta|
darkcyan|
cyan|
lightcyan
"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="titleTagType" mixed="true">
<xs:attribute name="wrap" default="yes">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="yes|no"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="lineTagType" mixed="true">
<xs:attribute name="Color" default="white" type="colorType"/>
<xs:attribute name="Size" default="regular">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="double|regular|small|large" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Align" default="left">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="right|left|center" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="wrap" default="no">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="yes|no"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="blink" default="no">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="no|slow|fast"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="topTitleTagType" mixed="true">
<xs:attribute name="Color" default="white" type="colorType"/>
<xs:attribute name="icon" type="integerAttributeType" default="0" />
</xs:complexType>
<xs:complexType name="imageType" mixed="true">
<xs:attribute name="verticalAlign" type="verticalAlignType" />
<xs:attribute name="horizontalAlign" type="horizontalAlignType" />
<xs:attribute name="height">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0" />
<xs:maxInclusive value="40" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="width" type="integerAttributeType" default="0" />
</xs:complexType>
<xs:complexType name="softKeyType">
<xs:sequence>
<xs:element name="Label" type="xs:string" />
<xs:element name="URI" type="xs:string" />
</xs:sequence>
<xs:attribute name="index" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1" />
<xs:maxInclusive value="10" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="icon" type="integerAttributeType" default="0" />
</xs:complexType>
<xs:complexType name="iconListType">
<xs:sequence>
<xs:element name="Icon" minOccurs="1" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:attribute name="index" type="integerAttributeType" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="AastraIPPhoneTextScreen">
<xs:complexType>
<xs:sequence>
<xs:element name="Title" type="titleTagType" minOccurs="0" maxOccurs="1"/>
<xs:element name="Text">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1" />
<xs:maxLength value="2000" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Dial" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="line" use="optional">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1" />
<xs:maxInclusive value="24" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="SoftKey" type="softKeyType" minOccurs="0" maxOccurs="10"/>
</xs:sequence>
<xs:attribute name="destroyOnExit" type="textAttributeType" default="no" />
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="LockIn" type="textAttributeType" default="no" />
<xs:attribute name="CallProtection" type="textAttributeType" default="no" />
<xs:attribute name="Timeout" type="integerAttributeType" default="45" />
<xs:attribute name="bgColor" type="colorType" default="white" />
<xs:attribute name="cancelAction" type="xs:string" />
<xs:attribute name="doneAction" type="xs:string" />
<xs:attribute name="allowAnswer" type="xs:string" default="no"/>
<xs:attribute name="allowDTMF" type="xs:string" default="no"/>
<xs:attribute name="allowDrop" type="xs:string" default="no"/>
<xs:attribute name="allowConf" type="xs:string" default="no"/>
<xs:attribute name="allowXfer" type="xs:string" default="no"/>
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneTextMenu">
<xs:complexType>
<xs:sequence>
<xs:element name="Title" type="titleTagType" minOccurs="0" maxOccurs="1"/>
<xs:element name="MenuItem" minOccurs="1" maxOccurs="30">
<xs:complexType>
<xs:all>
<xs:element name="Prompt" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="URI" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="Dial" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="line" use="optional">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1" />
<xs:maxInclusive value="24" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Selection" type="xs:string" minOccurs="0" maxOccurs="1" />
</xs:all>
<xs:attribute name="base" type="xs:string" />
<xs:attribute name="icon" type="integerAttributeType" default="0" />
<xs:attribute name="iconr1" type="integerAttributeType" default="0" />
<xs:attribute name="iconr2" type="integerAttributeType" default="0" />
<xs:attribute name="iconr3" type="integerAttributeType" default="0" />
<xs:attribute name="iconr4" type="integerAttributeType" default="0" />
</xs:complexType>
</xs:element>
<xs:element name="SoftKey" type="softKeyType" minOccurs="0" maxOccurs="10" />
<xs:element name="IconList" type="iconListType" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="destroyOnExit" type="textAttributeType" default="no" />
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="LockIn" type="textAttributeType" default="no" />
<xs:attribute name="CallProtection" type="textAttributeType" default="no" />
<xs:attribute name="Timeout" type="integerAttributeType" default="45" />
<xs:attribute name="bgColor" type="colorType" default="white" />
<xs:attribute name="defaultIndex" type="integerAttributeType" default="1" />
<xs:attribute name="cancelAction" type="xs:string" />
<xs:attribute name="style" type="xs:string" default="numbered" />
<xs:attribute name="allowAnswer" type="xs:string" default="no"/>
<xs:attribute name="wrapList" type="textAttributeType" default="no" />
<xs:attribute name="numberLaunch" type="textAttributeType" default="no" />
<xs:attribute name="touchLaunch" type="textAttributeType" default="no" />
<xs:attribute name="fontMono" type="textAttributeType" default="yes" />
<xs:attribute name="scrollConstrain" type="textAttributeType" default="no" />
<xs:attribute name="unitScroll" type="textAttributeType" default="no" />
<xs:attribute name="scrollUp" type="xs:string" />
<xs:attribute name="scrollDown" type="xs:string" />
<xs:attribute name="allowDrop" type="xs:string" default="no"/>
<xs:attribute name="allowConf" type="xs:string" default="no"/>
<xs:attribute name="allowXfer" type="xs:string" default="no"/>
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneIconMenu">
<xs:complexType>
<xs:sequence>
<xs:element name="TopTitle" type="topTitleTagType" minOccurs="0" maxOccurs="1" />
<xs:element name="MenuItem" minOccurs="1" maxOccurs="24">
<xs:complexType>
<xs:all>
<xs:element name="URI" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="Dial" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="line" use="optional">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1" />
<xs:maxInclusive value="24" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Selection" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element name="Line" type="lineTagType" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="iconName" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="scaled" type="textAttributeType" default="no" />
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="fontMono" type="textAttributeType" default="no" />
</xs:complexType>
</xs:element>
<xs:element name="SoftKey" type="softKeyType" minOccurs="0" maxOccurs="10" />
<xs:element name="IconList" type="iconListType" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="destroyOnExit" type="textAttributeType" default="no" />
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="LockIn" type="textAttributeType" default="no" />
<xs:attribute name="CallProtection" type="textAttributeType" default="no" />
<xs:attribute name="Timeout" type="integerAttributeType" default="45" />
<xs:attribute name="bgColor" type="colorType" default="white" />
<xs:attribute name="defaultIndex" type="integerAttributeType" default="1" />
<xs:attribute name="cancelAction" type="xs:string" />
<xs:attribute name="allowAnswer" type="xs:string" default="no"/>
<xs:attribute name="fontMono" type="textAttributeType" default="no" />
<xs:attribute name="allowDrop" type="xs:string" default="no"/>
<xs:attribute name="allowConf" type="xs:string" default="no"/>
<xs:attribute name="allowXfer" type="xs:string" default="no"/>
<xs:attribute name="mode" type="modeType2" default="regular" />
<xs:attribute name="layout" type="layoutType" default="1" />
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneInputScreen">
<xs:complexType>
<xs:sequence>
<xs:element name="Title" type="titleTagType" minOccurs="0" maxOccurs="1" />
<xs:element name="Prompt" minOccurs="0" maxOccurs="1" />
<xs:element name="URL" />
<xs:element name="Parameter" minOccurs="0" maxOccurs="1" />
<xs:element name="Default" minOccurs="0" maxOccurs="1" />
<xs:element name="Selection" minOccurs="0" maxOccurs="1" />
<xs:element name="InputField" minOccurs="0" maxOccurs="10">
<xs:complexType>
<xs:sequence>
<xs:element name="Prompt" minOccurs="0" maxOccurs="1" />
<xs:element name="Parameter" minOccurs="0" maxOccurs="1" />
<xs:element name="Default" minOccurs="0" maxOccurs="1" />
<xs:element name="Selection" minOccurs="0" maxOccurs="1" />
<xs:element name="SoftKey" type="softKeyType" minOccurs="0" maxOccurs="10"/>
</xs:sequence>
<xs:attribute name="type" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="IP|string|stringN|number|timeUS|dateUS|timeInt|dateInt|Empty" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="password" type="textAttributeType" default="no" />
<xs:attribute name="editable" type="textAttributeType" default="yes" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="IP|string|stringN|number|timeUS|dateUS|timeInt|dateInt" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="password" type="textAttributeType" default="no" />
<xs:attribute name="destroyOnExit" type="textAttributeType" default="no" />
<xs:attribute name="editable" type="textAttributeType" default="yes" />
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="inputLanguage" use="optional" default="English">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="English|French|Spanish|German|Italian|Russian|Portuguese|Français|Español|Deutsch|Italiano|Русский|Português|Nordic" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="LockIn" type="textAttributeType" default="no" />
<xs:attribute name="CallProtection" type="textAttributeType" default="no" />
<xs:attribute name="Timeout" type="integerAttributeType" default="45" />
<xs:attribute name="bgColor" type="colorType" default="white" />
<xs:attribute name="defaultIndex" type="integerAttributeType" default="1" />
<xs:attribute name="cancelAction" type="xs:string" />
<xs:attribute name="allowAnswer" type="xs:string" default="no"/>
<xs:attribute name="allowDrop" type="xs:string" default="no"/>
<xs:attribute name="allowConf" type="xs:string" default="no"/>
<xs:attribute name="allowXfer" type="xs:string" default="no"/>
<xs:attribute name="displayMode" default="uncondensed">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="condensed|uncondensed" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneDirectory">
<xs:complexType>
<xs:sequence>
<xs:element name="Title" type="xs:string" />
<xs:element name="MenuItem" minOccurs="1" maxOccurs="15">
<xs:complexType>
<xs:sequence>
<xs:element name="Prompt" type="xs:string" />
<xs:element name="URI" type="xs:string" />
</xs:sequence>
<xs:attribute name="base" type="xs:string" />
<xs:attribute name="icon" type="integerAttributeType" default="0" />
</xs:complexType>
</xs:element>
<xs:element name="SoftKey" type="softKeyType" minOccurs="0" maxOccurs="10" />
<xs:element name="IconList" type="iconListType" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="destroyOnExit" type="textAttributeType" default="no" />
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="LockIn" type="textAttributeType" default="no" />
<xs:attribute name="Timeout" type="integerAttributeType" default="45" />
<xs:attribute name="next" type="xs:string" />
<xs:attribute name="previous" type="xs:string" />
<xs:attribute name="cancelAction" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneExecute">
<xs:complexType>
<xs:sequence>
<xs:element name="ExecuteItem" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="URI" type="xs:string" />
<xs:attribute name="interruptCall" type="textAttributeType" default="yes" />
<xs:attribute name="title" type="xs:string" default="" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="triggerDestroyOnExit" type="textAttributeType" default="no" />
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneStatus">
<xs:complexType>
<xs:sequence>
<xs:element name="Session" type="xs:string" minOccurs="0" />
<xs:element name="Message">
<xs:complexType mixed="true">
<xs:attribute name="index" type="integerAttributeType" use="required" />
<xs:attribute name="type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="normal|alert|icon|toaster" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Timeout" type="integerAttributeType" default="3" />
<xs:attribute name="URI" type="xs:string" />
<xs:attribute name="icon" type="integerAttributeType" default="0" />
</xs:complexType>
</xs:element>
<xs:element name="IconList" type="iconListType" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="triggerDestroyOnExit" type="textAttributeType" default="no" />
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationItem" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Parameter" type="xs:string" />
<xs:element name="Value" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="triggerDestroyOnExit" type="textAttributeType" default="no" />
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneSoftkey">
<xs:complexType>
<xs:sequence>
<xs:element name="SoftkeyItem" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Parameter" type="xs:string" />
<xs:element name="Value" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="triggerDestroyOnExit" type="textAttributeType" default="no" />
</xs:complexType>
</xs:element>
<xs:group name="linesAndScroll">
<xs:sequence>
<xs:element name="Scroll" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Line" type="lineTagType" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Height" type="integerAttributeType" default="1" />
</xs:complexType>
</xs:element>
<xs:element name="Line" type="lineTagType" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:group>
<xs:element name="AastraIPPhoneFormattedTextScreen">
<xs:complexType>
<xs:sequence>
<xs:element name="Line" type="lineTagType" minOccurs="0" maxOccurs="unbounded" />
<xs:group ref="linesAndScroll" minOccurs="0" maxOccurs="1"/>
<xs:element name="Dial" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="line" use="optional">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1" />
<xs:maxInclusive value="24" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="SoftKey" type="softKeyType" minOccurs="0" maxOccurs="10" />
</xs:sequence>
<xs:attribute name="destroyOnExit" type="textAttributeType" default="no" />
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="LockIn" type="textAttributeType" default="no" />
<xs:attribute name="CallProtection" type="textAttributeType" default="no" />
<xs:attribute name="Timeout" type="integerAttributeType" default="45" />
<xs:attribute name="bgColor" type="colorType" default="white" />
<xs:attribute name="cancelAction" type="xs:string" />
<xs:attribute name="doneAction" type="xs:string" />
<xs:attribute name="allowAnswer" type="xs:string" default="no"/>
<xs:attribute name="allowDTMF" type="xs:string" default="no"/>
<xs:attribute name="allowDrop" type="xs:string" default="no"/>
<xs:attribute name="allowConf" type="xs:string" default="no"/>
<xs:attribute name="allowXfer" type="xs:string" default="no"/>
<xs:attribute name="fontMono" type="textAttributeType" default="yes" />
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneImageScreen">
<xs:complexType>
<xs:sequence>
<xs:element name="Image" type="imageType" />
<xs:element name="SoftKey" type="softKeyType" minOccurs="0" maxOccurs="10" />
</xs:sequence>
<xs:attribute name="destroyOnExit" type="textAttributeType" default="no" />
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="mode" type="modeType" default="regular" />
<xs:attribute name="LockIn" type="textAttributeType" default="no" />
<xs:attribute name="CallProtection" type="textAttributeType" default="no" />
<xs:attribute name="Timeout" type="integerAttributeType" default="45" />
<xs:attribute name="bgColor" type="colorType" default="white" />
<xs:attribute name="imageAction" type="xs:string" />
<xs:attribute name="doneAction" type="xs:string" />
<xs:attribute name="cancelAction" type="xs:string" />
<xs:attribute name="allowDTMF" type="xs:string" default="no"/>
</xs:complexType>
</xs:element>
<xs:element name="AastraIPPhoneImageMenu">
<xs:complexType>
<xs:sequence>
<xs:element name="Image" type="imageType" />
<xs:element name="URIList">
<xs:complexType>
<xs:sequence>
<xs:element name="URI" minOccurs="0" maxOccurs="12">
<xs:complexType mixed="true">
<xs:attribute name="base" />
<xs:attribute name="key" use="required" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]|#|\*" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SoftKey" type="softKeyType" minOccurs="0" maxOccurs="10" />
<xs:element name="IconList" type="iconListType" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="destroyOnExit" type="textAttributeType" default="no" />
<xs:attribute name="Beep" type="textAttributeType" default="no" />
<xs:attribute name="mode" type="modeType" default="regular" />
<xs:attribute name="LockIn" type="textAttributeType" default="no" />
<xs:attribute name="CallProtection" type="textAttributeType" default="no" />
<xs:attribute name="Timeout" type="integerAttributeType" default="45" />
<xs:attribute name="bgColor" type="colorType" default="white" />
<xs:attribute name="imageAction" type="xs:string" />
<xs:attribute name="doneAction" type="xs:string" />
<xs:attribute name="cancelAction" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -1,192 +0,0 @@
<?
#####################################################################
# Asterisk Call Forward for Aastra SIP Phones R2.1.0 or better
#
# php source code
# Provided by Aastra Telecom Ltd 2007
#
# @user extension
# @action '' or check
# @key identification of the key used for the function
#####################################################################
include (dirname(__FILE__)."/phpagi/misc.php");
include (dirname(__FILE__)."/phpagi/phpagi-asmanager.php");
#####################################################################
# Aastra_decode_HTTP_header
#
# Returns an array
# 0 Phone Type
# 1 Phone MAC Address
# 2 Phone firmware version
#####################################################################
function Aastra_decode_HTTP_header()
{
$user_agent=$_SERVER["HTTP_USER_AGENT"];
if(stristr($user_agent,"Aastra"))
{
$value=preg_split("/ MAC:/",$user_agent);
$fin=preg_split("/ /",$value[1]);
$value[1]=preg_replace("/\-/","",$fin[0]);
$value[2]=preg_replace("/V:/","",$fin[1]);
}
else
{
$value[0]="MSIE";
$value[1]="NA";
$value[2]="NA";
}
return($value);
}
function Aastra_manage_cf($user,$action,$value)
{
# Connect to AGI
$cf="";
$as = new AGI_AsteriskManager();
$res = $as->connect();
# Depending on action
switch($action)
{
case 'cancel':
$res = $as->Command('database del CF '.$user);
break;
case 'set':
$res = $as->Command('database put CF '.$user.' '.$value);
$cf=$value;
break;
default:
#GET CFWD
$res = $as->Command('database get CF '.$user);
$line=split("\n", $res['data']);
$data=split(" ", $line[0]);
if($data[0]=="Value:") $cf=$data[1];
if($cf=="")
{
$data=split(" ", $line[1]);
if($data[0]=="Value:") $cf=$data[1];
}
break;
}
# Disconnect properly
$as->disconnect();
return($cf);
}
#####################################################################
# Global parameters
$Server = "http://".$_SERVER['SERVER_ADDR'].$_SERVER['SCRIPT_NAME'];
# Retrieve parameters
$user=$_GET['user'];
$action=$_GET['action'];
$value=$_GET['value'];
$key=$_GET['key'];
# Get header info
$header=Aastra_decode_HTTP_header();
# Depending on action
switch($action)
{
case 'cancel':
case 'set':
case 'check':
$cf=Aastra_manage_cf($user,$action,$value);
$output = "<AastraIPPhoneExecute triggerDestroyOnExit=\"yes\">\n";
$output .= "<ExecuteItem URI=\"".$Server."?action=msg&amp;user=".$user."\"/>\n";
if($cf=='') $output .= "<ExecuteItem URI=\"Led: ".$key."=off\"/>\n";
else $output .= "<ExecuteItem URI=\"Led: ".$key."=on\"/>\n";
if($action!='check')
{
switch($header[0])
{
case "Aastra53i":
break;
default:
$output .= "<ExecuteItem URI=\"".$Server."?user=".$user."&amp;key=".$key."\"/>\n";
break;
}
}
$output .= "</AastraIPPhoneExecute>\n";
break;
case 'change':
$cf=Aastra_manage_cf($user,$action,$value);
$output = "<AastraIPPhoneInputScreen type=\"number\" destroyOnExit=\"yes\">\n";
$output .= "<Title>Call Forward</Title>\n";
$output .= "<Prompt>Enter destination</Prompt>\n";
$output .= "<URL>".$Server."?user=$user&amp;action=set&amp;key=$key</URL>\n";
$output .= "<Parameter>value</Parameter>\n";
$output .= "<Default>$cf</Default>\n";
$output .= "</AastraIPPhoneInputScreen>\n";
break;
case 'msg':
$cf=Aastra_manage_cf($user,$action,$value);
$output = "<AastraIPPhoneStatus>\n";
$output .= "<Session>CFDND</Session>\n";
if ($cf=="") $output .= "<Message index=\"1\"></Message>\n";
else $output .= "<Message index=\"1\">CFWD activated</Message>\n";
$output .= "</AastraIPPhoneStatus>\n";
break;
default:
$cf=Aastra_manage_cf($user,$action,$value);
switch($header[0])
{
case "Aastra53i":
$output = "<AastraIPPhoneTextMenu destroyOnExit=\"yes\">\n";
if($cf=="") $output .= "<Title>CFWD deactivated</Title>\n";
else $output .= "<Title>CFWD set (".$cf.")</Title>\n";
if($cf!="")
{
$output .= "<MenuItem>\n";
$output .= "<Prompt>Cancel</Prompt>\n";
$output .= "<URI>$Server/cfwd.php?action=cancel&amp;user=$user&amp;key=$key</URI>\n";
$output .= "</MenuItem>\n";
}
$output .= "<MenuItem>\n";
$output .= "<Prompt>Change</Prompt>\n";
$output .= "<URI>$Server/cfwd.php?action=change&amp;user=$user&amp;key=$key</URI>\n";
$output .= "</MenuItem>\n";
$output .= "</AastraIPPhoneTextMenu>\n";
break;
default:
$output = "<AastraIPPhoneTextScreen destroyOnExit=\"yes\">\n";
$output .= "<Title>Call Forward for $user</Title>\n";
if ($cf=="") $output .= "<Text>Call Forward is currently deactivated.</Text>\n";
else $output .= "<Text>Call Forward is currently set to $cf.</Text>\n";
$output .= "<SoftKey index=\"1\">\n";
$output .= "<Label>Change</Label>\n";
$output .= "<URI>$Server/cfwd.php?action=change&amp;user=$user&amp;key=$key</URI>\n";
$output .= "</SoftKey>\n";
if($cf!="")
{
$output .= "<SoftKey index=\"2\">\n";
$output .= "<Label>Cancel</Label>\n";
$output .= "<URI>$Server/cfwd.php?action=cancel&amp;user=$user&amp;key=$key</URI>\n";
$output .= "</SoftKey>\n";
}
$output .= "<SoftKey index=\"6\">\n";
$output .= "<Label>Done</Label>\n";
$output .= "<URI>SoftKey:Exit</URI>\n";
$output .= "</SoftKey>\n";
$output .= "</AastraIPPhoneTextScreen>\n";
break;
}
break;
}
header("Content-Type: text/xml");
header("Content-Length: ".strlen($output));
echo $output;
exit;
?>

View File

@ -1,175 +0,0 @@
<?
#####################################################################
# Asterisk Directory for Aastra SIP Phones R2.0.0 or better
#
# php source code
# Provided by Aastra Telecom Ltd 2007
#
# Parses
# - SIP users
# - IAX users
#
# Warning
# Location of Asterisk config files is set to "/etc/asterisk"
#####################################################################
function Aastra_decode_HTTP_header()
{
$user_agent=$_SERVER["HTTP_USER_AGENT"];
if(stristr($user_agent,"Aastra"))
{
$value=preg_split("/ MAC:/",$user_agent);
$fin=preg_split("/ /",$value[1]);
$value[1]=preg_replace("/\-/","",$fin[0]);
$value[2]=preg_replace("/V:/","",$fin[1]);
}
else
{
$value[0]="MSIE";
$value[1]="NA";
$value[2]="NA";
}
return($value);
}
# Location of asterisk config files
$location = "/etc/asterisk/";
# Global Variables
$Server = "http://".$_SERVER['SERVER_ADDR'].$_SERVER['SCRIPT_NAME'];
# Init number of records
$index=0;
# Parse sip.conf
$sip_array=parse_ini_file($location."sip_additional.conf", true);
while ($v=current($sip_array))
{
if((isset($v['callerid'])) and (key($sip_array)!="register"))
{
$temp=$v['callerid'];
$len=strlen($temp);
$callerid=substr($temp,0,$len-(strlen(strrchr($temp, '<'))));
$directory[] = "<Prompt>". $callerid."</Prompt>\n"."<URI>Dial:".key($sip_array)."</URI>\n"."<Selection>".key($sip_array)."</Selection>\n"."<Dial>".key($sip_array)."</Dial>\n";
$index++;
}
next($sip_array);
}
# Parse iax.conf
$iax_array=parse_ini_file($location."iax.conf", true);
while($v=current($iax_array))
{
if(isset($v['name']))
{
$directory[]="<Prompt>".$v['name']."</Prompt>\n"."<URI>Dial:".key($iax_array)."</URI>\n"."<Dial>".key($iax_array)."</Dial>\n";
$index++;
}
next($iax_array);
}
# Sort Directory
sort($directory);
# Get header info
$header=Aastra_decode_HTTP_header();
switch($header[0])
{
case 'Aastra53i':
$MaxLines=13;
break;
default:
$MaxLines=15;
break;
}
# Retrieve last page
$last=intval($index/$MaxLines);
if(($index-$last*$MaxLines) != 0) $last++;
# Retrieve current page
$page=$_GET['page'];
if (empty($page)) $page=1;
# Display Page
$output ="<AastraIPPhoneTextMenu destroyOnExit=\"yes\">";
$output .= "<Title>Directory ($page/$last)</Title>\n";
$index=1;
foreach ($directory as $v)
{
if(($index>=(($page-1)*$MaxLines+1)) and ($index<=$page*$MaxLines))
{
$output .= "<MenuItem>\n";
$output .= $v;
$output .= "</MenuItem>\n";
}
$index++;
}
# Depending on the phone
switch($header[0])
{
case 'Aastra53i':
# Previous button as a menu
if($page!=1)
{
$previous=$page-1;
$output .= "<MenuItem>\n";
$output .= "<Prompt>Previous</Prompt>\n"."<URI>".$Server."?page=".$previous."</URI>\n";
$output .= "</MenuItem>\n";
}
# Next button as a menu
if($page!=$last)
{
$next=$page+1;
$output .= "<MenuItem>\n";
$output .= "<Prompt>Next</Prompt>\n";
$output .= "<URI>".$Server."?page=".$next."</URI>\n";
$output .= "</MenuItem>\n";
}
break;
default:
# Dial button
$output .= "<SoftKey index=\"1\">\n";
$output .= "<Label>Dial</Label>\n";
$output .= "<URI>SoftKey:Select</URI>\n";
$output .= "</SoftKey>\n";
# Next button
if($page!=$last)
{
$next=$page+1;
$output .= "<SoftKey index=\"5\">\n";
$output .= "<Label>Next</Label>\n";
$output .= "<URI>$Server?page=$next</URI>\n";
$output .= "</SoftKey>\n";
}
# Previous button
if($page!=1)
{
$previous=$page-1;
$output .= "<SoftKey index=\"2\">\n";
$output .= "<Label>Previous</Label>\n";
$output .= "<URI>$Server?page=$previous</URI>\n";
$output .= "</SoftKey>\n";
}
# Exit Button
$output .= "<SoftKey index=\"6\">\n";
$output .= "<Label>Exit</Label>\n";
$output .= "<URI>SoftKey:Exit</URI>\n";
$output .= "</SoftKey>\n";
break;
}
# End of the object
$output .= "</AastraIPPhoneTextMenu>\n";
# HTTP header and output
header("Content-Type: text/xml");
header("Content-Length: ".strlen($output));
echo $output;
?>

View File

@ -1,150 +0,0 @@
<?
#####################################################################
# Asterisk DND for Aastra SIP Phones R2.0.0 or better
#
# php source code
# Provided by Aastra Telecom Ltd 2006
#
# @user=extension
# @action=change or check
# @key identification of the key used for the function
#####################################################################
include (dirname(__FILE__)."/phpagi/misc.php");
include (dirname(__FILE__)."/phpagi/phpagi-asmanager.php");
#####################################################################
# Aastra_decode_HTTP_header
#
# Returns an array
# 0 Phone Type
# 1 Phone MAC Address
# 2 Phone firmware version
#####################################################################
function Aastra_decode_HTTP_header()
{
$user_agent=$_SERVER["HTTP_USER_AGENT"];
if(stristr($user_agent,"Aastra"))
{
$value=preg_split("/ MAC:/",$user_agent);
$fin=preg_split("/ /",$value[1]);
$value[1]=preg_replace("/\-/","",$fin[0]);
$value[2]=preg_replace("/V:/","",$fin[1]);
}
else
{
$value[0]="MSIE";
$value[1]="NA";
$value[2]="NA";
}
return($value);
}
function Aastra_manage_dnd($user,$action)
{
# Connect to AGI
$as = new AGI_AsteriskManager();
$res = $as->connect();
#DND GET
$res = $as->Command('database get DND '.$user);
$line=split("\n", $res['data']);
$value=split(" ", $line[0]);
if($value[1]=="YES") $dnd=1;
if($dnd==0)
{
$value=split(" ", $line[1]);
if($value[1]=="YES") $dnd=1;
}
if($action=='change')
{
# change DND status
if($dnd==0)
{
$res = $as->Command('database put DND '.$user.' YES');
$dnd=1;
}
else
{
$res = $as->Command('database del DND '.$user);
$dnd=0;
}
}
# Disconnect properly
$as->disconnect();
return($dnd);
}
#####################################################################
# Global parameters
#####################################################################
$Server = "http://".$_SERVER['SERVER_ADDR'].$_SERVER['SCRIPT_NAME'];
$dnd=0;
# Retrieve parameters
$user=$_GET['user'];
$action=$_GET['action'];
$status=$_GET['status'];
$key=$_GET['key'];
# Force default action
if($action=="") $action="change";
# Get header info
$header=Aastra_decode_HTTP_header();
# Setup header type
header("Content-Type: text/xml");
# Depending on action
switch($action)
{
case 'display':
$output = "<AastraIPPhoneFormattedTextScreen destroyOnExit=\"yes\" Timeout=\"2\">\n";
$output .= "<Line/>\n";
$output .= "<Line/>\n";
if ($status==1) $output .= "<Line Size=\"double\" Align=\"center\">DND activated</Line>\n";
else $output .= "<Line Size=\"double\" Align=\"center\">DND deactivated</Line>\n";
$output .= "<SoftKey index=\"6\">\n";
$output .= "<Label> </Label>\n";
$output .= "<URI>SoftKey:Exit</URI>\n";
$output .= "</SoftKey>\n";
$output .= "</AastraIPPhoneFormattedTextScreen>\n";
break;
case 'msg':
$output = "<AastraIPPhoneStatus>\n";
$output .= "<Session>CFDND</Session>\n";
if ($status==1) $output .= "<Message index=\"0\">DND activated</Message>\n";
else $output .= "<Message index=\"0\"></Message>\n";
$output .= "</AastraIPPhoneStatus>\n";
break;
case 'change':
case 'check':
$dnd=Aastra_manage_dnd($user,$action);
$output = "<AastraIPPhoneExecute>\n";
$output .= "<ExecuteItem URI=\"".$Server."?action=msg&amp;status=".$dnd."\"/>\n";
if ($dnd==1) $output .= "<ExecuteItem URI=\"Led: ".$key."=on\"/>\n";
else $output .= "<ExecuteItem URI=\"Led: ".$key."=off\"/>\n";
switch($header[0])
{
case "Aastra53i":
break;
default:
if($action=='change') $output .= "<ExecuteItem URI=\"".$Server."?action=display&amp;status=".$dnd."\"/>\n";
break;
}
$output .= "</AastraIPPhoneExecute>\n";
break;
}
header("Content-Length: ".strlen($output));
echo $output;
?>

View File

@ -1,218 +0,0 @@
phpagi-asmanager: an Asterisk Manager class written in PHP
Matthew Asham <matthewa@bcwireless.net>
http://phpagi.sourceforge.net
------------------------------------------------------------------------------
------------------------------------------------------------------------------
SECURITY
------------------------------------------------------------------------------
Validation:
******If asterisk is running as root, the manager interface may allow the
execution of arbitrary shell commands as root. If the user can update any
configuration file that can execute arbitrary command (like the dialplan),
the system may be compromised.
Also, look out for command injection. Consider the following example:
$as->Events($_POST['events_status']);
We expect either 'on' or 'off', but the attacker uses:
"\r\n\r\nAction: Command\r\nCommand: database put forward 54321 19005551212";
Validation is a *must* for all user data.
Username and Secret:
Storing the username and secret in the config file will isolate them from your
code.
Isolation of username and secret in the config file does not mean that the
script cannot simple read the config file. The config file must be readable
by the script.
CREATING A NEW INSTANCE OF THE CLASS
------------------------------------------------------------------------------
The class can be created standalone of phpagi.php, or through phpagi.
STANDALONE:
require "phpagi-asmanager.php";
$as = new AGI_AsteriskManager();
FROM PHPAGI:
require "phpagi.php";
$agi = new AGI();
$as = $agi->new_AsteriskManager();
Notes:
* If the class is created using $agi->new_AsteriskManager(),
AGI_AsteriskManager will use the parent phpagi for logging to the Asterisk
console.
* phpagi.php will include phpagi-asmanager.php by itself.
* If phpagi-asmanager.php is included _before_ phpagi.php, phpagi.php will
not attempt to re-include it.
* If phpagi.php tries to include phpagi-asmanager.php but is unable to do
so, an error will be echoed to the asterisk console and the script will
continue running normally. in this case the return value of
new_AsteriskManager() will be FALSE.
------------------------------------------------------------------------------
CONFIGURATION
------------------------------------------------------------------------------
phpagi-asmanager uses the same configuration file as phpagi.conf (usually
/etc/asterisk/phpagi.conf). All configuration information specific to
phpagi-asmanager is contained in the [asmanager] section of the .conf file.
supported directives:
[asmanager]
# server to connect to
server=localhost
# default manager port
port=5038
#username for login
username=me_and_only_me
#password for login
secret=i_am_not_telling
------------------------------------------------------------------------------
CONNECTING
------------------------------------------------------------------------------
$res = $as->connect("localhost", "username", "password");
if($res == FALSE) {
echo "Connection failed.\n";
}
elseif($res == TRUE){
echo "Connection established.\n";
}
A port can also be specified for the hostname. eg:
$res = $as->connect("my.asterisk.server:1234", "username", "port");
If the no parameters are specified, the defaults from the config will be used.
------------------------------------------------------------------------------
DISCONNECTING
------------------------------------------------------------------------------
$as->disconnect();
------------------------------------------------------------------------------
SENDING REQUESTS
------------------------------------------------------------------------------
$as->send_request($eventname, $arrayofparameterstopass);
send_request() calls wait_request and returns an array of returned data from
the manager. If something went wrong, it returns false.
wait_request() shouldn't need to be called from a script directly unless you
are implementing merely an event listener.
wait_request() will also detect events and dispatch any registered event
handlers for the event.
examples:
$res = $as->send_request('EventName',
array('Channel'=>'Zap/1/16045551212',
'SomeParameter'=>'data'));
echo "Dump of returned data:\n";
foreach($res as $var=>$val)
echo "$var = $val\n";
$res['Response'] will generally be 'Success' on success and 'Error' on
failure. But this is not always true. If $res['Response'] == 'Follows', a
multi-line response will be stored in $res['data'].
Several manager commands have been aliased for convenience. See below.
------------------------------------------------------------------------------
EVENTS
------------------------------------------------------------------------------
TODO: non-blocking socket i/o.
The class uses event callbacks to process events received from the manager.
The event callback prototype looks like:
function dump_event($ecode, $data, $server, $port)
{
echo "received event '$ecode' from $server:$port\n";
print_r($data);
}
To register an event call back:
$as->add_event_handler('eventname', 'eventfunction');
eg:
$as->add_event_handler('registry', 'dump_event');
The special eventname "*" can also be registered. any eventname not
specifically registered will be handled by the "*" handler. If no "*" handler
is defined, the event will be silently ignored.
------------------------------------------------------------------------------
PRECANNED FUNCTIONS
------------------------------------------------------------------------------
The following Manager functions have been aliased for convenience:
AbsoluteTimeout
ChangeMonitor
Command
Events
ExtensionState
GetVar
Hangup
IAXPeers
ListCommands
Logoff
MailboxCount
MailboxStatus
Monitor
Originate
ParkedCalls
Ping
Queues
QueueStatus
Redirect
SetCDRUserField
SetVar
SIPpeers
Status
StopMontor
ZapDialOffhook
ZapDNDoff
ZapDNDon
ZapHangup
ZapTransfer

View File

@ -1,42 +0,0 @@
<?php
require "phpagi-asmanager.php";
$as = new AGI_AsteriskManager();
// && CONNECTING
$res = $as->connect();
$room = 1234;
$res = $as->Command('meetme list '.$room);
//echo $res['data'].'</br>';
$line= split("\n", $res['data']);
//print_r ($line);
echo $line[0];
$element= split(' ', $line[0]);
print_r ($element);
/*
</br>Array
(
[0] => User #: 1 Channel: IAX2/areskiax@areskiax-2 (Admn Muted) (unmonitored)
[1] => User #: 2 Channel: SIP/kphone-b15c (unmonitored)
[2] => 2 users in that conference.
[3] =>
)
*/
flush();
ob_flush();
// && DISCONNECTING
$as->disconnect();
?>

View File

@ -1,22 +0,0 @@
<?php
function getpost_ifset($test_vars)
{
if (!is_array($test_vars)) {
$test_vars = array($test_vars);
}
foreach($test_vars as $test_var) {
if (isset($_POST[$test_var])) {
global $$test_var;
$$test_var = $_POST[$test_var];
} elseif (isset($_GET[$test_var])) {
global $$test_var;
$$test_var = $_GET[$test_var];
}
}
}
?>

View File

@ -1,699 +0,0 @@
<?php
/**
* phpagi-asmanager.php : PHP Asterisk Manager functions
* Website: http://phpagi.sourceforge.net
*
* $Id: phpagi-asmanager.php,v 1.6 2005/02/16 23:31:50 pinhole Exp $
*
* Copyright (c) 2004 Matthew Asham <matthewa@bcwireless.net>
* All Rights Reserved.
*
* This software is released under the terms of the GNU Public License v2
* A copy of which is available from http://www.fsf.org/licenses/gpl.txt
*
*
* You are requested to drop me an Email letting me know that you're
* using it. This is more of a courtesy than anything else, but I am
* interested to know how it is being used.
*
* @package phpAGI
* @version 2.0
*/
/**
* Written for PHP 4.3.4, should work with older PHP 4.x versions.
* Please submit bug reports, patches, etc to http://sourceforge.net/projects/phpagi/
* Gracias. :)
*
*/
if(!class_exists('AGI'))
{
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'phpagi.php');
}
/**
* Asterisk Manager class
*
* @link http://www.voip-info.org/wiki-Asterisk+config+manager.conf
* @link http://www.voip-info.org/wiki-Asterisk+manager+API
* @example examples/sip_show_peer.php Get information about a sip peer
* @package phpAGI
*/
class AGI_AsteriskManager
{
/**
* Config variables
*
* @var array
* @access public
*/
var $config;
/**
* Socket
*
* @access public
*/
var $socket = NULL;
/**
* Server we are connected to
*
* @access public
* @var string
*/
var $server;
/**
* Port on the server we are connected to
*
* @access public
* @var integer
*/
var $port;
/**
* Parent AGI
*
* @access private
* @var AGI
*/
var $pagi;
/**
* Event Handlers
*
* @access private
* @var array
*/
var $event_handlers;
/**
* Constructor
*
* @param string $config is the name of the config file to parse or a parent agi from which to read the config
* @param array $optconfig is an array of configuration vars and vals, stuffed into $this->config['asmanager']
*/
function AGI_AsteriskManager($config=NULL, $optconfig=array())
{
// load config
if(!is_null($config) && file_exists($config))
$this->config = parse_ini_file($config, true);
elseif(file_exists(DEFAULT_PHPAGI_CONFIG))
$this->config = parse_ini_file(DEFAULT_PHPAGI_CONFIG, true);
// If optconfig is specified, stuff vals and vars into 'asmanager' config array.
foreach($optconfig as $var=>$val)
$this->config['asmanager'][$var] = $val;
// add default values to config for uninitialized values
if(!isset($this->config['asmanager']['server'])) $this->config['asmanager']['server'] = 'localhost';
if(!isset($this->config['asmanager']['port'])) $this->config['asmanager']['port'] = 5038;
if(!isset($this->config['asmanager']['username'])) $this->config['asmanager']['username'] = 'phpagi';
if(!isset($this->config['asmanager']['secret'])) $this->config['asmanager']['secret'] = 'phpagi';
}
/**
* Send a request
*
* @param string $action
* @param array $parameters
* @return array of parameters
*/
function send_request($action, $parameters=array())
{
$req = "Action: $action\r\n";
foreach($parameters as $var=>$val)
$req .= "$var: $val\r\n";
$req .= "\r\n";
fwrite($this->socket, $req);
return $this->wait_response();
}
/**
* Wait for a response
*
* If a request was just sent, this will return the response.
* Otherwise, it will loop forever, handling events.
*
* @param boolean $allow_timeout if the socket times out, return an empty array
* @return array of parameters, empty on timeout
*/
function wait_response($allow_timeout=false)
{
$timeout = false;
do
{
$type = NULL;
$parameters = array();
$buffer = trim(fgets($this->socket, 4096));
while($buffer != '')
{
$a = strpos($buffer, ':');
if($a)
{
if(!count($parameters)) // first line in a response?
{
$type = strtolower(substr($buffer, 0, $a));
if(substr($buffer, $a + 2) == 'Follows')
{
// A follows response means there is a miltiline field that follows.
$parameters['data'] = '';
$buff = fgets($this->socket, 4096);
while(substr($buff, 0, 6) != '--END ')
{
$parameters['data'] .= $buff;
$buff = fgets($this->socket, 4096);
}
}
}
// store parameter in $parameters
$parameters[substr($buffer, 0, $a)] = substr($buffer, $a + 2);
}
$buffer = trim(fgets($this->socket, 4096));
}
// process response
switch($type)
{
case '': // timeout occured
$timeout = $allow_timeout;
break;
case 'event':
$this->process_event($parameters);
break;
case 'response':
break;
default:
$this->log('Unhandled response packet from Manager: ' . print_r($parameters, true));
break;
}
} while($type != 'response' && !$timeout);
return $parameters;
}
/**
* Connect to Asterisk
*
* @example examples/sip_show_peer.php Get information about a sip peer
*
* @param string $server
* @param string $username
* @param string $secret
* @return boolean true on success
*/
function connect($server=NULL, $username=NULL, $secret=NULL)
{
// use config if not specified
if(is_null($server)) $server = $this->config['asmanager']['server'];
if(is_null($username)) $username = $this->config['asmanager']['username'];
if(is_null($secret)) $secret = $this->config['asmanager']['secret'];
// get port from server if specified
if(strpos($server, ':') !== false)
{
$c = explode(':', $server);
$this->server = $c[0];
$this->port = $c[1];
}
else
{
$this->server = $server;
$this->port = $this->config['asmanager']['port'];
}
// connect the socket
$errno = $errstr = NULL;
$this->socket = @fsockopen($this->server, $this->port, $errno, $errstr);
if($this->socket == false)
{
$this->log("Unable to connect to manager {$this->server}:{$this->port} ($errno): $errstr");
return false;
}
// read the header
$str = fgets($this->socket);
if($str == false)
{
// a problem.
$this->log("Asterisk Manager header not received.");
return false;
}
else
{
// note: don't $this->log($str) until someone looks to see why it mangles the logging
}
// login
$res = $this->send_request('login', array('Username'=>$username, 'Secret'=>$secret));
if($res['Response'] != 'Success')
{
$this->log("Failed to login.");
$this->disconnect();
return false;
}
return true;
}
/**
* Disconnect
*
* @example examples/sip_show_peer.php Get information about a sip peer
*/
function disconnect()
{
$this->logoff();
fclose($this->socket);
}
/**
* Set Absolute Timeout
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+AbsoluteTimeout
* @param string $channel
* @param integer $timeout
*/
function AbsoluteTimeout($channel, $timeout)
{
return $this->send_request('AbsoluteTimeout', array('Channel'=>$channel, 'Timeout'=>$timeout));
}
/**
* Change monitoring filename of a channel
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+ChangeMonitor
* @param string $channel
* @param string $file
*/
function ChangeMonitor($channel, $file)
{
return $this->send_request('ChangeMontior', array('Channel'=>$channel, 'File'=>$file));
}
/**
* Execute Command
*
* @example examples/sip_show_peer.php Get information about a sip peer
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+Command
* @link http://www.voip-info.org/wiki-Asterisk+CLI
* @param string $commadn
*/
function Command($command)
{
return $this->send_request('Command', array('Command'=>$command));
}
/**
* Enable/Disable sending of events to this manager
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+Events
* @param string $eventmask is either 'on', 'off', or 'system,call,log'
*/
function Events($eventmask)
{
return $this->send_request('Events', array('EventMask'=>$eventmask));
}
/**
* Check Extension Status
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+ExtensionState
* @param string $exten
* @param string $context
* @param string $actionid
*/
function ExtensionState($exten, $context, $actionid)
{
return $this->send_request('ExtensionState', array('Exten'=>$exten, 'Context'=>$context, 'ActionID'=>$actionid));
}
/**
* Gets a Channel Variable
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+GetVar
* @param string $channel
* @param string $variable
*/
function GetVar($channel, $variable)
{
return $this->send_request('GetVar', array('Channel'=>$channel, 'Variable'=>$variable));
}
/**
* Hangup Channel
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+Hangup
* @param string $channel
*/
function Hangup($channel)
{
return $this->send_request('Hangup', array('Channel'=>$channel));
}
/**
* List IAX Peers
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+IAXpeers
*/
function IAXPeers()
{
return $this->send_request('IAXPeers');
}
/**
* List available manager commands
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+ListCommands
*/
function ListCommands()
{
return $this->send_request('ListCommands');
}
/**
* Logoff Manager
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+Logoff
*/
function Logoff()
{
return $this->send_request('Logoff');
}
/**
* Check Mailbox Message Count
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+MailboxCount
* @param string $mailbox
*/
function MailboxCount($mailbox)
{
return $this->send_request('MailboxCount', array('Mailbox'=>$mailbox));
}
/**
* Check Mailbox
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+MailboxStatus
* @param string $mailbox
*/
function MailboxStatus($mailbox)
{
return $this->send_request('MailboxStatus', array('Mailbox'=>$mailbox));
}
/**
* Monitor a channel
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+Monitor
* @param string $channel
* @param string $file
*/
function Monitor($channel, $file)
{
return $this->send_request('Monitor', array('Channel'=>$channel, 'File'=>$file));
}
/**
* Originate Call
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+Originate
* @param string $channel
* @param string $exten
* @param string $context
* @param string $priority
* @param integer $timeout
* @param string $callerid
* @param string $variable
* @param string $account
* @param string $application
* @param string $data
*/
function Originate($channel, $exten, $context, $priority, $timeout, $callerid, $variable, $account, $application, $data)
{
$parameters = array();
if($channel) $parameters['Channel'] = $channel;
if($exten) $parameters['Exten'] = $exten;
if($context) $parameters['Context'] = $context;
if($priority) $parameters['Priority'] = $priority;
if($timeout) $parameters['Timeout'] = $timeout;
if($callerid) $parameters['CallerID'] = $callerid;
if($variable) $parameters['Variable'] = $variable;
if($account) $parameters['Account'] = $account;
if($application) $parameters['Application'] = $application;
if($data) $parameters['Data'] = $data;
return $this->send_request('Originate', $parameters);
}
/**
* List parked calls
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+ParkedCalls
*/
function ParkedCalls()
{
return $this->send_request('ParkedCalls');
}
/**
* Ping
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+Ping
*/
function Ping()
{
return $this->send_request('Ping');
}
/**
* Queues
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+Queues
*/
function Queues()
{
return $this->send_request('Queues');
}
/**
* Queue Status
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+QueueStatus
*/
function QueueStatus()
{
return $this->send_request('QueueStatus');
}
/**
* Redirect
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+Redirect
* @param string $channel
* @param string $extrachannel
* @param string $exten
* @param string $context
* @param string $priority
*/
function Redirect($channel, $extrachannel, $exten, $context, $priority)
{
return $this->send_request('Redirect', array('Channel'=>$channel, 'ExtraChannel'=>$extrachannel, 'Exten'=>$exten,
'Context'=>$context, 'Priority'=>$priority));
}
/**
* Set the CDR UserField
*/
function SetCDRUserField()
{
// XXX need to look at source to find this function...
return $this->send_request('SetCDRUserField');
}
/**
* Set Channel Variable
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+SetVar
* @param string $channel
* @param string $variable
* @param string $value
*/
function SetVar($channel, $variable, $value)
{
return $this->send_request('SetVar', array('Channel'=>$channel, 'Variable'=>$variable, 'Value'=>$value));
}
/**
* List SIP Peers
*/
function SIPpeers()
{
// XXX need to look at source to find this function...
return $this->send_request('SIPpeers');
}
/**
* Channel Status
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+Status
* @param string $channel
*/
function Status($channel)
{
return $this->send_request('Status', array('Channel'=>$channel));
}
/**
* Stop monitoring a channel
*
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+StopMonitor
* @param string $channel
*/
function StopMontor($channel)
{
return $this->send_request('StopMonitor', array('Channel'=>$channel));
}
/**
* Dial over Zap channel while offhook
*/
function ZapDialOffhook()
{
// XXX need to look at source to find this function...
return $this->send_request('ZapDialOffhook');
}
/**
* Toggle Zap channel Do Not Disturb status OFF
*/
function ZapDNDoff()
{
// XXX need to look at source to find this function...
return $this->send_request('ZapDNDoff');
}
/**
* Toggle Zap channel Do Not Disturb status ON
*/
function ZapDNDon()
{
// XXX need to look at source to find this function...
return $this->send_request('ZapDNDon');
}
/**
* Hangup Zap Channel
*/
function ZapHangup()
{
// XXX need to look at source to find this function...
return $this->send_request('ZapHangup');
}
/**
* Transfer Zap Channel
*/
function ZapTransfer()
{
// XXX need to look at source to find this function...
return $this->send_request('ZapTransfer');
}
/*
* Log a message
*
* @param string $message
* @param integer $level from 1 to 4
*/
function log($message, $level=1)
{
if($this->pagi != false)
$this->pagi->conlog($message, $level);
else
error_log(date('r') . ' - ' . $message);
}
/**
* Add event handler
*
* Known Events include ( http://www.voip-info.org/wiki-asterisk+manager+events )
* Link - Fired when two voice channels are linked together and voice data exchange commences.
* Unlink - Fired when a link between two voice channels is discontinued, for example, just before call completion.
* Newexten -
* Hangup -
* Newchannel -
* Newstate -
* Reload - Fired when the "RELOAD" console command is executed.
* Shutdown -
* ExtensionStatus -
* Rename -
* Newcallerid -
* Alarm -
* AlarmClear -
* Agentcallbacklogoff -
* Agentcallbacklogin -
* Agentlogoff -
* MeetmeJoin -
* MessageWaiting -
* join -
* leave -
* AgentCalled -
* ParkedCall -
* Cdr -
* ParkedCallsComplete -
* QueueParams -
* QueueMember -
* QueueStatusEnd -
* Status -
* StatusComplete -
* ZapShowChannels -
* ZapShowChannelsComplete -
*
* @param string $event type or * for default handler
* @param string $callback function
* @return boolean sucess
*/
function add_event_handler($event, $callback)
{
$event = strtolower($event);
if(isset($this->event_handlers[$event]))
{
$this->log("$event handler is already defined, not over-writing.");
return false;
}
$this->event_handlers[$event] = $callback;
return true;
}
/**
* Process event
*
* @access private
* @param array $parameters
* @return mixed result of event handler or false if no handler was found
*/
function process_event($parameters)
{
$ret = false;
$e = strtolower($parameters['Event']);
$this->log("Got event.. $e");
$handler = '';
if(isset($this->event_handlers[$e])) $handler = $this->event_handlers[$e];
elseif(isset($this->event_handlers['*'])) $handler = $this->event_handlers['*'];
if(function_exists($handler))
{
$this->logg("Execute handler $handler");
$ret = $handler($e, $parameters, $this->server, $this->port);
}
else
$this->log("No event handler for event '$e'");
return $ret;
}
}
?>

View File

@ -1,42 +0,0 @@
// example phpagi.conf
[phpagi]
#enable debuging
debug=true
#use internal error handler
error_handler=true
#mail errors to
admin=errors@intertech.net
#host name of this server
hostname=sip.mydomain.com
# temporary directory for storing temporary output
tempdir=/var/spool/asterisk/tmp/
[festival]
#path to text2wave binary
text2wave=/usr/bin/text2wave
[asmanager]
# server to connect to
server=localhost
# default manager port
port=5038
#username for login
username=me_and_only_me
#password for login
secret=i_am_not_telling
[cepstral]
#alternate text to speech engine
swift=/opt/swift/bin/swift
voice=David

File diff suppressed because it is too large Load Diff

View File

@ -1,37 +0,0 @@
<?
#############################################################################
# Asterisk Register - Update DND and CFWD status
#
# Aastra SIP Phones 2.1.0 or better
#
# Copyright 2006 Aastra Telecom Ltd
#
# script.php?user=XXX&dndkey=YYY&cfkey=ZZZ
# XXX is the extension of the phone on the platform
# YYY is the number of the dynamic dnd key
# ZZZ is the number of the dynamic cfwd key
#
#############################################################################
#####################################################################
# Global parameters
$Server = "http://".$_SERVER['SERVER_ADDR'].$_SERVER['SCRIPT_NAME'];
$Server = substr($Server,0,(strlen($Server)-strlen(strrchr($Server, "/"))+1));
# Retrieve parameters
$user=$_GET['user'];
$dndkey=$_GET['dndkey'];
$cfkey=$_GET['cfkey'];
# Update DND and CFWD
$output = "<AastraIPPhoneExecute>\n";
$output .= "<ExecuteItem URI=\"".$Server."dnd.php?action=check&amp;user=".$user."&amp;key=".$dndkey."\"/>\n";
$output .= "<ExecuteItem URI=\"".$Server."cfwd.php?action=check&amp;user=".$user."&amp;key=".$cfkey."\"/>\n";
$output .= "</AastraIPPhoneExecute>\n";
# Return object
header("Content-Type: text/xml");
header("Content-Length: ".strlen($output));
echo $output;
exit;
?>

24
csv_directory/License.txt Normal file
View File

@ -0,0 +1,24 @@
Copyright (c) 2005-2015 Mitel Networks
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of Aastra Telecom US, Inc. may not be used to endorse or promote
products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY MITEL NETWORKS ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL AASTRA TELECOM US, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -0,0 +1,34 @@
###############################################################################
# directory.conf
#
# Configuration file for the directory application
###############################################################################
###############################################################################
# Global configuration
#
# [General]
# password To protect the application with a password
# speeddial Configure is speedial is enabled (0 or 1)(optional)
# default Name of the default csv file located in directory
###############################################################################
[General]
password=
speeddial=1
default=directory
###############################################################################
# Dialing profile
#
# [Dialplan]
# country country code
# long distance long distance prefix
# international international prefix
# outgoing outgoing prefix
# local list of local phone numbers prefixes separated by a comma
###############################################################################
[Dialplan]
country=1
long distance=1
international=011
outgoing=9
local=

View File

@ -0,0 +1,23 @@
#############################################################################
# server.conf
#
# Main Configuration file for Mitel XML scripts
#
# Copyright 2005-2015 Mitel Networks
#
#############################################################################
[General]
# Public IP address (optional), if not provided $_SERVER['HTTP_HOST'] is used
public=
# Path for the Aastra cache directory (optional), if not provided /var/cache/aastra is used. Do not use '\' for Windows implementation.
cache=
# Path for the TFTP root directory (optional) if not provided /tftpboot is used. Do not use '\' for Windows implementation.
tftp=
# Path for the XML directory behind the HTTP Server (optional), default is xml
xmldirectory=
# Mode DEBUG (0 or 1), default is 0
debug=
# Mode TRACE (0 or 1), default is 0
trace=
# Forced language (optional), can be en, de, fr...
language=

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,899 @@
Katee,Littlefield,Tional Japan,Accountant,+1 (213)555-2761,,+1 (293)555-4300
Aveline,Ashmore,JTS Group,Business Analyst,+1 (785)555-3193,,+1 (903)555-5907
Caroline,Eastwood,MIC Japan,EDP Analyst,+1 (915)555-4095,+1 (649)555-8952,
Josie,Huey,Cyprosybay,Network Planning - Chief Engineer,+1 (501)555-3118,,+1 (207)555-3174
Clover,Churchill,SUN Technology Partners,Admin - Head/ Manager,+1 (546)555-3261,,+1 (688)555-2631
Rebekah,Rosensteel,MIC Japan,Front Office Manager,+1 (536)555-7175,,+1 (383)555-1647
Myles,Mcdonald,Systert Germany,Chemist,+1 (529)555-5580,,+1 (544)555-1723
Tyrrell,Sanders,Elliner Inc.,Supply Chain - Head,+1 (450)555-1436,,+1 (429)555-9564
Moss,Hunter,Mobellus Incorporated,Ratings Analyst,+1 (361)555-2074,,
Anna,Shirey,BRO Research,Visualiser,+1 (342)555-7532,,+1 (233)555-8622
Jarvis,Paul,Adrics Investments,Personal Assistant to CEO,+1 (977)555-1824,,+1 (509)555-6086
Elsdon,Randolph,Apers USA,Director on Board,+1 (502)555-1768,,+1 (524)555-6314
Tera,Cass,Gatia,Risk Manager,+1 (451)555-4750,,+1 (388)555-2609
Hervey,Schuth,Klas Investments,HR Executive,+1 (914)555-2307,,
Frederica,Powell,Come Devices,Purchase - Head,+1 (647)555-9782,,+1 (725)555-2612
Garnette,Noton,Coradiscon Design,Internal Auditor,+1 (541)555-6787,,+1 (915)555-9369
Sharona,Wortman,CVS Capital,CEO,+1 (744)555-6760,,+1 (390)555-7959
Phoenix,Richards,Systed Group,Script Writer,+1 (351)555-6851,+1 (367)555-6363,
Isadore,Aultman,VAR Ventures,Collections,+1 (898)555-7264,,+1 (891)555-2074
Ricky,Mitchell,Syste Technology,Features Writer,+1 (802)555-5528,,+1 (542)555-4238
Boyce,Hindman,Vellutionix Ventures,Country Manager,+1 (989)555-3897,,+1 (276)555-4904
Jaynie,Roche,Arch PLC,Events/ Promotions Manager,+1 (267)555-9330,,+1 (858)555-4645
Jeff,Quirin,Ationliess Inc.,R & D - Head/ Manager,+1 (280)555-7304,,
Donalda,Fleming,Phoology Group,Direct Marketing - Manager,+1 (423)555-6239,,+1 (398)555-2659
Mollie,Llora,Adrics Investments,Alliances Manager,+1 (442)555-7120,,
Branda,Powers,BOOBOO Development,IT/ Networking (EDP) - Manager,+1 (538)555-9374,,+1 (876)555-3123
Tyreek,Lowstetter,Etwork Development,Psychologist,+1 (706)555-1309,,+1 (780)555-7037
Lauryn,Burkett,Micresk PLC,Nephrologist,+1 (926)555-1008,,+1 (454)555-4479
Pen,Jube,Elliner Inc.,Account Manager,+1 (534)555-2445,,+1 (323)555-6416
Savannah,Polson,Softwarch Europe,Office Assistant,+1 (620)555-9752,,+1 (365)555-3586
Sidony,Barkley,SUN Technology Partners,Professor,+1 (454)555-5350,,+1 (322)555-3788
Jenae,Bynum,Unix,Banquet Sales,+1 (446)555-7734,,+1 (307)555-6381
Wilmer,Reighner,MIC Japan,Network Administrator,+1 (799)555-3837,,
Terrell,Fylbrigg,BOOBOO Development,Nurse,+1 (592)555-5044,,+1 (862)555-7774
Babs,Weeks,Prompackart Group,TV Anchor,+1 (676)555-2810,,+1 (404)555-5977
Dudley,Tomco,Appexare Partners,Technical Writer,+1 (695)555-8328,,+1 (553)555-7770
Staci,Rodacker,Syste Technology,Basic Research Scientist,+1 (445)555-7536,,+1 (705)555-3810
Maralyn,James,Inced,Chemist,+1 (801)555-7875,,+1 (608)555-6472
Sheree,Moulton,Appexare Partners,CEO,+1 (839)555-9224,,+1 (569)555-8344
Kemp,Richter,Ximpution Corporation,Business Analyst,+1 (698)555-5984,,+1 (442)555-4874
Kristia,Appleby,Dems Systems Inc.,Perfusionist,+1 (324)555-5967,,+1 (882)555-5350
Gavin,Eve,BOOBOO Development,Pharmacist,+1 (396)555-6956,,+1 (413)555-7664
Pierce,Gisiko,Prompackart Group,Basic Research Scientist,+1 (717)555-2759,,+1 (210)555-1743
Brook,Lotherington,Gatia,Pilot,+1 (703)555-7094,,
Jera,Mildred,Ultexacle Manufacturing,Technology Transfer Engineer,+1 (641)555-3381,,
Cambria,Klockman,Tional Japan,External Consultant,+1 (442)555-9950,+1 (637)555-6906,+1 (451)555-9335
Ladonna,Swabey,TED Group,Creative Director,+1 (205)555-5840,,+1 (720)555-4664
Goodwin,Todd,Softwarch Europe,Technician,+1 (239)555-8835,,+1 (842)555-6924
Brock,Newbiggin,MIC Japan,Graphic Designer,+1 (929)555-1631,,
Garth,Wilks,Elgg Research,M & A Advisor,+1 (973)555-3514,,+1 (534)555-4325
Camilla,Caldwell,Systexartion Corporation,Features Writer,+1 (650)555-6097,,
Felix,Rummel,Micresk PLC,Maintenance,+1 (494)555-9569,,+1 (850)555-9342
Maurene,Black,Etwork Development,Physician,+1 (662)555-8488,,+1 (912)555-2810
Lemoine,Compton,Search Ventures,EDP Analyst,+1 (753)555-5237,,+1 (284)555-9693
Trudie,Schere,ING Investments,Private Banker,+1 (415)555-7226,,+1 (719)555-9560
Jessamine,Oppenheimer,Intsco,Advertising - Manager,+1 (913)555-9957,,+1 (928)555-6757
Jethro,Jenner,Elgg Research,Maintenance Engineer,+1 (573)555-4326,,+1 (651)555-5570
Clarissa,Stanfield,MIC Japan,Entrepreneur,+1 (973)555-2632,,+1 (317)555-2318
Addy,Carpenter,Micronacts USA,Industrial Engineering,+1 (862)555-9859,,+1 (939)555-2389
Gaynor,Benford,Klas Investments,System Integrator,+1 (319)555-9776,,+1 (686)555-9345
Carey,Stainforth,Systert Germany,Branch Head,+1 (435)555-6355,,
Elisa,Soames,Ultexacle Manufacturing,Business Editor,+1 (310)555-1734,,+1 (331)555-4843
Meadow,Pheleps,BRO Research,Typist,+1 (868)555-2331,+1 (502)555-6789,
Alexandria,Congdon,Ping Design,Commercial - Manager,+1 (734)555-7174,,+1 (799)555-7821
Bertram,Richardson,Advarchnovel Incorporated,Foreman,+1 (867)555-5187,+1 (441)555-3995,+1 (519)555-5245
Alfred,Riggle,ING Investments,Psychiatrist,+1 (701)555-3545,,
Forrest,Steele,Gatia,VP - Administration,+1 (273)555-1915,,+1 (941)555-8872
Alyson,Mays,VAR Ventures,Perfusionist,+1 (643)555-1418,,+1 (835)555-1220
David,Kalp,INC Technology,POD Incharge,+1 (587)555-6297,+1 (850)555-6615,+1 (433)555-7666
Quanah,Walker,Gratialpinc,Visualiser,+1 (219)555-2355,,+1 (285)555-9691
Davin,Saline,CVS Capital,Internet Banking,+1 (754)555-3379,,+1 (894)555-8931
Curtis,Mcindoe,INC Technology,Receptionist,+1 (358)555-5099,,
Raven,Cypret,Ultexacle Manufacturing,Director on Board,+1 (551)555-1525,,+1 (528)555-4298
Aretha,Drennan,TED,IT/ Networking (EDP) - Manager,+1 (434)555-8498,,+1 (245)555-7425
Roxana,Lineman,BOO,Guest Relations Executive,+1 (326)555-8522,,+1 (548)555-5734
Sal,Robinson,Elgg Research,Business Analyst,+1 (407)555-6053,,+1 (530)555-6863
Claribel,Alcocke,Sems Capital,Technical Support Engineer,+1 (761)555-4088,+1 (300)555-7386,+1 (659)555-1045
Gemma,Alice,Systert Germany,Corporate Banking Region Head,+1 (338)555-6679,+1 (444)555-1121,+1 (314)555-6942
Ezekiel,Harris,Ping Design,Office Assistant,+1 (348)555-9132,,+1 (567)555-3010
Darrell,Canham,Systelgg Research,Trading Advisor,+1 (891)555-7661,,+1 (266)555-7092
Stanley,Stiffey,Aspers USA,Shift Manager,+1 (530)555-3628,,
Tex,Pierce,Systelgg Research,VP - Quality,+1 (692)555-4445,,+1 (551)555-4823
Julie,Wickes,Nola Technology,Web Designer,+1 (208)555-5347,,+1 (935)555-4200
Percival,Coughenour,VAR Ventures,Hearing Aid Technician,+1 (389)555-8057,,
Zed,Carter,Cyprosybay,Datawarehousing Consultants,+1 (722)555-1713,,+1 (493)555-8331
Sonia,Kanaga,SUN Technology Partners,Team Leader,+1 (821)555-7243,,+1 (461)555-7114
Doreen,Park,Search Ventures,Pharmacist,+1 (726)555-5512,,+1 (348)555-1368
Eileen,Blyant,VAR Ventures,Business Center Manager,+1 (549)555-2358,,+1 (307)555-3246
Ben,Teagarden,TED,Shift Supervisor,+1 (460)555-8398,,+1 (703)555-9510
Wilfrid,Hays,Systexartion Corporation,Industrial Relations Manager,+1 (705)555-8080,,
Augustine,Pratt,Imagation Asia,VP - Technology,+1 (671)555-2191,,+1 (744)555-7035
Devin,Burris,Systed Group,Orthopaedist,+1 (806)555-2697,,+1 (808)555-8988
Jackie,Shafer,TED Group,Nutritionist,+1 (740)555-3038,,+1 (932)555-1307
Amanda,Berkheimer,Appexare Partners,Legal - Head,+1 (561)555-2290,,
Malvina,Briner,Ultexacle Manufacturing,Real Estate Broker,+1 (934)555-7383,,+1 (528)555-5976
Darell,Casteel,SUN Technology Partners,Collections,+1 (322)555-8651,,
Prunella,Chase,Search Ventures,Country Manager,+1 (827)555-4561,,+1 (691)555-1855
Hadley,Ramos,Gratialpinc,Money Market Dealer,+1 (302)555-5866,,+1 (740)555-3638
Billie,Carmichael,Ping Design,Shift Supervisor,+1 (220)555-5165,,
Ambrosine,Sidower,Prompackart Group,Underwriter,+1 (549)555-9623,,+1 (838)555-4928
Laurie,Van,Appexare Partners,Features Writer,+1 (641)555-3679,,+1 (813)555-3920
Kynaston,Foster,Elgg Research,Stock Broker,+1 (890)555-5320,,
Louise,Warrick,Tional Japan,Alliances Manager,+1 (354)555-6402,,+1 (250)555-4065
Cody,Higgens,Ultexacle Manufacturing,VP - Finance,+1 (408)555-5940,,+1 (315)555-7344
Leeann,Hallauer,Vellutionix Ventures,POD Incharge,+1 (210)555-4080,+1 (764)555-6382,+1 (231)555-9539
Judy,Dunkle,Ping Design,Treasury Marketing FOREX,+1 (539)555-8988,,+1 (930)555-1064
Chandler,Vorrasi,Systems Incorporated,Risk Manager,+1 (379)555-2429,,+1 (277)555-4261
Robbie,Eisenman,Prompackart Group,Work Flow Analyst,+1 (760)555-1248,,+1 (734)555-7391
Major,Hegarty,Ationliess Inc.,Pharmaceutical Research Scientist,+1 (535)555-4905,,+1 (503)555-8900
Media,Patton,Cyprosybay,Specialist - Medicine,+1 (804)555-2682,,+1 (354)555-4625
Sharise,Agnes,MAG Group,Industrial Engineering,+1 (644)555-5947,,+1 (920)555-6729
Norbert,James,INC Technology,Pharmaceutical Research Scientist,+1 (725)555-4160,,+1 (249)555-9562
Fitzroy,Omara,Sigmaxiliess Technology Partners,Liaison,+1 (505)555-3745,+1 (807)555-2645,+1 (658)555-9534
Oswald,Seelig,Appexare Partners,Trainer,+1 (705)555-7322,,+1 (297)555-8663
Edmund,Lombardi,MIC Japan,Technology Transfer Engineer,+1 (603)555-5953,,+1 (336)555-2598
Jeanie,Minnie,Appexare Partners,Events/ Promotions Manager,+1 (609)555-6176,,+1 (248)555-6620
Zilla,Kemble,Vellutionix Ventures,Accountant,+1 (510)555-9704,,
Madoline,Errett,VAR Ventures,System Engineer,+1 (879)555-5988,,+1 (708)555-6966
Newton,Ratcliff,Arch PLC,CRM - Technical Consultant,+1 (626)555-5602,,+1 (732)555-1036
Yazmin,Garneis,Inced,Corporate Banking Region Head,+1 (431)555-7735,,+1 (380)555-8414
Haidee,Blatenberger,Dems Systems Inc.,Accounts Assistant,+1 (857)555-5932,+1 (327)555-5685,
Janessa,Jyllian,Come Devices,GSM Engineer,+1 (555)555-5846,,+1 (359)555-5775
Willard,Romanoff,Cyprosybay,Research Assistant,+1 (234)555-2843,,+1 (365)555-1225
Dinah,Cressman,VAR Ventures,M & A Advisor,+1 (811)555-7010,,+1 (588)555-2681
Alwilda,Toke,Arch PLC,Financial Analyst,+1 (780)555-9926,,+1 (900)555-5341
Kendall,Ackerley,MIC Japan,Foreign Exchange Officer,+1 (217)555-2487,,+1 (750)555-8200
Harley,Guess,Sigmaxiliess Technology Partners,Receptionist,+1 (204)555-7819,,+1 (818)555-4224
Trinity,Keppel,Aspers USA,Nephrologist,+1 (221)555-7710,,+1 (936)555-6128
Jewel,Eiford,Ationliess Inc.,Private Banker,+1 (644)555-3923,+1 (554)555-8264,+1 (819)555-8452
Careen,Oppie,Micresk PLC,Tech Support,+1 (240)555-4777,,+1 (325)555-1136
Lavena,Northey,Apers USA,Painter,+1 (381)555-5987,+1 (945)555-1991,
Orville,Priebe,Systertiond Investments,Private Banker,+1 (606)555-6589,,+1 (428)555-8190
Seneca,Baker,Adrics Investments,Tech Support,+1 (395)555-5380,,+1 (449)555-5444
Stafford,Mitchell,Softwarch Europe,GM - Risks,+1 (921)555-3261,,+1 (411)555-2350
Glen,Briggs,Adrics Investments,Loyalty Program,+1 (756)555-6873,,
Silas,Holts,MIC Japan,CPA,+1 (581)555-2460,,+1 (608)555-1327
Cairo,Wise,Klas Investments,Country Network Coordinator,+1 (396)555-7882,,+1 (828)555-9979
Kimberlee,Bishop,Appexare Partners,Alliances Manager,+1 (487)555-4825,,+1 (592)555-5983
Denys,Kemerer,TED Group,Consultant,+1 (239)555-6360,,+1 (524)555-5319
Colten,Kuster,Unix,Training Manager,+1 (707)555-4259,,+1 (515)555-2152
Jill,Wardle,Elgg Research,POD Assistant,+1 (905)555-1346,,+1 (229)555-2579
Ken,Lowry,Micresk PLC,Hearing Aid Technician,+1 (674)555-1102,,+1 (646)555-1285
Frieda,Houston,Sems Capital,Pathologist,+1 (695)555-1963,,+1 (664)555-7440
Lucius,Gettemy,BOOBOO Development,Depository Participant,+1 (262)555-5853,,+1 (727)555-7695
Crispin,Miller,ING Investments,Network Planning - Chief Engineer,+1 (818)555-8081,,
Alannis,Wentzel,Sigmaxiliess Technology Partners,VP - Quality,+1 (372)555-6066,+1 (483)555-6937,+1 (508)555-9418
Nathan,Durstine,Dems Systems Inc.,Actuary,+1 (234)555-3378,,+1 (974)555-9845
Shari,David,Elliner Inc.,Attendant,+1 (612)555-3224,,+1 (982)555-6912
Hal,Mccune,Systed Group,Security Analyst,+1 (551)555-9980,,+1 (966)555-8285
Briar,Osterweis,Syste Technology,COO,+1 (332)555-6659,,+1 (646)555-6986
Annetta,Mcdonald,Systert Germany,Paint Shop,+1 (934)555-6643,,
Vinnie,Baxter,Unix,Business Center Manager,+1 (964)555-2188,,+1 (454)555-3997
Kylie,Hay,Dems Systems Inc.,Banquet Manager,+1 (285)555-6419,,+1 (207)555-1350
Earleen,Pickering,Appexare Partners,VP - Customer Service,+1 (984)555-7077,,+1 (383)555-2534
Phyllis,Day,Dems Systems Inc.,Software Test Engineer,+1 (814)555-1804,,+1 (989)555-1377
Weston,Beard,Ultexacle Manufacturing,VP - Production,+1 (338)555-5049,,+1 (818)555-6630
Wilson,Schmidt,Systert Germany,Trainer,+1 (380)555-6720,,+1 (733)555-1864
Gae,Eliza,Gatia,Private Banker,+1 (809)555-8378,,+1 (982)555-3896
Bekki,Butler,TED,Script Writer,+1 (525)555-3161,,+1 (423)555-8997
Colton,Altmann,Cyprosybay,IT/ Networking (EDP) - Manager,+1 (468)555-8588,+1 (296)555-5218,+1 (209)555-7267
Deandre,Elsas,Dems Systems Inc.,Orthopaedist,+1 (936)555-8457,,+1 (592)555-5197
Elliot,Iseman,Sigmaxiliess Technology Partners,Political Writer,+1 (571)555-9604,+1 (420)555-7511,+1 (609)555-5537
Ariadne,Tireman,TED,Software Engineer,+1 (510)555-2586,,+1 (216)555-2871
Shevaun,Eisaman,Elliner Inc.,Librarian,+1 (774)555-8771,,
Verity,Langston,Imagation Asia,CEO,+1 (760)555-2418,,+1 (693)555-3056
Elfreda,Hanseu,Elliner Inc.,Business Analyst,+1 (346)555-8572,,
Ariana,Ray,Inced,Trainer,+1 (526)555-1290,,
Ora,Ammons,Gatia,VP - Media Planning & Strategy,+1 (623)555-3051,,+1 (765)555-8919
Moriah,Weingarten,Coradiscon Design,Travel Agent,+1 (800)555-7432,,+1 (889)555-3520
Willie,Finck,Adrics Investments,Loyalty Program,+1 (602)555-5826,,+1 (499)555-9651
Charnette,Armstrong,Unix,Painter,+1 (872)555-1120,,+1 (846)555-8654
Jaylon,Carbaugh,Search Ventures,Front Office,+1 (262)555-6747,,+1 (610)555-9957
Erykah,Holtzer,Systertiond Investments,CRM - Technical Consultant,+1 (761)555-7409,,+1 (983)555-4802
Lexie,Byers,SUN Technology Partners,M & A Advisor,+1 (957)555-7019,,+1 (698)555-8157
Peyton,Gearhart,Ximpution Corporation,Legal Advisor,+1 (839)555-6293,,+1 (547)555-5550
Derby,Cowper,Syste Technology,Masseur,+1 (314)555-7518,,+1 (768)555-1057
Glenn,Wells,Ximpution Corporation,Instructional Designer,+1 (767)555-7211,,+1 (289)555-1817
Joby,Bard,Gatia,Banquet Sales,+1 (800)555-4653,,+1 (359)555-4188
Luana,Johns,Prompackart Group,Accounts Assistant,+1 (944)555-9018,,+1 (513)555-6561
Pru,Eisenhart,TED Group,Mines Engineer,+1 (471)555-2887,,+1 (371)555-2309
Carol,Campbell,Search Ventures,VP - Creative,+1 (860)555-5530,,
Karaugh,Bruxner,Nerations,Eng. Manager,+1 (216)555-4185,,+1 (787)555-5181
Imogen,Pawle,Apers USA,Pathologist,+1 (575)555-7520,,+1 (284)555-9117
Jeannine,Davis,Micresk PLC,Account Services Executive,+1 (550)555-1641,,+1 (305)555-4865
Ceara,Barr,Vellutionix Ventures,Pharmaceutical Research Scientist,+1 (488)555-6647,,+1 (655)555-7498
Justyn,Mcmullen,Prompackart Group,Optometrist,+1 (260)555-2177,,
Emelina,Children,Nerations,Software Test Engineer,+1 (543)555-1628,,
Rosalind,Metzer,Advarchnovel Incorporated,Physician,+1 (864)555-9189,,+1 (975)555-8673
Connor,Whitling,BOOBOO Development,Cashier,+1 (423)555-7501,,+1 (477)555-8796
Eireen,Lambert,INC Technology,Vendor Development Manager,+1 (665)555-5713,,+1 (717)555-5902
Eulalia,Mathews,Search Ventures,Director on Board,+1 (477)555-9263,,
Nena,Fea,Elliner Inc.,M & A Advisor,+1 (607)555-7290,,+1 (976)555-4525
Fredrick,Mcmichaels,Arch PLC,TV Anchor,+1 (600)555-3605,,+1 (939)555-9872
Columban,Rowley,Ultexacle Manufacturing,Operations - Manager,+1 (920)555-7289,,+1 (487)555-7932
Ogden,Pearson,Syste Technology,Teacher,+1 (216)555-3950,,+1 (365)555-6606
Modesty,Grant,Ationliess Inc.,Radiologist,+1 (455)555-3261,,+1 (708)555-8974
Johnathan,Baskett,Inced,Civil Engineer,+1 (339)555-8689,,+1 (863)555-5533
Beckah,Cherry,Aspers USA,Restaurant Manager,+1 (360)555-8371,,+1 (666)555-2459
Florinda,Bryant,JTS Group,Painter,+1 (587)555-2604,+1 (751)555-8211,+1 (533)555-2109
Kyleigh,Blunt,Gratialpinc,Fashion Designer,+1 (538)555-7162,,+1 (858)555-4256
Ronalda,Hatcher,Appexare Partners,Depository Participant,+1 (574)555-4070,,+1 (274)555-9396
Madelyn,Philips,Come Devices,CRM - Functional Consultant,+1 (594)555-6264,,
Josceline,Jelliman,Etwork Development,Visualiser,+1 (271)555-2298,,
Beth,Cason,Ximpution Corporation,Area Manager,+1 (212)555-9787,,+1 (722)555-5821
Jayna,Wilkins,Systems Incorporated,Logistics - Head/ Mgr,+1 (909)555-6311,,+1 (935)555-5065
Susan,Patterson,Ping Design,Admin - Head/ Manager,+1 (504)555-5885,,
Yasmine,Heyman,ING Investments,Research Assistant,+1 (828)555-3901,,
Sonnie,Young,Imagation Asia,Fashion Designer,+1 (813)555-4611,,+1 (498)555-7277
Dahlia,Hirleman,Inced,Alliances Manager,+1 (385)555-3901,,+1 (920)555-3292
Gladwyn,Guest,Appexare Partners,Taxation - Manager,+1 (758)555-1437,,+1 (667)555-2529
Colleen,Harrow,Syste Technology,Radiographer,+1 (920)555-7924,,+1 (717)555-5574
Lenox,Schreckengost,Prompackart Group,Instructional Designer,+1 (918)555-3062,,+1 (932)555-5084
Desmond,Dimeling,CVS Capital,Club Floor Manager,+1 (813)555-8732,,+1 (290)555-8128
Malina,Mckendrick,Klas Investments,Surgeon,+1 (864)555-4607,+1 (541)555-6137,
Lis,Wallace,Dems Systems Inc.,Liaison,+1 (718)555-2736,,+1 (754)555-9513
Geordie,Cowart,Systed Group,Painter,+1 (339)555-9644,,+1 (527)555-3011
Virgie,Wheeler,Coradiscon Design,Corporate Banking Region Head,+1 (266)555-5969,,+1 (472)555-4706
Emmaline,Owen,Xilintem Development,Communications - Head,+1 (842)555-9354,,+1 (843)555-7913
Jenna,Sachse,Elliner Inc.,Law Officer,+1 (959)555-9373,,+1 (892)555-5667
Astor,Meyers,Sems Capital,Area Manager,+1 (579)555-2534,,
Nigella,Todd,Incomp PLC,HR Executive,+1 (267)555-5289,+1 (960)555-7057,+1 (496)555-7208
Travis,Lafortune,Search Ventures,Communications - Head,+1 (688)555-2017,,+1 (896)555-4930
Alvina,Geyer,VAR Ventures,Taxation - Manager,+1 (490)555-7124,,+1 (358)555-7996
Aline,Siegrist,Nola Technology,Project Finance Advisor,+1 (948)555-5035,,+1 (882)555-6899
Vere,Barnes,Phoology Group,System Administrator,+1 (689)555-5423,,
Kristie,Whishaw,Advarchnovel Incorporated,Physiotherapist,+1 (343)555-8194,,+1 (383)555-6690
Irene,Burns,Etwork Development,Chemical Research Scientist,+1 (575)555-6001,,
Mamie,Hector,Vellutionix Ventures,Accounts Assistant,+1 (797)555-1848,,+1 (629)555-3364
Brian,Holdsworth,Gratialpinc,Hostess/ Host,+1 (925)555-8781,,+1 (481)555-4402
Stacee,Saltser,Klas Investments,Microbiologist,+1 (213)555-7399,,+1 (566)555-6117
Tori,Raub,Incomp PLC,Policy Administration,+1 (754)555-8865,,+1 (874)555-1058
Lawson,Winton,Klas Investments,Painter,+1 (280)555-2976,,+1 (581)555-4243
Dottie,Schrader,Gratialpinc,Hearing Aid Technician,+1 (378)555-3570,+1 (659)555-6972,+1 (294)555-7115
Celia,Reamer,Advarchnovel Incorporated,IT/ Networking (EDP) - Manager,+1 (553)555-6771,,
Minnie,Hiles,Nola Technology,Ratings Analyst,+1 (768)555-5501,,+1 (600)555-7929
Magdalene,Smail,Advarchnovel Incorporated,Paint Shop,+1 (981)555-5469,,+1 (877)555-3702
Normina,Ward,Prompackart Group,Bio-chemist,+1 (663)555-8283,,+1 (419)555-8034
Kenny,Evans,BOOBOO Development,IT/ Networking (EDP) - Manager,+1 (388)555-4378,,+1 (375)555-4498
Audie,Sanner,Come Devices,CFO,+1 (902)555-3056,,+1 (988)555-7265
Haywood,Fraser,Arch PLC,Web Master,+1 (353)555-3285,,+1 (638)555-3986
Valerie,Johnson,ING Investments,Chief Engineer,+1 (312)555-8151,,+1 (655)555-3864
Cleopatra,Bell,Prompackart Group,Stock Broker,+1 (748)555-9713,,
Tennyson,Jewell,Elgg Research,Audit,+1 (876)555-3212,,+1 (707)555-3594
Pansy,Hynes,Tional Japan,POD Assistant,+1 (418)555-3323,,+1 (443)555-5072
Alger,Fry,SUN Technology Partners,International Business Dev Mgr,+1 (668)555-2877,,
Tameka,Greenawalt,Intsco,Specialist - Medicine,+1 (437)555-5485,,
Elsie,West,Imagation Asia,Purchase - Head,+1 (917)555-8412,,+1 (255)555-1442
Randell,Tanner,BOO,Quality Assurance Executive,+1 (467)555-2790,,+1 (561)555-3283
Allegra,Queer,Mobellus Incorporated,Safety Officer,+1 (758)555-4752,,+1 (694)555-4945
Russel,Fisher,Sems Capital,Director on Board,+1 (397)555-6224,,
Violet,Style,Systert Germany,Customer Support Engineer,+1 (650)555-5344,,+1 (395)555-1987
Hillary,Mccullough,Cyprosybay,GSM Engineer,+1 (848)555-7443,,+1 (460)555-1327
Barclay,Braun,Xiliekerizon Capital,Project Finance Advisor,+1 (833)555-2222,,+1 (543)555-7491
Ralph,Pennington,MAG Group,Quality Assurance/ Control,+1 (968)555-7233,,+1 (646)555-8827
Noelene,Newbern,Ximpution Corporation,Chemical Research Scientist,+1 (479)555-9821,,+1 (271)555-8583
Jere,Wyatt,Syste Technology,Treasury Marketing FOREX,+1 (641)555-6032,,
Celestine,Pittman,Nerations,Masseur,+1 (648)555-4572,,+1 (518)555-1775
Allie,Patterson,Incomp PLC,Teacher,+1 (833)555-4212,,+1 (264)555-1935
Marnie,Sybilla,Sigmaxiliess Technology Partners,Admin - Executive,+1 (389)555-3867,+1 (755)555-9262,+1 (631)555-9080
Dayton,Losey,Arch PLC,Cameraman,+1 (561)555-1780,+1 (242)555-6423,+1 (555)555-3289
Christabel,Mcclymonds,Inced,Team Leader,+1 (469)555-6448,,+1 (960)555-3142
Marilynn,Hawker,Softwarch Europe,Analytical Chemistry Scientist,+1 (470)555-2838,,+1 (613)555-1559
Ozzy,Thigpen,Nola Technology,International Travel,+1 (320)555-8464,,+1 (937)555-8163
Temple,Erschoff,Softwarch Europe,Vendor Development Manager,+1 (870)555-8574,,+1 (276)555-7353
Monte,Barrett,Dems Systems Inc.,Internal Auditor,+1 (446)555-8643,,+1 (269)555-8347
Godric,Albright,BRO Research,Instructional Designer,+1 (217)555-4402,,+1 (548)555-3646
Berry,Echard,Come Devices,Ophthalmologist,+1 (298)555-3911,,+1 (295)555-9853
Thorburn,Armstrong,Syste Technology,VP - HR,+1 (852)555-5201,,
Delroy,Eva,Advarchnovel Incorporated,HR Executive,+1 (483)555-5355,,
Lydia,Rohtin,Micronacts USA,Front Office,+1 (794)555-1660,,+1 (557)555-8135
Jaylen,Conkle,CVS Capital,Training Manager,+1 (269)555-3715,,+1 (694)555-3058
Arlie,Haines,Sems Capital,Research Scientist,+1 (368)555-3245,,+1 (766)555-9809
Trudi,Isaman,Sigmaxiliess Technology Partners,Trainer,+1 (512)555-3853,,+1 (400)555-2174
Kassia,Adcock,Arch PLC,Account Services Executive,+1 (361)555-8170,,+1 (666)555-1867
Berenice,Surrency,Ping Design,Project Finance Advisor,+1 (515)555-1280,,+1 (406)555-2385
Liza,Adams,Apers USA,Law Officer,+1 (519)555-5327,,+1 (563)555-5220
Adelaide,Fowler,Arch PLC,Eng. Manager,+1 (821)555-4435,,+1 (605)555-5775
Melinda,Knapp,Gratialpinc,R & D - Head/ Manager,+1 (459)555-8420,,
Alma,Griffis,BOOBOO Development,Typist,+1 (669)555-3871,+1 (579)555-4082,+1 (701)555-1995
Lorn,Fischer,Adrics Investments,Alliances Manager,+1 (667)555-2724,,+1 (722)555-2492
Nick,Sauter,VAR Ventures,Inventory Control Manager/ Materials Manager,+1 (633)555-4804,,+1 (953)555-5780
Ollie,Mueller,Apers USA,CRM - Technical Consultant,+1 (481)555-2324,,+1 (252)555-8119
Clare,Hincken,Nerations,Accounts Head,+1 (414)555-9443,,
Ilean,Hawkins,Gratialpinc,Treasury Marketing Fixed Income,+1 (944)555-6762,,+1 (746)555-7827
Jo,Henley,Coradiscon Design,Optometrist,+1 (362)555-8318,,+1 (889)555-9766
Reid,Wegley,Inced,POD Incharge,+1 (402)555-6201,,+1 (875)555-8753
Gregg,Ludwig,Softwarch Europe,Investment Advisor,+1 (892)555-5631,,+1 (532)555-4933
Ludovic,Alington,Arch PLC,GM,+1 (262)555-1953,,+1 (883)555-7551
Clarence,Wynne,Cyprosybay,Banquet Manager,+1 (627)555-4490,,+1 (486)555-9849
Philipa,Kifer,Tional Japan,Perfusionist,+1 (643)555-8727,,+1 (769)555-3812
Alene,Mccrady,Elliner Inc.,Optometrist,+1 (853)555-3288,,+1 (746)555-7356
Barrie,Whirlow,Unix,Script Writer,+1 (841)555-1643,,+1 (831)555-9143
Rachael,Craig,Systed Group,Franchisee Coordinator,+1 (431)555-5567,,+1 (588)555-8357
Seward,Raybould,Sems Capital,Asset Operations,+1 (734)555-4063,,+1 (716)555-4003
Everard,Roby,Come Devices,Legal Advisor,+1 (664)555-7223,,+1 (514)555-4023
Millard,Gardner,Gratialpinc,Customer Service,+1 (522)555-6273,,+1 (588)555-6699
Vance,Hil,Ping Design,Shares Services Executive,+1 (312)555-3720,,+1 (295)555-7384
Pace,Linton,Systertiond Investments,Shift Supervisor,+1 (240)555-2363,,+1 (583)555-2667
Paget,Lauffer,Advarchnovel Incorporated,Banquet Sales,+1 (892)555-9181,,+1 (394)555-4606
Danny,Friedline,Search Ventures,Policy Administration,+1 (979)555-4340,,+1 (204)555-4663
Bridger,Stone,Coradiscon Design,Choreographer,+1 (760)555-7290,,
Avalon,Ward,JTS Group,Lab Staff,+1 (694)555-5121,,
Myriam,Townsend,Dems Systems Inc.,Business Editor,+1 (202)555-4085,,
Latanya,Breitenstein,Coradiscon Design,Mechanical Engineer,+1 (322)555-5472,+1 (704)555-2345,
Carissa,Ewing,Arch PLC,Accountant,+1 (507)555-1124,,+1 (326)555-2129
Montana,Morland,Mobellus Incorporated,VP - Finance,+1 (954)555-7804,,+1 (369)555-1083
Irving,Ashbaugh,Incomp PLC,Ground Staff,+1 (285)555-4596,,+1 (421)555-9723
Avery,Steiner,TED,Interior Designer,+1 (568)555-7527,,+1 (702)555-1720
Dominic,Fuchs,Intsco,Admin - Head/ Manager,+1 (275)555-1367,,+1 (332)555-1186
Lindsie,Atkinson,Etwork Development,Country Manager,+1 (813)555-6275,,
Shanene,Boyd,Nerations,Business Editor,+1 (489)555-7320,,+1 (974)555-7989
Cymone,Bastion,Tional Japan,Service Manager,+1 (366)555-5664,,+1 (306)555-2281
Spike,Mckee,Elgg Research,Risk Manager,+1 (332)555-5083,,
Crystal,Downing,Aspers USA,VP - Production,+1 (879)555-9062,,+1 (581)555-8093
Alan,Hice,Intsco,Bartender,+1 (900)555-9937,,+1 (260)555-7835
Tiffany,Warren,Dems Systems Inc.,CPA,+1 (627)555-4327,,+1 (713)555-8019
Royce,Rader,Etwork Development,Accountant,+1 (626)555-4203,,+1 (355)555-2529
Gayla,Mull,BRO Research,Attendant,+1 (252)555-4528,,+1 (343)555-3884
Trecia,Bash,Intsco,Aviation Engineer,+1 (448)555-4641,,+1 (330)555-6499
Karenza,Buck,Klas Investments,Purchase Officer,+1 (974)555-2465,,+1 (944)555-9472
Vergil,Sadley,MIC Japan,Legal Advisor,+1 (435)555-1927,,+1 (416)555-2126
Lissa,Harding,Ping Design,Foreman,+1 (609)555-3170,,+1 (644)555-5603
Laurena,Yeskey,Micronacts USA,Technology Transfer Engineer,+1 (923)555-2929,,+1 (852)555-8032
Martie,Mixey,Vellutionix Ventures,Spares Engineer,+1 (945)555-5833,,
Katelyn,Fiscina,Systelgg Research,Bartender,+1 (491)555-7981,,+1 (412)555-5074
Berniece,Alliman,BRO Research,Supply Chain - Head,+1 (825)555-8482,,+1 (618)555-6579
Ormond,Taggart,Etwork Development,External Consultant,+1 (591)555-1949,,+1 (347)555-3993
Yorick,Sommer,Ping Design,VP - Quality,+1 (310)555-5367,,+1 (494)555-9877
Maurine,Cowher,INC Technology,Regional Manager,+1 (802)555-8486,+1 (225)555-3560,+1 (869)555-1683
Billy,Baker,SUN Technology Partners,Treasury Manager,+1 (795)555-6440,,
Jacki,Jolce,TED Group,Admin - Executive,+1 (239)555-4640,,+1 (782)555-3897
Piper,Bowman,Gatia,Technology Transfer Engineer,+1 (837)555-7422,,+1 (753)555-1934
Gale,Lacon,BOOBOO Development,Lab Staff,+1 (939)555-8656,,+1 (275)555-4064
Dorothy,Caesar,Nola Technology,Company Secretary,+1 (395)555-1449,,+1 (984)555-7051
Janene,Bollinger,Vellutionix Ventures,Anaesthetist,+1 (261)555-6171,,
Bertha,Mcloskey,TED Group,Legal Advisor,+1 (745)555-7334,,+1 (898)555-9060
Nevada,Goodman,Softwarch Europe,Software Test Engineer,+1 (483)555-2629,,
Fenton,Whiteman,JTS Group,Reservation Manager,+1 (351)555-7276,+1 (546)555-7725,+1 (366)555-7664
Sibyl,Shallenberger,Cyprosybay,Account Services Executive,+1 (818)555-5004,,+1 (405)555-5275
Cindy,Fields,Ping Design,VP - Operations,+1 (342)555-7629,,+1 (699)555-4024
Solomon,Pycroft,Elliner Inc.,Web Master,+1 (608)555-5690,,
Melia,Taylor,Sems Capital,Advertising - Manager,+1 (686)555-2722,,+1 (900)555-7108
Manuel,Bickerson,Ultexacle Manufacturing,Distribution - Head,+1 (739)555-8972,,+1 (946)555-9629
Diane,Woodward,Systed Group,Librarian,+1 (917)555-9235,,
Kiley,Whittier,Syste Technology,Team Leader,+1 (464)555-8595,,
Buck,Moffat,Elgg Research,Psychiatrist,+1 (808)555-6724,,+1 (853)555-2657
Sharon,Biery,Systed Group,Quality Assurance/ Control,+1 (881)555-8668,+1 (631)555-7641,+1 (837)555-7143
Marjolaine,Holdeman,Intsco,Mines Engineer,+1 (333)555-5824,,+1 (622)555-4916
Shonda,Wile,Softwarch Europe,Technical Writer,+1 (421)555-1800,,+1 (811)555-5410
Will,Ream,Sems Capital,Logistics - Co-ordinator,+1 (891)555-1969,,+1 (849)555-5821
Storm,Straub,Systelgg Research,Shift Manager,+1 (265)555-2925,,
Garnet,Wood,TED Group,Product Manager,+1 (540)555-1583,,
Xzavier,Blois,Imagation Asia,Club Floor Manager,+1 (455)555-7300,,+1 (823)555-7739
Arabella,Greenwood,Softwarch Europe,Network Planning - Chief Engineer,+1 (389)555-5739,,+1 (701)555-7516
Valentine,Judge,Systed Group,Journalist,+1 (405)555-2930,,+1 (539)555-7382
Kimberley,Berry,Inced,Financial Controller,+1 (831)555-6928,,+1 (632)555-8605
Mabella,Ulery,Nerations,Technical Writer,+1 (631)555-6511,,+1 (486)555-7463
Ryan,Cribbs,TED Group,Orthopaedist,+1 (394)555-9527,,
Lysette,Pearsall,Adrics Investments,Investment Advisor,+1 (465)555-9381,,+1 (415)555-1861
Windsor,Robinson,Nola Technology,M & A Advisor,+1 (532)555-1821,,
Georgiana,Donkin,Appexare Partners,Quality Assurance - Manager,+1 (718)555-1890,,+1 (762)555-1428
Harding,Flickinger,Ping Design,Banquet Sales,+1 (805)555-4878,,+1 (499)555-4483
Eve,Akers,TED Group,Area Manager,+1 (863)555-3027,+1 (601)555-8279,+1 (676)555-1914
Gypsy,Wilkinson,Micronacts USA,Admin - Head/ Manager,+1 (353)555-9219,,+1 (689)555-5406
Rik,Feufer,TED,Country Network Coordinator,+1 (745)555-5663,,+1 (667)555-1075
Pia,Weldy,INC Technology,EDP Analyst,+1 (215)555-1306,,
Pearce,Hasely,Systems Incorporated,Logistics - Co-ordinator,+1 (306)555-1584,+1 (944)555-3863,+1 (236)555-1648
Jordon,Myers,Intsco,Despatch Incharge,+1 (978)555-5123,+1 (677)555-9529,+1 (831)555-6741
Lori,Crissman,Sems Capital,Anaesthetist,+1 (881)555-8750,,+1 (299)555-1624
Serena,Coates,Systexartion Corporation,Security Analyst,+1 (972)555-6726,,+1 (754)555-3361
Cecily,Nehling,Tional Japan,Admin - Executive,+1 (881)555-1892,,+1 (466)555-1692
Shawn,Bloise,Ximpution Corporation,CRM - Support Engineer,+1 (738)555-9033,,+1 (619)555-3740
Garey,Rowe,Klas Investments,Hardware Design Technical Leader,+1 (331)555-6161,+1 (429)555-6786,+1 (252)555-6589
Kit,Basinger,Ultexacle Manufacturing,Fitness Trainer,+1 (779)555-8215,,+1 (848)555-5093
Vickie,Elder,TED Group,TV Anchor,+1 (943)555-3010,+1 (900)555-5546,+1 (815)555-5852
Carter,Giesen,Dems Systems Inc.,Finance Assistant,+1 (866)555-7077,,+1 (397)555-6532
Stella,Coveney,Nola Technology,Training Manager,+1 (263)555-4276,,+1 (748)555-3210
Orval,Johnston,Syste Technology,Events/ Promotions Manager,+1 (227)555-8219,,
Shantae,Brindle,Aspers USA,Property Management,+1 (314)555-7343,,+1 (497)555-4129
Abby,Dimsdale,Etwork Development,Medical Representative,+1 (719)555-1286,,+1 (233)555-5069
Delma,Lear,Syste Technology,Franchisee Coordinator,+1 (472)555-1484,,
Greig,Bashline,Inced,Hearing Aid Technician,+1 (281)555-2925,,+1 (213)555-4823
Magnolia,Sayre,Tional Japan,Real Estate Assessor,+1 (285)555-2796,,+1 (870)555-8308
Ward,Anderson,Xilintem Development,Alliances Manager,+1 (469)555-7126,,+1 (233)555-1986
Nandy,Kooser,Come Devices,Accounts Head,+1 (556)555-4057,,+1 (355)555-3727
Marley,Lalty,Systexartion Corporation,Fashion Designer,+1 (608)555-3132,,+1 (723)555-5403
Deena,Werry,Coradiscon Design,Script Writer,+1 (744)555-7304,,+1 (605)555-5210
Rolf,Nash,Systert Germany,Team Leader,+1 (318)555-6785,,+1 (794)555-4533
Adriana,Schofield,Gatia,Credit Control & Collections,+1 (778)555-3482,,
Hopkin,Wilo,Systert Germany,Treasury Marketing FOREX,+1 (379)555-1863,,+1 (697)555-8277
Kristopher,Orbell,BOO,Transactions Processing Executive,+1 (656)555-8542,,+1 (497)555-1958
Donald,Moon,Search Ventures,VP - Operations,+1 (957)555-6744,,+1 (854)555-4106
Kayleah,Archibald,Systed Group,Advisory,+1 (633)555-5329,,
Toby,Baer,JTS Group,Trainer,+1 (843)555-6723,+1 (959)555-3663,+1 (808)555-5005
Isolde,Mench,Appexare Partners,Fresher,+1 (424)555-1910,,+1 (364)555-8728
Davina,Earhart,Unix,Commercial - Manager,+1 (593)555-2811,,+1 (632)555-3445
Charity,Newlove,Elgg Research,Business Center Manager,+1 (794)555-7017,+1 (328)555-6014,
Honor,Logue,Vellutionix Ventures,Mines Engineer,+1 (811)555-1846,,+1 (626)555-6962
Leanora,Bailey,TED Group,Switching - Chief Engineer,+1 (803)555-3339,,
Sequoia,Brown,ING Investments,Product Manager,+1 (310)555-6541,,+1 (943)555-8535
Doron,Basmanoff,BOOBOO Development,Fashion Designer,+1 (935)555-7171,+1 (934)555-8631,+1 (787)555-6815
Washington,Crawford,SUN Technology Partners,Masseur,+1 (785)555-3002,,+1 (899)555-9564
Sarra,Hamilton,Ultexacle Manufacturing,POD Incharge,+1 (367)555-6245,,+1 (731)555-7825
Davy,King,Ximpution Corporation,VP - Engineering,+1 (532)555-8981,,+1 (348)555-7588
Macie,Lucy,Gratialpinc,Clerks,+1 (723)555-8977,,+1 (621)555-7726
Dorothea,Gaskins,BOOBOO Development,Environmental Engineer,+1 (966)555-9838,,
Jeremiah,Wilkerson,Ximpution Corporation,Political Editor,+1 (598)555-2307,,+1 (576)555-9182
Edgar,Toulmin,Prompackart Group,Industrial Relations Manager,+1 (889)555-3715,,+1 (717)555-5455
Eryn,Prescott,JTS Group,Public Relations - Manager,+1 (713)555-1605,,+1 (573)555-2005
Dexter,Bennett,SUN Technology Partners,Hardware Design Technical Leader,+1 (504)555-1424,,
Audrea,Sholl,VAR Ventures,Finance Assistant,+1 (666)555-4651,,
Daffodil,Altman,Klas Investments,Visualiser,+1 (781)555-4702,,+1 (763)555-6940
Goldie,Beail,Sems Capital,GM - Treasury,+1 (323)555-7189,,
Ashlie,Drumm,Micronacts USA,Physiotherapist,+1 (307)555-3041,,+1 (690)555-2220
Quincey,Reichard,Coradiscon Design,Work Flow Analyst,+1 (257)555-2452,,+1 (648)555-7830
Ryana,Owens,Search Ventures,Business Center Manager,+1 (744)555-3029,,+1 (859)555-2990
Janel,Sulyard,Aspers USA,CEO,+1 (665)555-8700,,+1 (722)555-6033
Fawn,Green,Nola Technology,Shift Supervisor,+1 (821)555-1358,,+1 (339)555-3401
Tara,Bratton,JTS Group,Direct Marketing - Manager,+1 (538)555-7358,+1 (986)555-5189,+1 (273)555-2389
Brad,Wheeler,Intsco,Orthopaedist,+1 (354)555-5133,,
Reba,Larson,Systert Germany,House Keeping,+1 (793)555-4420,,+1 (942)555-4127
Vicky,Bicknell,Gatia,Ratings Analyst,+1 (506)555-2929,,+1 (580)555-5803
Jolyon,Gibson,TED,Treasury Marketing FOREX,+1 (390)555-7484,+1 (757)555-2078,
Neal,Gongaware,Elliner Inc.,Research Scientist,+1 (672)555-1494,,+1 (950)555-8019
Esta,Read,Phoology Group,Purchase Manager,+1 (327)555-8983,,+1 (386)555-3875
Salome,Porter,Phoology Group,Pharmaceutical Research Scientist,+1 (622)555-9610,,+1 (587)555-9956
Tyler,Ironmonger,BOOBOO Development,Real Estate Assessor,+1 (765)555-8467,,
Karlene,Yates,Phoology Group,F&B Manager,+1 (658)555-4813,,+1 (865)555-3717
Justice,Tedrow,Systexartion Corporation,Product Manager,+1 (203)555-7518,,+1 (850)555-8124
Carola,Mcfall,MAG Group,POD Incharge,+1 (527)555-9723,,+1 (977)555-1861
Anthony,Widaman,Nerations,Treasury Marketing Fixed Income,+1 (853)555-3780,,+1 (314)555-6091
Wenonah,Countryman,Systexartion Corporation,Radiologist,+1 (981)555-9204,,
Mordikai,Laborde,Gatia,Banquet Sales,+1 (596)555-2948,,+1 (463)555-6590
Hale,Bauerle,Ationliess Inc.,Script Writer,+1 (413)555-3370,,
Keely,Herrold,Elliner Inc.,Radiographer,+1 (966)555-5093,,+1 (803)555-4325
Kimball,Maclagan,Tional Japan,Treasury Marketing Fixed Income,+1 (938)555-6583,,
Grenville,Tripp,Klas Investments,Chief Engineer,+1 (797)555-7708,,+1 (959)555-1112
Johnnie,Osterwise,BRO Research,External Consultant,+1 (700)555-2491,,
Ty,Stroh,Xiliekerizon Capital,Shift Supervisor,+1 (815)555-3616,,+1 (789)555-2351
Honour,Chappel,Ping Design,Maintenance Technician,+1 (610)555-6461,,+1 (380)555-1453
Sefton,Allshouse,Cyprosybay,Risk Manager,+1 (352)555-2218,,+1 (510)555-5197
Ada,Barth,Xiliekerizon Capital,Quality Assurance - Manager,+1 (801)555-1481,,
Maggie,Goldvogel,Sigmaxiliess Technology Partners,Features Editor,+1 (690)555-7617,,+1 (583)555-4055
Dakota,Frankenberger,Nola Technology,Advertising - Manager,+1 (870)555-8289,,+1 (409)555-8783
Mel,Arthur,CVS Capital,POD Assistant,+1 (693)555-5582,,+1 (924)555-2551
Lynne,Knisely,Nerations,Foreign Exchange Officer,+1 (895)555-4199,,+1 (341)555-4119
Matty,Eggbert,Tional Japan,Shift Supervisor,+1 (265)555-6870,+1 (647)555-9925,+1 (672)555-8565
Rachyl,Kellogg,Gratialpinc,Design Manager/ Engineer,+1 (285)555-3734,,+1 (949)555-7512
Joscelin,Hoffhants,BOOBOO Development,Ratings Analyst,+1 (873)555-8645,+1 (553)555-2671,+1 (834)555-6179
Leroy,Bagley,Ping Design,VP - Customer Service,+1 (928)555-6348,,+1 (395)555-7456
Walton,Weinstein,Systert Germany,Despatch Incharge,+1 (947)555-2507,,
Edwyna,Swink,JTS Group,Communications - Head,+1 (429)555-5517,,+1 (378)555-5888
Miranda,Hastings,Sigmaxiliess Technology Partners,Basic Research Scientist,+1 (510)555-8786,,+1 (710)555-3946
Ernesta,Keilbach,Dems Systems Inc.,Copy Writer,+1 (443)555-1684,,+1 (264)555-1205
Breann,Kline,TED,Policy Administration,+1 (407)555-7753,,+1 (781)555-2983
Dana,Erskine,Klas Investments,Admin - Head/ Manager,+1 (770)555-2225,,
Margo,Leslie,Adrics Investments,Depository Participant,+1 (221)555-1648,,+1 (714)555-7652
Audley,Fiddler,Prompackart Group,Software Test Engineer,+1 (927)555-2668,,+1 (415)555-9646
Zillah,Kiefer,Micresk PLC,Bartender,+1 (683)555-9835,,+1 (454)555-6060
Sheri,Harden,MIC Japan,Teacher,+1 (664)555-4348,+1 (871)555-3878,+1 (262)555-4108
Ernest,Strickland,Systed Group,Company Secretary,+1 (907)555-4473,+1 (811)555-2713,
Stewart,Faust,Sigmaxiliess Technology Partners,Banquet Manager,+1 (618)555-3076,,+1 (442)555-6785
Lisa,Stewart,Inced,Chemical Research Scientist,+1 (257)555-5975,,+1 (517)555-3544
Amedeus,Hahn,Systems Incorporated,Guest Relations Executive,+1 (305)555-4723,,+1 (799)555-8052
Jadyn,Draudy,Cyprosybay,Political Editor,+1 (334)555-3626,,+1 (298)555-4484
Spring,Hall,Xiliekerizon Capital,Policy Administration,+1 (688)555-5161,+1 (930)555-1946,+1 (246)555-2595
Nessa,Henry,Systertiond Investments,Restaurant Manager,+1 (910)555-1775,,
Summer,Marshall,Systelgg Research,Commercial - Manager,+1 (521)555-5671,,+1 (439)555-7847
Shantel,Wolff,Phoology Group,Law Officer,+1 (242)555-3243,,+1 (703)555-3365
Cymbeline,Harshman,Phoology Group,Distribution - Head,+1 (773)555-7564,,
Khloe,Fitzgerald,Elliner Inc.,Design Manager/ Engineer,+1 (207)555-5927,+1 (916)555-6703,+1 (910)555-1942
Rodney,White,Etwork Development,Features Writer,+1 (693)555-6142,,
Dawn,Beach,CVS Capital,External Consultant,+1 (515)555-4463,,+1 (643)555-2613
Whitney,Shaner,Search Ventures,Hardware Design Engineer,+1 (543)555-2967,,+1 (239)555-9820
Fay,Beck,Ationliess Inc.,Attendant,+1 (617)555-8537,+1 (328)555-8754,
Tatton,Shaffer,Coradiscon Design,Asset Operations,+1 (335)555-9008,,+1 (845)555-9617
Maryanne,Bowchiew,Ximpution Corporation,Customer Support Engineer,+1 (471)555-5312,,
Kassandra,Quinn,INC Technology,CFO,+1 (430)555-1827,,+1 (756)555-2859
Andrina,Mens,Incomp PLC,Mutual Fund Analyst,+1 (408)555-9253,,+1 (262)555-3268
Gyles,Potter,Systems Incorporated,Freelancer,+1 (442)555-3336,,
Ishmael,Faast,VAR Ventures,Area Manager,+1 (902)555-8545,,+1 (451)555-7398
Egbert,Reed,BOO,VP - Marketing,+1 (713)555-4830,,
Absalom,Gist,Ationliess Inc.,Secretary,+1 (212)555-3020,,+1 (312)555-7438
Tacey,Flick,Appexare Partners,Technician,+1 (964)555-6343,,+1 (874)555-8186
Claudia,Tavoularis,Gatia,Retail Store Manager,+1 (870)555-1841,,+1 (457)555-9201
Marquise,Dunlap,Phoology Group,Journalist,+1 (900)555-5276,,
Lester,Ehret,Sems Capital,Radiographer,+1 (774)555-3675,+1 (242)555-6173,+1 (806)555-1709
Bethany,Close,BRO Research,Receptionist,+1 (731)555-8827,,+1 (728)555-2917
Bevis,Ruhl,Sems Capital,Masseur,+1 (442)555-8875,,+1 (821)555-5109
Lincoln,Carr,Systems Incorporated,Program Manager,+1 (936)555-9767,,+1 (748)555-4199
Hazel,Smith,Appexare Partners,Physician,+1 (522)555-1781,,+1 (331)555-1254
Jackalyn,Woolery,VAR Ventures,System Integrator,+1 (909)555-9266,,+1 (304)555-6808
Eula,Beals,Systems Incorporated,International Business Dev Mgr,+1 (611)555-7434,,+1 (336)555-2431
Otis,Thomas,Syste Technology,Business Writer,+1 (306)555-6479,,
Maxwell,Mortland,Sigmaxiliess Technology Partners,System Administrator,+1 (567)555-4347,+1 (348)555-5924,+1 (370)555-5115
Marsha,Sell,BOOBOO Development,Cashier,+1 (497)555-3566,,+1 (935)555-7869
Tamra,Gleper,Ximpution Corporation,Investment Advisor,+1 (578)555-1132,,+1 (338)555-7645
Weldon,Ramsey,Micronacts USA,Features Writer,+1 (474)555-1644,,+1 (912)555-6380
Aileen,Howe,Systertiond Investments,Surgeon,+1 (820)555-3076,+1 (201)555-7191,
Janie,Parkinson,Ultexacle Manufacturing,AV Executive,+1 (286)555-8139,,+1 (640)555-5648
Brooks,Graham,Search Ventures,Advisory,+1 (620)555-3230,,+1 (979)555-4941
Emilee,Hair,Arch PLC,Foreign Exchange Officer,+1 (603)555-2312,,+1 (787)555-3955
Isbel,Faqua,Inced,Medical Representative,+1 (642)555-2192,,+1 (954)555-6781
Lauraine,Warner,BRO Research,AV Executive,+1 (544)555-8937,,
Keefe,Hatfield,Incomp PLC,Operations - Manager,+1 (222)555-9367,,+1 (701)555-8434
Walter,Knopsnider,BOO,POD Assistant,+1 (326)555-6930,,
Amaryllis,Finlay,SUN Technology Partners,Merchandiser,+1 (305)555-3709,,+1 (543)555-6341
Cicely,Ling,Ximpution Corporation,Hardware Design Engineer,+1 (387)555-3248,,+1 (305)555-5996
Bryce,Pritchard,INC Technology,Medical Representative,+1 (317)555-7216,,
Phillis,Watson,JTS Group,Business Center Manager,+1 (842)555-5964,,
Tyrese,Rosenstiehl,Gatia,Merchandiser,+1 (814)555-3529,,
Candy,Shea,Systert Germany,Chemical Research Scientist,+1 (675)555-1140,,+1 (520)555-9680
Daisy,Duncan,Vellutionix Ventures,Eng. Manager,+1 (702)555-9303,,+1 (558)555-6039
Marshall,Saylor,Come Devices,TV Anchor,+1 (632)555-4534,,+1 (946)555-7744
Jasmine,Wood,Mobellus Incorporated,Clerks,+1 (424)555-1996,,+1 (217)555-1162
Rayner,Putnam,Search Ventures,Pharmaceutical Research Scientist,+1 (227)555-2957,,+1 (344)555-9589
Ulysses,Driggers,Nola Technology,Supply Chain - Head,+1 (893)555-7376,,+1 (412)555-1972
Brent,Gadow,Softwarch Europe,Supply Chain - Head,+1 (596)555-3258,,+1 (201)555-5588
Shawna,Dickinson,Unix,CRM - Support Engineer,+1 (690)555-1324,,+1 (243)555-2139
Farran,Catleay,Coradiscon Design,Product Manager,+1 (472)555-4846,,+1 (502)555-8398
Candida,Coldsmith,Mobellus Incorporated,Drug Regulatory Doctor,+1 (619)555-5154,,+1 (650)555-8488
Shevon,Murray,Unix,Banquet Manager,+1 (266)555-8120,,+1 (438)555-2042
Trev,Pyle,Cyprosybay,Underwriter,+1 (320)555-1045,,+1 (304)555-8438
Grady,Rice,Nola Technology,Legal - Head,+1 (401)555-8379,,+1 (707)555-4113
Lorie,Hayhurst,TED Group,Compliance & Control,+1 (838)555-5353,+1 (498)555-3841,+1 (554)555-4588
Ileen,Poehl,Cyprosybay,VP - Engineering,+1 (581)555-7105,,
Tasha,Haynes,Nerations,Derivatives Analyst,+1 (875)555-2463,,
Suzie,Cox,Come Devices,Real Estate Assessor,+1 (565)555-3187,,+1 (894)555-2734
Netta,Hardy,TED,Security Analyst,+1 (489)555-6557,,+1 (985)555-6157
Norman,Best,BOOBOO Development,International Travel,+1 (967)555-3704,,+1 (973)555-5369
Magdalen,Thorley,BRO Research,O&M Engineer,+1 (766)555-2422,,+1 (314)555-7575
Davis,Houser,TED Group,Paint Shop,+1 (969)555-4920,,
Rube,Pratt,Intsco,Trading Advisor,+1 (695)555-9942,,
Roland,Sutton,CVS Capital,Logistics - Head/ Mgr,+1 (561)555-3280,+1 (539)555-5984,+1 (897)555-5794
Jerold,Greene,Phoology Group,Communications - Head,+1 (289)555-5894,,
Tiphanie,Willey,Systertiond Investments,Librarian,+1 (661)555-6242,,+1 (215)555-2492
Flick,Mcintosh,JTS Group,POD Assistant,+1 (237)555-1325,,+1 (926)555-9733
Joachim,Parrish,Gratialpinc,Group Head - Creative,+1 (377)555-9759,,+1 (449)555-7185
Robin,Pfeifer,BRO Research,Chief Engineer,+1 (889)555-4797,,+1 (417)555-4454
Nan,Prevatt,Aspers USA,Technical - Manager,+1 (963)555-8208,,
Woodrow,Stange,Syste Technology,Switching - Engineer,+1 (698)555-1118,,+1 (641)555-8036
Tarquin,Veith,Softwarch Europe,Optometrist,+1 (325)555-5185,,
Indigo,Pinney,Softwarch Europe,Traffic Clerk,+1 (713)555-5976,,+1 (970)555-7409
Jermaine,Kistler,Systed Group,Director on Board,+1 (276)555-5018,,+1 (396)555-5721
Shelly,Agg,Gratialpinc,Customer Support Engineer,+1 (477)555-7099,,+1 (949)555-8065
Zack,Sanborn,Come Devices,Corporate Banking Region Head,+1 (501)555-2374,,
Sammy,Elinor,Ultexacle Manufacturing,Shipping Supervisor,+1 (858)555-7892,,
Jerrold,Toyley,Nola Technology,Information Systems (MIS) - Manager,+1 (651)555-1268,,+1 (576)555-8055
Lilly,Mayers,Micresk PLC,Radiologist,+1 (444)555-7990,+1 (721)555-5089,+1 (888)555-4627
Mercy,Flanders,Sigmaxiliess Technology Partners,Technical Support Executive,+1 (668)555-3977,,+1 (422)555-2213
Jaqueline,Cross,BOO,Cashier,+1 (911)555-6363,+1 (350)555-1191,+1 (374)555-7270
Denton,Summy,Gatia,Purchase - Head,+1 (580)555-9475,,+1 (767)555-4218
Alton,Milne,MAG Group,Compliance & Control,+1 (613)555-3881,,+1 (348)555-2520
Courtney,Aft,TED,Customer Care Executive,+1 (529)555-1755,,+1 (356)555-3170
Francine,Moore,Dems Systems Inc.,Company Secretary,+1 (541)555-2614,,+1 (892)555-9333
Monty,Joyce,Mobellus Incorporated,Front Office Manager,+1 (885)555-7899,,+1 (299)555-6347
Homer,Fillmore,Micronacts USA,POD Assistant,+1 (922)555-4016,,+1 (598)555-9313
Wallace,Laurenzi,BRO Research,Underwriter,+1 (206)555-6823,,+1 (901)555-6769
Gussie,Mccallum,Cyprosybay,Finance Manager,+1 (848)555-1801,+1 (750)555-1135,+1 (242)555-8945
Cadence,Prechtl,SUN Technology Partners,Creative Director,+1 (571)555-2868,,+1 (875)555-7367
Shawnda,Boyer,Systexartion Corporation,VP - Marketing,+1 (838)555-1606,,+1 (980)555-9152
Shantelle,Wall,Micronacts USA,Law Officer,+1 (288)555-6851,,+1 (965)555-9392
Ariane,Blaine,Systert Germany,CFO,+1 (697)555-6307,,+1 (573)555-4051
Stuart,Cady,Prompackart Group,CFO,+1 (632)555-7068,,+1 (502)555-7597
Leopold,White,Cyprosybay,Corporate Banking Region Head,+1 (832)555-3465,,+1 (342)555-1603
Jefferson,Hoopengarner,Coradiscon Design,External Auditor,+1 (766)555-4345,,+1 (441)555-4156
Sheard,Neely,Intsco,VP - Creative,+1 (943)555-8934,,+1 (375)555-5466
Austyn,Oneal,Elgg Research,Script Writer,+1 (335)555-5718,,+1 (404)555-5898
Loreen,Barnes,Systed Group,Attendant,+1 (846)555-1427,,
Augusta,Stafford,Ultexacle Manufacturing,Cameraman,+1 (428)555-8486,,+1 (610)555-8036
Lucia,Baumgartner,JTS Group,Choreographer,+1 (765)555-4201,,+1 (807)555-3217
Monroe,Courtney,Phoology Group,Chartered Accountant,+1 (211)555-9974,,+1 (634)555-9142
Josslyn,Painter,Micresk PLC,External Consultant,+1 (960)555-5904,,
Nanette,Young,Ping Design,IT/ Networking (EDP) - Manager,+1 (922)555-8483,,+1 (907)555-8238
Alana,Elless,Advarchnovel Incorporated,Finance Head,+1 (949)555-9001,,
Benedict,Shotts,Inced,Internal Auditor,+1 (375)555-1413,,+1 (234)555-2856
Joel,Demuth,Xiliekerizon Capital,Ophthalmologist,+1 (288)555-2290,,+1 (744)555-3012
Aleesha,Reiss,Prompackart Group,Derivatives Analyst,+1 (735)555-8171,,
Narelle,Pershing,Etwork Development,VP - Commercial,+1 (806)555-4268,,+1 (399)555-9434
Ranulph,Burney,Systertiond Investments,Law Officer,+1 (495)555-9198,,
Karolyn,Baldwin,BOO,Network Planning - Chief Engineer,+1 (309)555-6058,,+1 (757)555-1335
Alec,Dale,CVS Capital,Hardware Design Technical Leader,+1 (406)555-2842,,
Fox,Millard,Arch PLC,Psychologist,+1 (912)555-2715,,+1 (637)555-9252
Colene,Sandys,Incomp PLC,Spares Engineer,+1 (874)555-1682,,+1 (979)555-8154
Elijah,Unk,Dems Systems Inc.,Chemical Engineer,+1 (481)555-3671,,+1 (631)555-4598
Logan,Branson,Ping Design,Technical Writer,+1 (827)555-8258,,+1 (788)555-1673
Kourtney,Newton,Ultexacle Manufacturing,POD Assistant,+1 (410)555-7781,,
Priscilla,Woollard,Adrics Investments,Purchase Manager,+1 (694)555-5721,,
Roderick,Walker,Micronacts USA,Safety Officer,+1 (751)555-9194,,+1 (364)555-6319
Drogo,Diegel,Systexartion Corporation,Restaurant Manager,+1 (982)555-1964,,+1 (921)555-7254
Eustace,Jones,Gatia,Political Writer,+1 (808)555-3789,,+1 (251)555-6594
Cherise,Roberts,Elliner Inc.,Real Estate Broker,+1 (456)555-5318,,+1 (502)555-1091
Philis,Zaun,Elliner Inc.,Basic Research Scientist,+1 (927)555-7860,,+1 (479)555-7254
Skyler,Camp,Prompackart Group,Freelancer,+1 (833)555-5527,,+1 (357)555-3990
Elsa,Felbrigge,Cyprosybay,VP - HR,+1 (707)555-7120,,+1 (439)555-8718
Clem,Schuck,MAG Group,Pharmacist,+1 (467)555-7281,,+1 (759)555-6325
Cade,Willcox,TED,Phone Banking,+1 (480)555-9402,,+1 (696)555-6744
Cullen,Kelley,Tional Japan,Interior Designer,+1 (312)555-2627,,+1 (605)555-5692
Justine,Zadovsky,BRO Research,Clerks,+1 (359)555-3791,,+1 (333)555-3701
Zeph,Dugger,ING Investments,Maintenance Engineer,+1 (988)555-8691,,+1 (553)555-1226
Linden,Blessig,Mobellus Incorporated,Software Engineer,+1 (957)555-1828,,+1 (777)555-6038
Louis,Cox,Xilintem Development,Technician,+1 (785)555-2483,,+1 (742)555-5662
Tilda,Magor,JTS Group,Trainer,+1 (854)555-3427,,
Jervis,Callison,Systert Germany,Materials - Head/ GM,+1 (596)555-6112,,+1 (417)555-8383
Keaton,Joghs,Micronacts USA,Painter,+1 (690)555-7389,,+1 (435)555-4886
Mordecai,Garland,Systertiond Investments,GM - Finance,+1 (440)555-4864,,+1 (740)555-2498
Kaylynn,Overstreet,Xilintem Development,Business Analyst,+1 (243)555-8748,,+1 (877)555-9386
Cayley,Blackburn,Sigmaxiliess Technology Partners,Front Office Manager,+1 (595)555-4047,,+1 (326)555-8515
Denice,Rhinehart,Incomp PLC,Security Officer,+1 (630)555-1765,+1 (865)555-5652,+1 (325)555-8384
Edwena,Kight,Xilintem Development,Physiotherapist,+1 (465)555-7388,,+1 (833)555-8727
Darden,Geddinge,Inced,Collections,+1 (440)555-1769,,+1 (550)555-6359
Krystle,Endsley,Unix,Medical Officer,+1 (492)555-7895,,+1 (631)555-9164
Kimberleigh,Leech,Ationliess Inc.,IT/ Networking (EDP) - Manager,+1 (792)555-4198,,
Waldo,Wiggins,Advarchnovel Incorporated,Basic Research Scientist,+1 (630)555-5598,,+1 (894)555-6312
Poppy,Rahl,Gatia,Cash Management Operations,+1 (795)555-5601,,
Seymour,Agg,Apers USA,Physician,+1 (552)555-4482,,
Nicolina,Jowers,Dems Systems Inc.,Medical Officer,+1 (649)555-7291,,+1 (322)555-2637
Macy,Kepplinger,Micronacts USA,Customer Care Executive,+1 (271)555-9440,,+1 (555)555-1649
James,Butterfill,Syste Technology,Fitness Trainer,+1 (723)555-2704,,+1 (753)555-6647
Edie,Lane,Coradiscon Design,Legal Advisor,+1 (409)555-7401,,+1 (616)555-1183
Kimberly,Laurence,Sigmaxiliess Technology Partners,Business Center Manager,+1 (768)555-4469,,
Charla,Wynter,Systert Germany,EDP Analyst,+1 (262)555-6906,,+1 (429)555-6844
Tessa,Swartzbaugh,MAG Group,Entrepreneur,+1 (971)555-1870,,+1 (605)555-2455
Gerry,Little,Gratialpinc,Security Officer,+1 (707)555-3724,,+1 (776)555-1150
Wendy,Munson,Klas Investments,Property Management,+1 (288)555-3244,,+1 (297)555-6722
Marlee,Warner,Prompackart Group,Credit Control & Collections,+1 (431)555-1680,,+1 (773)555-9976
Isidore,Thompson,Elliner Inc.,Purchase Manager,+1 (275)555-3829,,+1 (576)555-2369
Jonie,Hozier,Incomp PLC,CEO,+1 (559)555-8894,,+1 (906)555-2419
Charis,Cram,Prompackart Group,Account Services Executive,+1 (522)555-9423,,+1 (652)555-5427
Munroe,Jesse,Micresk PLC,Technical Support Engineer,+1 (648)555-3638,,+1 (430)555-3690
Thomas,Bryan,Come Devices,Guest Relations Executive,+1 (684)555-1967,+1 (271)555-3337,+1 (365)555-7432
Horatio,Catherina,Coradiscon Design,System Engineer,+1 (910)555-2346,+1 (806)555-2391,+1 (755)555-7945
Sherie,Drabble,BOOBOO Development,Environmental Engineer,+1 (409)555-6943,,
Iolanthe,Wylie,Sigmaxiliess Technology Partners,Office Assistant,+1 (298)555-3196,,+1 (697)555-5471
Viviette,Fye,Inced,Personal Assistant to CEO,+1 (663)555-5369,+1 (827)555-2801,+1 (698)555-1898
Lessie,Henderson,JTS Group,Pharmaceutical Research Scientist,+1 (885)555-6032,,+1 (461)555-9589
Harry,Hobbs,Ationliess Inc.,Ophthalmologist,+1 (686)555-9856,,+1 (649)555-5945
Dot,Conrad,TED,Investment Advisor,+1 (727)555-4968,+1 (905)555-1553,+1 (499)555-1546
Mellony,Millhouse,CVS Capital,O&M Engineer,+1 (449)555-9638,,+1 (661)555-5912
Sheena,Kimple,Sems Capital,Paint Shop,+1 (292)555-6489,,
Clancy,Shupe,Gatia,Concierge,+1 (946)555-6670,,+1 (342)555-6017
Eudora,Nicola,Sigmaxiliess Technology Partners,Teacher,+1 (988)555-9234,,+1 (556)555-2075
Phillida,Murray,ING Investments,Service Manager,+1 (752)555-4925,,+1 (324)555-3911
Joyce,Hoenshell,BOOBOO Development,Internal Auditor,+1 (935)555-1353,,+1 (201)555-3246
Maryvonne,Busk,Adrics Investments,VP - Media Planning & Strategy,+1 (895)555-4739,,+1 (968)555-4832
Aleta,Earl,VAR Ventures,VP - Quality,+1 (469)555-6823,,+1 (805)555-2368
Gore,Jardine,Systert Germany,Lab Technician,+1 (665)555-3799,,+1 (701)555-7889
Tylor,Shick,Advarchnovel Incorporated,Network Planning - Engineer,+1 (835)555-3025,,
Carrie,Snyder,Systelgg Research,Real Estate Assessor,+1 (793)555-4189,,+1 (527)555-2060
Marvyn,Glover,MIC Japan,Finance Manager,+1 (271)555-9798,+1 (296)555-7918,+1 (416)555-4058
Seraphina,Atweeke,Etwork Development,Technical Support Engineer,+1 (714)555-1370,,+1 (837)555-8066
Neville,Stough,Elliner Inc.,Painter,+1 (209)555-9193,,+1 (705)555-2510
Kendal,Huston,Ationliess Inc.,Shares Services Executive,+1 (499)555-3275,+1 (213)555-6155,
Christianne,Rhodes,Come Devices,Microbiologist,+1 (289)555-7857,,+1 (281)555-5253
Kenith,Bennett,Softwarch Europe,Restaurant Manager,+1 (606)555-8662,,+1 (703)555-9005
Waylon,Clewett,BOOBOO Development,POD Assistant,+1 (832)555-4134,,+1 (608)555-9736
Jeanette,Johann,Inced,Transactions Processing Executive,+1 (377)555-2144,+1 (829)555-2071,
Charlton,Mercer,Mobellus Incorporated,Derivatives Analyst,+1 (726)555-6492,,+1 (266)555-8765
Bonita,Giesler,Klas Investments,Optometrist,+1 (764)555-6027,+1 (477)555-5032,
Haydee,Kettlewell,Come Devices,Direct Marketing - Manager,+1 (356)555-2160,,+1 (279)555-9211
Karrie,Ryals,Unix,Financial Analyst,+1 (232)555-5664,,+1 (534)555-5104
Stan,Hardie,Incomp PLC,Product Manager,+1 (253)555-1062,,+1 (887)555-4382
Sandford,Adams,Systed Group,Office Assistant,+1 (938)555-6963,+1 (502)555-5600,
Brandi,Costello,Intsco,Quality Assurance - Manager,+1 (249)555-3864,,+1 (383)555-1258
Agnes,Werner,Search Ventures,Entrepreneur,+1 (632)555-6429,,
Walker,Buttermore,Tional Japan,Surgeon,+1 (246)555-2130,,
Bart,Law,Sems Capital,Purchase - Head,+1 (428)555-1184,,+1 (740)555-2930
Donnie,Shaw,Unix,Country Network Coordinator,+1 (316)555-3121,+1 (364)555-5986,+1 (491)555-8062
Ralphie,Dull,Elgg Research,Team Leader,+1 (244)555-9092,,+1 (886)555-5629
Fortune,Zalack,BRO Research,Vendor Development Manager,+1 (706)555-2163,,
Meriel,Brandenburg,Phoology Group,CPA,+1 (939)555-1945,,+1 (453)555-9588
Maurice,Howard,TED,Laundry Manager,+1 (350)555-7439,,+1 (231)555-1375
Delores,Handyside,Klas Investments,Hardware Design Engineer,+1 (905)555-6254,,+1 (254)555-2427
Blossom,Christopher,Elliner Inc.,Graphic Designer,+1 (267)555-5526,,
Trafford,Sandford,Xiliekerizon Capital,Financial Controller,+1 (239)555-4179,,+1 (967)555-7750
Jenny,Buehler,Elgg Research,Shares Services Executive,+1 (371)555-5877,,
Denzil,Filby,Nola Technology,Microbiologist,+1 (935)555-8333,+1 (851)555-4587,+1 (337)555-5198
Cornell,Bullard,Cyprosybay,Alliances Manager,+1 (861)555-5168,,+1 (505)555-9613
Cheyenne,Simpson,INC Technology,Internal Auditor,+1 (445)555-1842,,+1 (866)555-2650
Wilfred,Tilton,SUN Technology Partners,Audit,+1 (773)555-6107,+1 (210)555-1960,
Angelina,Gibson,Phoology Group,Alliances Manager,+1 (757)555-3023,,
Kory,Catlay,Systertiond Investments,Physician,+1 (923)555-5758,,+1 (884)555-5365
Adamina,Koepple,JTS Group,Medical Representative,+1 (926)555-7499,,+1 (204)555-5200
Thomasina,Easter,Ximpution Corporation,Banquet Sales,+1 (616)555-6933,,+1 (730)555-7710
Bradley,Fisher,Elgg Research,Loyalty Program,+1 (818)555-1564,,+1 (944)555-4717
Gwenyth,Poorbaugh,Adrics Investments,Eng. Manager,+1 (944)555-7985,,
Abe,Zoucks,Coradiscon Design,Radiologist,+1 (467)555-2621,,
Alison,Isemann,BOOBOO Development,Investment Advisor,+1 (538)555-8780,,
Deshaun,Weeter,Klas Investments,Club Floor Manager,+1 (540)555-2750,+1 (821)555-7222,+1 (871)555-4718
Kent,Vinsant,Micresk PLC,Shift Manager,+1 (852)555-4649,,+1 (344)555-9649
Harmony,Crom,Systert Germany,International Travel,+1 (741)555-9227,,+1 (891)555-5983
Dallas,Monahan,Systert Germany,Features Editor,+1 (530)555-1930,,
Miracle,Braham,Coradiscon Design,Psychologist,+1 (308)555-2538,,
Alysha,Zeal,Elliner Inc.,Financial Analyst,+1 (391)555-6301,,+1 (985)555-7878
Radcliff,Hook,Ationliess Inc.,Concierge,+1 (773)555-4707,,+1 (458)555-3179
Karissa,Graff,Ping Design,Credit Control & Collections,+1 (828)555-2105,,+1 (379)555-7846
Breana,Bode,Dems Systems Inc.,Logistics - Co-ordinator,+1 (554)555-3633,,
Palmer,Dugmore,ING Investments,Mechanical Engineer,+1 (394)555-4254,,+1 (539)555-1944
Elvin,Porter,ING Investments,EDP Analyst,+1 (422)555-8649,,
Ainsley,Rega,Coradiscon Design,Account Manager,+1 (313)555-8213,,
Peace,Enderly,BOOBOO Development,Quality Assurance - Manager,+1 (321)555-2355,,+1 (706)555-9242
George,Swarner,Unix,Features Editor,+1 (861)555-7492,,+1 (266)555-9412
Macey,Kepple,MAG Group,Marketing Manager,+1 (232)555-6107,,+1 (530)555-5074
Floyd,Kunkle,Inced,Project Finance Advisor,+1 (560)555-4267,,+1 (438)555-4632
Ferdy,Simmons,Elgg Research,IT/ Networking (EDP) - Manager,+1 (638)555-8508,,+1 (792)555-4262
Fulke,Hicks,Search Ventures,Operation Theater Technician,+1 (267)555-3900,,+1 (403)555-2015
Vin,Ewing,Adrics Investments,F&B Manager,+1 (737)555-5095,,+1 (917)555-8544
Tammie,Garry,Apers USA,GM - Risks,+1 (359)555-3291,,+1 (720)555-4488
Dick,Eckert,Sigmaxiliess Technology Partners,Tech Support,+1 (376)555-7457,,
Angel,Pirl,SUN Technology Partners,Treasury Manager,+1 (642)555-2475,,+1 (461)555-5365
Kelly,Highlands,Mobellus Incorporated,Accountant,+1 (817)555-1204,,+1 (296)555-4351
Marianna,Mckinnon,Softwarch Europe,Transactions Processing Executive,+1 (781)555-4948,,+1 (943)555-8278
Regan,Smothers,BOO,Shipping Supervisor,+1 (217)555-4296,,+1 (468)555-7249
Philippina,Rumbaugh,Mobellus Incorporated,Shipping Supervisor,+1 (878)555-6065,,+1 (238)555-5228
Lake,Harrold,Etwork Development,System Administrator,+1 (589)555-6968,,+1 (229)555-5195
Julia,Scott,Appexare Partners,Secretary,+1 (914)555-6936,,
Albert,Foster,Systelgg Research,Product Manager,+1 (787)555-5405,,+1 (925)555-4388
Issac,Wilson,Tional Japan,Distribution - Head,+1 (417)555-9189,,+1 (279)555-8774
Grace,Elliott,Prompackart Group,F&B Manager,+1 (748)555-4279,+1 (928)555-9796,
Aletha,Paynter,Incomp PLC,Librarian,+1 (806)555-3641,,+1 (311)555-6528
Ferdie,Stern,Sigmaxiliess Technology Partners,Trading Advisor,+1 (282)555-1036,,+1 (501)555-3623
Helen,Ledgerwood,Sems Capital,Political Editor,+1 (360)555-1819,,+1 (954)555-9357
Parker,Davis,Nerations,POD Incharge,+1 (432)555-6030,,+1 (639)555-9633
Emmerson,Reade,Micronacts USA,Financial Analyst,+1 (400)555-9124,,+1 (608)555-6241
Teri,Edwards,Sems Capital,Personal Assistant to CEO,+1 (663)555-5629,,
Lauressa,Nabholz,TED,Typist,+1 (691)555-1067,,+1 (444)555-9677
Upton,Mackendoerfer,Unix,Treasury Marketing Fixed Income,+1 (684)555-9103,,+1 (335)555-1182
Eleonor,Brooks,BOO,Vendor Development Manager,+1 (471)555-4555,,
Michaela,Knight,Vellutionix Ventures,Fresher,+1 (627)555-1556,+1 (301)555-6185,+1 (275)555-4439
Ellis,Staymates,Klas Investments,R & D - Head/ Manager,+1 (508)555-5846,,+1 (597)555-1022
Melita,Elizabeth,Unix,Cashier,+1 (913)555-1621,,+1 (271)555-4965
Saxon,Reddish,Arch PLC,Interior Designer,+1 (860)555-8482,,+1 (341)555-9383
Wynter,Batten,Systertiond Investments,Civil Engineer,+1 (247)555-3347,,+1 (708)555-3583
Tyriq,Philbrick,Prompackart Group,Advisory,+1 (852)555-3384,,+1 (412)555-4009
Susanna,Fulton,MAG Group,Company Secretary,+1 (519)555-7672,,+1 (344)555-3205
Blanch,Leichter,BOOBOO Development,Actuary,+1 (261)555-3834,,+1 (395)555-3925
Rocky,Mang,JTS Group,Features Writer,+1 (663)555-2435,,+1 (553)555-3959
Tatyanna,Knapenberger,Coradiscon Design,Environmental Engineer,+1 (669)555-9927,,
Alesha,Fonblanque,CVS Capital,Analytical Chemistry Scientist,+1 (225)555-7568,,+1 (376)555-9698
Dena,Munshower,Klas Investments,Civil Engineer,+1 (977)555-6371,,+1 (873)555-7377
Faye,Stall,Ximpution Corporation,Distribution - Head,+1 (212)555-5817,,+1 (803)555-8736
Sariah,Monroe,TED,Admin - Head/ Manager,+1 (304)555-4560,,+1 (403)555-4097
Isa,Wildman,Apers USA,External Auditor,+1 (259)555-6033,,+1 (615)555-1759
Silver,Ballou,MAG Group,Maintenance Technician,+1 (738)555-9152,,+1 (685)555-1752
Zelma,Stroble,Vellutionix Ventures,Phone Banking,+1 (689)555-2797,,+1 (247)555-9132
Lesley,Keister,JTS Group,Corporate Banking Region Head,+1 (437)555-4841,+1 (639)555-7938,+1 (867)555-8604
Derren,Margaret,Coradiscon Design,House Keeping,+1 (312)555-8041,,+1 (431)555-2565
Gina,Sealis,Search Ventures,Information Systems (MIS) - Manager,+1 (758)555-1950,,+1 (780)555-2161
Katherine,Wain,Systertiond Investments,System Engineer,+1 (605)555-7774,,
Gall,Reed,Ximpution Corporation,Anaesthetist,+1 (475)555-8794,,+1 (645)555-4956
Alvin,Weidemann,Sigmaxiliess Technology Partners,Surgeon,+1 (870)555-1950,,+1 (746)555-9049
Essie,Butt,Appexare Partners,Copy Writer,+1 (454)555-2994,,
Pleasance,Sanforth,Aspers USA,Admin - Executive,+1 (958)555-4679,,+1 (328)555-6377
Sinclair,Fuller,Incomp PLC,Cameraman,+1 (703)555-7674,+1 (383)555-8746,+1 (730)555-8423
Colby,Clark,Elgg Research,Materials - Head/ GM,+1 (935)555-9608,,+1 (872)555-4369
Kerena,Otis,TED,Compliance & Control,+1 (671)555-1817,,+1 (289)555-9664
Pamella,Cable,Micresk PLC,VP - HR,+1 (544)555-8935,,
Elly,Rawls,Come Devices,Customer Care Executive,+1 (650)555-9622,,+1 (589)555-1962
Selma,Olphert,Coradiscon Design,Teacher,+1 (694)555-2675,,+1 (838)555-6888
Cassidy,Roberts,Elliner Inc.,Painter,+1 (852)555-5105,,
Randi,Sloan,Apers USA,Stock Broker,+1 (825)555-5389,,+1 (492)555-4177
Abigail,Mcelroy,Tional Japan,Front Office Manager,+1 (640)555-6629,,
Tania,Hunt,Tional Japan,Spares Engineer,+1 (280)555-3809,,+1 (594)555-5112
Jimmy,Lazzo,Gatia,Features Writer,+1 (288)555-1649,+1 (940)555-5754,+1 (805)555-3661
China,Wire,Xiliekerizon Capital,Network Administrator,+1 (819)555-2953,,+1 (650)555-8560
Coriander,Smith,Appexare Partners,CPA,+1 (568)555-8411,,+1 (698)555-2993
Belinda,Nicholas,Ationliess Inc.,CRM - Support Engineer,+1 (948)555-3991,,+1 (704)555-8668
Willa,Whitehead,Inced,Nephrologist,+1 (823)555-7843,,+1 (245)555-6438
Chelsey,Rogers,Ultexacle Manufacturing,System Integrator,+1 (849)555-9087,+1 (509)555-7648,+1 (610)555-2838
Lynnette,Focell,CVS Capital,Physiotherapist,+1 (773)555-9600,,+1 (390)555-8287
Maegan,Stocker,TED Group,VP - Customer Service,+1 (966)555-5777,,+1 (268)555-6597
Randa,Spring,Sigmaxiliess Technology Partners,Domestic Travel,+1 (341)555-1165,,+1 (877)555-7147
Sammie,Schaeffer,Etwork Development,Professor,+1 (259)555-9360,,+1 (306)555-7098
Ina,Rifler,Softwarch Europe,Technical - Manager,+1 (700)555-1860,,
Xerxes,Kimmons,VAR Ventures,Finance Head,+1 (874)555-8873,,+1 (261)555-9356
Raine,Hutton,BRO Research,Anaesthetist,+1 (347)555-5368,,+1 (814)555-9236
Roselyn,Lester,Micresk PLC,VP - Production,+1 (805)555-8245,,+1 (515)555-1265
Sybella,Swift,Vellutionix Ventures,Photographer,+1 (902)555-4861,,+1 (439)555-6699
Concordia,Tue,Intsco,Clerks,+1 (601)555-5180,,+1 (511)555-2336
Sherisse,Turzanski,Intsco,O&M Engineer,+1 (701)555-7127,,+1 (671)555-4215
Robby,Yonkie,Cyprosybay,GM,+1 (329)555-3472,,+1 (441)555-3480
Rusty,Heckendora,Etwork Development,Cost Accountant,+1 (756)555-9293,,+1 (638)555-2107
Samson,Anderson,Dems Systems Inc.,AV Executive,+1 (664)555-1021,,
Jess,Burch,Dems Systems Inc.,Entrepreneur,+1 (642)555-8062,+1 (347)555-2761,+1 (629)555-6166
Flower,Hurst,VAR Ventures,Quality Assurance - Manager,+1 (870)555-4508,,+1 (726)555-5143
Emmanuel,Kern,Mobellus Incorporated,Graphic Designer,+1 (502)555-8631,,
Gerard,Hills,Syste Technology,Microbiologist,+1 (989)555-6025,,+1 (626)555-7223
Cindra,Mills,BOOBOO Development,Business Editor,+1 (576)555-8835,,+1 (531)555-8456
Cherish,Welty,Softwarch Europe,Fitness Trainer,+1 (622)555-1852,,
Jaclyn,Leach,Softwarch Europe,Guest Relations Executive,+1 (407)555-6344,,+1 (549)555-2176
Keira,Hanford,Systert Germany,House Keeping Executive,+1 (728)555-6217,+1 (366)555-3042,+1 (911)555-2308
Allyson,Garneys,Unix,Group Head - Creative,+1 (213)555-9043,,+1 (770)555-3657
Maximillian,Kadel,Micronacts USA,Domestic Travel,+1 (508)555-5340,,+1 (884)555-3876
Gilbert,Osteen,Inced,Personal Assistant to CEO,+1 (960)555-7058,,+1 (268)555-4781
Nicole,Wells,ING Investments,Attendant,+1 (697)555-4150,,+1 (591)555-2580
Lawanda,Ropes,VAR Ventures,Marketing Manager,+1 (255)555-9614,+1 (825)555-3271,+1 (238)555-6781
Timmy,Chapman,Etwork Development,Cameraman,+1 (422)555-1527,,+1 (736)555-4499
Rowley,Eckhardstein,Etwork Development,Instructional Designer,+1 (936)555-3435,,+1 (459)555-5321
Oliver,Hildyard,JTS Group,Transactions Processing Executive,+1 (209)555-9107,,
Floella,Stephenson,JTS Group,Chief Engineer,+1 (892)555-4228,+1 (302)555-1618,
Maitland,Martin,Apers USA,Drug Regulatory Doctor,+1 (267)555-1456,,+1 (644)555-9988
Stephany,Treeby,TED Group,Research Scientist,+1 (539)555-8484,,+1 (900)555-4107
Mathew,Haile,Micronacts USA,External Consultant,+1 (389)555-7934,,+1 (744)555-6451
Huffie,Robertson,MAG Group,Network Planning - Engineer,+1 (961)555-4412,,+1 (483)555-5175
London,Doverspike,Nola Technology,International Travel,+1 (607)555-6523,+1 (261)555-6512,
Tate,Poley,Phoology Group,Anaesthetist,+1 (741)555-8580,,+1 (348)555-1727
Roydon,Dickson,Elliner Inc.,Information Systems (MIS) - Manager,+1 (872)555-1514,,+1 (723)555-2663
Winthrop,Pullman,Ultexacle Manufacturing,Pharmacist,+1 (645)555-8190,,
Terry,Wible,Coradiscon Design,COO,+1 (488)555-7999,,+1 (875)555-2626
Dell,Leonard,Advarchnovel Incorporated,Project Finance Advisor,+1 (376)555-8702,,+1 (538)555-7381
Maxene,Whitten,Intsco,External Auditor,+1 (308)555-5281,,
Nathanael,Trovato,Arch PLC,Accounts Assistant,+1 (246)555-2097,,+1 (927)555-3687
Skylar,Carden,Ping Design,Copy Writer,+1 (400)555-9173,+1 (848)555-3039,
Avis,Loewentsein,Arch PLC,Health Club Manager,+1 (591)555-3020,,+1 (806)555-7129
Maynard,Groah,Micresk PLC,Hardware Design Technical Leader,+1 (968)555-8758,,+1 (780)555-8960
Allan,Baughman,CVS Capital,Shift Manager,+1 (206)555-9728,,
Edytha,Maugham,Sems Capital,VP - Administration,+1 (288)555-5693,,+1 (471)555-1814
Adrian,Marcotte,TED Group,Freelancer,+1 (586)555-4460,,+1 (517)555-4036
Zachary,Armitage,Xiliekerizon Capital,CPA,+1 (776)555-4559,+1 (672)555-7443,+1 (581)555-1426
Suzy,Orner,Appexare Partners,Logistics - Co-ordinator,+1 (214)555-9352,,+1 (898)555-5747
Kyler,Wallick,TED,Research Scientist,+1 (674)555-2349,,+1 (591)555-3937
Terrie,Moore,Prompackart Group,AV Executive,+1 (255)555-3478,,+1 (518)555-2181
Carmel,Jenkins,TED Group,Hardware Design Technical Leader,+1 (776)555-6430,,+1 (714)555-6691
Howie,Fair,Aspers USA,Private Banker,+1 (643)555-2055,+1 (551)555-6803,+1 (352)555-3204
Indiana,Koster,VAR Ventures,Advertising - Manager,+1 (780)555-4650,,+1 (571)555-4823
Nelle,Milliron,Prompackart Group,Technician,+1 (924)555-3576,,
Terance,Roadman,Adrics Investments,Real Estate Broker,+1 (522)555-8162,+1 (247)555-4854,+1 (774)555-9897
Ravenna,Tillson,Micronacts USA,Property Management,+1 (542)555-4657,,+1 (714)555-4170
Aida,Tomey,INC Technology,Guest Relations Manager,+1 (798)555-1093,+1 (380)555-4916,
Janine,Moberly,Systems Incorporated,Front Desk,+1 (329)555-1910,,
Leila,Mary,Phoology Group,Network Planning - Engineer,+1 (704)555-7987,,+1 (533)555-4144
Charlie,Watkins,Tional Japan,Copy Writer,+1 (224)555-5388,,+1 (289)555-3162
Jaylin,Lord,Phoology Group,Safety Officer,+1 (694)555-6231,,+1 (839)555-2906
Jerry,Sandblom,Search Ventures,Treasury Marketing Fixed Income,+1 (645)555-6931,,+1 (596)555-8575
Carla,Mackendrick,Nola Technology,Chemist,+1 (688)555-9162,,+1 (403)555-3337
Mora,Morgan,Inced,Events/ Promotions Manager,+1 (790)555-8292,,
Letty,Stahl,Tional Japan,Occupational Therapist,+1 (694)555-7088,,+1 (434)555-9738
Rain,Schneider,Unix,Shift Manager,+1 (894)555-2601,,
Brandie,Southern,TED Group,COO,+1 (776)555-2640,,+1 (271)555-3663
Babette,Bellinger,Incomp PLC,Freelancer,+1 (639)555-6468,,+1 (530)555-4501
Acacia,Merryman,Dems Systems Inc.,Laundry Manager,+1 (966)555-8092,,+1 (351)555-4966
Burton,Jerome,Ultexacle Manufacturing,Software Test Engineer,+1 (384)555-9832,+1 (740)555-8819,
Godfrey,Mason,MIC Japan,Optometrist,+1 (250)555-7537,+1 (320)555-1201,+1 (593)555-6201
Dan,Beedell,Ximpution Corporation,CPA,+1 (896)555-4212,,+1 (852)555-5393
Elspeth,Clarke,Phoology Group,VP - HR,+1 (690)555-1194,,+1 (852)555-6791
Les,Pery,Aspers USA,Spares Engineer,+1 (459)555-6157,,
Marilene,Baird,Advarchnovel Incorporated,Restaurant Manager,+1 (744)555-2048,+1 (762)555-5032,+1 (429)555-4485
Cordula,Hall,Klas Investments,Company Secretary,+1 (788)555-1440,,+1 (624)555-1402
Frazier,Ruch,Ping Design,Clinical Research Scientist,+1 (253)555-9558,,
America,Gilman,Nerations,Office Assistant,+1 (754)555-9293,,+1 (898)555-3955
Merton,Dennis,BOO,Nutritionist,+1 (552)555-1409,,
Calanthia,Perkins,MAG Group,Nutritionist,+1 (422)555-9796,,+1 (221)555-9618
Destiny,Fox,Nerations,Network Planning - Engineer,+1 (202)555-2206,,+1 (268)555-6403
Lorinda,Woodworth,Sigmaxiliess Technology Partners,Project Finance Advisor,+1 (346)555-6959,,+1 (242)555-5365
Ritchie,Osterweiss,Adrics Investments,Cost Accountant,+1 (246)555-2034,,+1 (207)555-7175
Kestrel,Cook,VAR Ventures,External Auditor,+1 (724)555-6945,,+1 (688)555-9161
Betsy,Stoddard,Coradiscon Design,Personal Assistant to CEO,+1 (233)555-9764,,+1 (654)555-6856
Nic,Williams,TED,Risk Manager,+1 (447)555-4656,,+1 (904)555-7932
Octavia,Vanleer,Systexartion Corporation,VP - Operations,+1 (899)555-8184,,
Rhett,Hill,Search Ventures,Customer Service,+1 (344)555-2331,,+1 (862)555-5388
Davida,Hatherly,JTS Group,Business Analyst,+1 (286)555-4977,,+1 (649)555-6751
Ella,Weisgarber,MAG Group,Ground Staff,+1 (514)555-7852,,+1 (300)555-7038
Alexus,Haverrman,Sems Capital,Psychiatrist,+1 (690)555-2380,,
Scarlett,Field,Gratialpinc,VP - HR,+1 (296)555-3051,,
Abilene,Garratt,Micresk PLC,COO,+1 (578)555-2106,,+1 (646)555-1986
Ocean,Waldron,Incomp PLC,Chemical Research Scientist,+1 (791)555-8493,,+1 (669)555-3570
Betty,Weldi,MIC Japan,Radiographer,+1 (955)555-9212,,+1 (253)555-9004
Daniella,Seidner,Search Ventures,Cash Officer,+1 (877)555-6497,,
Holden,Curry,Unix,AV Executive,+1 (932)555-1715,,
Kian,Herndon,INC Technology,Reservation Manager,+1 (264)555-1450,,
Jonty,Nickolson,Prompackart Group,Hardware Design Engineer,+1 (971)555-5290,,+1 (356)555-6678
Phemie,Reese,Klas Investments,Outside Service Providers,+1 (365)555-6389,,+1 (762)555-4145
Dorris,Lowe,BRO Research,Area Manager,+1 (455)555-9188,,+1 (981)555-3694
Ria,Sherlock,Inced,Political Editor,+1 (240)555-3718,,
Peers,Birdsall,ING Investments,Operation Theater Technician,+1 (454)555-1971,,
Megan,Jackson,Micresk PLC,Drug Regulatory Doctor,+1 (695)555-3351,,
Brande,Cavalet,Elliner Inc.,Front Office Manager,+1 (620)555-6144,,
Dom,Swain,Intsco,Advertising - Executive,+1 (793)555-7637,,+1 (230)555-5494
Kevin,Warren,Incomp PLC,Branch Head,+1 (833)555-1905,,
Janet,Bousum,Systertiond Investments,Franchisee Coordinator,+1 (233)555-7781,,+1 (213)555-9655
Georgia,Auman,Xilintem Development,Tool Room,+1 (829)555-9018,,+1 (565)555-9491
Daphne,Hatch,Advarchnovel Incorporated,Branch Head,+1 (968)555-9271,,+1 (720)555-8742
Kayley,Ann,Micronacts USA,Asset Operations,+1 (947)555-5965,,
Diann,Bunten,Search Ventures,Taxation - Manager,+1 (441)555-5733,,+1 (434)555-6511
Leah,Tennant,Unix,Financial Controller,+1 (589)555-4586,,+1 (774)555-7118
Chrysanta,Sullivan,Adrics Investments,Transactions Processing Executive,+1 (805)555-6811,,+1 (908)555-5260
Steven,Hujsak,MAG Group,POD Assistant,+1 (617)555-4565,,+1 (486)555-7153
Ed,Wade,Klas Investments,Private Banker,+1 (366)555-2100,,+1 (780)555-9188
Denis,Mingle,Phoology Group,Depository Participant,+1 (444)555-1438,+1 (228)555-7556,+1 (935)555-5448
Cassian,Napier,Sems Capital,Research Scientist,+1 (266)555-2551,,+1 (847)555-7712
Beau,Rose,BOOBOO Development,Actuary,+1 (538)555-3615,,
Lily,Keener,Sigmaxiliess Technology Partners,Treasury Marketing FOREX,+1 (260)555-3385,,
Marcia,Bridger,Advarchnovel Incorporated,Direct Marketing - Manager,+1 (230)555-5350,,
Lesly,Osteen,Klas Investments,Admin - Head/ Manager,+1 (693)555-5041,,
Granville,Tomlinson,Etwork Development,Outside Service Providers,+1 (257)555-4712,,
Tanesha,Fuhrer,Dems Systems Inc.,Aviation Engineer,+1 (919)555-6275,,+1 (626)555-3817
Damion,Ring,Klas Investments,Pathologist,+1 (657)555-9467,,+1 (350)555-5161
Kizzie,Marjorie,Softwarch Europe,Librarian,+1 (561)555-7794,,+1 (361)555-1285
Hank,Chauvin,Syste Technology,Health Club Manager,+1 (701)555-1473,,+1 (946)555-9720

View File

@ -0,0 +1,559 @@
<?php
#####################################################################
# Server side speed dial
#
# Mitel SIP Phones R1.4.2 or better
# Copyright 2005-2015 Mitel Networks
#
# Supported Mitel Phones
# All Phones
#
# Usage
# script.php?user=XXX&mode=MODE
# XXX is the extension of the phone on the platform. If the user
# is not provided, the MAC address is used instead.
# MODE is the behavior mode, static or dynamic (optional)
#
#####################################################################
#############################################################################
# PHP customization for includes and warnings
#############################################################################
$os = strtolower(PHP_OS);
if(strpos($os, 'win') === false) ini_set('include_path',ini_get('include_path').':include:../include');
else ini_set('include_path',ini_get('include_path').';include;..\include');
error_reporting(E_ERROR | E_PARSE);
#####################################################################
# Includes
#####################################################################
require_once('AastraIPPhoneTextMenu.class.php');
require_once('AastraIPPhoneTextScreen.class.php');
require_once('AastraIPPhoneInputScreen.class.php');
require_once('AastraIPPhoneExecute.class.php');
require_once('AastraCommon.php');
#####################################################################
# Beginning of the active code
#####################################################################
# Retrieve parsed data
$header=Aastra_decode_HTTP_header();
$user=Aastra_getvar_safe('user',$header['mac']);
$action=Aastra_getvar_safe('action','list');
$selection=Aastra_getvar_safe('selection');
$value=Aastra_getvar_safe('value');
$step=Aastra_getvar_safe('step','1');
$input1=Aastra_getvar_safe('input1');
$input2=Aastra_getvar_safe('input2');
$input3=Aastra_getvar_safe('input3');
$input4=Aastra_getvar_safe('input4');
$input5=Aastra_getvar_safe('input5');
$mode=Aastra_getvar_safe('mode','dynamic');
# Log call to the application
if(function_exists('Aastra_get_userdevice_Asterisk')) Aastra_trace_call('asterisk_speed','user='.$user.', action='.$action.', selection='.$selection.', value='.$value.', step='.$step);
else Aastra_trace_call('speed','user='.$user.', action='.$action.', selection='.$selection.', value='.$value.', step='.$step);
# Test User Agent
Aastra_test_phone_version('1.4.2.',0);
# Global data
$XML_SERVER.='?user='.$user.'&mode='.$mode;
# Get Language
$language=Aastra_get_language();
# Init data
if(function_exists('Aastra_get_userdevice_Asterisk')) $data=Aastra_get_user_context(Aastra_get_userdevice_Asterisk($user),'speed');
else $data=Aastra_get_user_context($user,'speed');
# Get global compatibility
$is_multipleinputfields=Aastra_is_multipleinputfields_supported();
$nb_softkeys=Aastra_number_physical_softkeys_supported();
$is_icons=Aastra_is_icons_supported();
$is_style_textmenu=Aastra_is_style_textmenu_supported();
$is_toptitle_supported=Aastra_is_top_title_supported();
# Process action
switch($action)
{
# UP
case 'up':
# Follow up
$object=new AastraIPPhoneExecute();
# Entry must be real
if($data[$selection]['name']!='')
{
# Not the first one
if($selection!=0)
{
# Switch inputs
$temp=$data[$selection-1];
$data[$selection-1]=$data[$selection];
$data[$selection]=$temp;
# Save update
if(function_exists('Aastra_get_userdevice_Asterisk')) $data=Aastra_save_user_context(Aastra_get_userdevice_Asterisk($user),'speed',$data);
else Aastra_save_user_context($user,'speed',$data);
# Next step
$object->addEntry($XML_SERVER.'&action=list&selection='.($selection-1));
}
else $object->addEntry('');
}
else $object->addEntry('');
break;
# DOWN
case 'down':
# Follow up
$object=new AastraIPPhoneExecute();
# Entry must be real
if($data[$selection]['name']!='')
{
# Not the last one
if($selection!=(AASTRA_MAXLINES-1))
{
# Switch inputs
$temp=$data[$selection+1];
$data[$selection+1]=$data[$selection];
$data[$selection]=$temp;
# Save update
if(function_exists('Aastra_get_userdevice_Asterisk')) $data=Aastra_save_user_context(Aastra_get_userdevice_Asterisk($user),'speed',$data);
else Aastra_save_user_context($user,'speed',$data);
# Next step
$object->addEntry($XML_SERVER.'&action=list&selection='.($selection+1));
}
else $object->addEntry('');
}
else $object->addEntry('');
break;
# SET (Single input field)
case 'set':
# No error so far
$error=0;
# Name is mandatory
if(($value=='') and ($step=='1')) $error=1;
# At least one phone number
if(($step=='4') and ($data['temp']['work']=='') and ($data['temp']['mobile']=='') and ($data[$selection]['home']=='') and ($data[$selection]['other']=='')) $error=2;
# Still OK
if($error==0)
{
# Next step
$object=new AastraIPPhoneExecute();
$array=array('0'=>'name','1'=>'work','2'=>'mobile','3'=>'home','4'=>'other');
$data['temp'][$array[$step-1]]=$value;
if($step<5)
{
$step++;
$object->addEntry($XML_SERVER.'&action=edit&selection='.$selection.'&step='.$step);
}
else
{
$data[$selection]=$data['temp'];
unset($data['temp']);
$object->addEntry($XML_SERVER.'&action=list&selection='.$selection);
}
# Update user data
if(function_exists('Aastra_get_userdevice_Asterisk')) $data=Aastra_save_user_context(Aastra_get_userdevice_Asterisk($user),'speed',$data);
else Aastra_save_user_context($user,'speed',$data);
}
else
{
# Display error
$object=new AastraIPPhoneTextScreen();
if($is_toptitle_supported) $object->setTopTitle(Aastra_get_label('User error',$language),'red');
else $object->setTitle(Aastra_get_label('User error',$language));
if($error=='1') $object->setText(Aastra_get_label('The name is a mandatory field.',$language));
else $object->setText(Aastra_get_label('At least one phone number is needed for this application.',$language));
if($nb_softkeys>0)
{
$object->addSoftkey($nb_softkeys,Aastra_get_label('Done',$language),$XML_SERVER.'&action=edit&selection='.$selection);
$object->setCancelAction($XML_SERVER.'&action=edit&selection='.$selection);
}
else $object->setDoneAction($XML_SERVER.'&action=edit&selection='.$selection);
}
break;
# SET (Multiple input fields)
case 'set2':
# All inputs empty
if(($input1=='') or (($input2=='') and ($input3=='') and ($input4=='') and ($input5=='')))
{
# Display error
$object=new AastraIPPhoneTextScreen();
if($is_toptitle_supported) $object->setTopTitle(Aastra_get_label('User error',$language),'red');
else $object->setTitle(Aastra_get_label('User error',$language));
$object->setText(Aastra_get_label('The name and at least one phone number are mandatory fields.',$language));
if($nb_softkeys>0)
{
$object->addSoftkey($nb_softkeys,Aastra_get_label('Done',$language),$XML_SERVER.'&action=edit&selection='.$selection);
$object->setCancelAction($XML_SERVER.'&action=edit&selection='.$selection);
$object->setCancelAction($XML_SERVER.'&action=edit&selection='.$selection);
}
else $object->setDoneAction($XML_SERVER.'&action=edit&selection='.$selection);
}
else
{
# Update user data
$data[$selection]['name']=$input1;
$data[$selection]['work']=$input2;
$data[$selection]['mobile']=$input3;
$data[$selection]['home']=$input4;
$data[$selection]['other']=$input5;
if(function_exists('Aastra_get_userdevice_Asterisk')) $data=Aastra_save_user_context(Aastra_get_userdevice_Asterisk($user),'speed',$data);
else Aastra_save_user_context($user,'speed',$data);
# Back to the list
$object=new AastraIPPhoneExecute();
$object->addEntry($XML_SERVER.'&action=list&selection='.$selection);
}
break;
# CLEAR
case 'clear':
# Clear selection
unset($data[$selection]);
# Update user data
if(function_exists('Aastra_get_userdevice_Asterisk')) $data=Aastra_save_user_context(Aastra_get_userdevice_Asterisk($user),'speed',$data);
else Aastra_save_user_context($user,'speed',$data);
# Back to the list
$object=new AastraIPPhoneExecute();
$object->addEntry($XML_SERVER.'&action=list&selection='.$selection);
break;
# EDIT
case 'edit':
# Multiple input fields?
if(Aastra_is_multipleinputfields_supported())
{
# Input Screen
$object = new AastraIPPhoneInputScreen();
$object->setDestroyOnExit();
# Title
if($is_toptitle_supported) $object->setTopTitle(sprintf(Aastra_get_label('Speed Dial %d',$language),$selection+1));
else $object->setTitle(sprintf(Aastra_get_label('Speed Dial %d',$language),$selection+1));
# Target URL
$object->setURL($XML_SERVER.'&action=set2&selection='.$selection.'&step='.$step);
# Field Name
$object->addField('string');
$object->setFieldPrompt(Aastra_get_label('Name',$language));
$object->setFieldParameter('input1');
$object->setFieldDefault($data[$selection]['name']);
if($nb_softkeys!=10)
{
if($nb_softkeys>4)
{
$object->addFieldSoftkey('3',Aastra_get_label('ABC',$language),'SoftKey:ChangeMode');
$object->addFieldSoftkey('4',Aastra_get_label('NextSpace',$language),'SoftKey:NextSpace');
}
else
{
$object->addFieldSoftkey('1',Aastra_get_label('Backspace',$language),'SoftKey:BackSpace');
$object->addFieldSoftkey('2',Aastra_get_label('ABC',$language),'SoftKey:ChangeMode');
$object->addFieldSoftkey('3',Aastra_get_label('NextSpace',$language),'SoftKey:NextSpace');
$object->addFieldSoftkey('4',Aastra_get_label('Backspace',$language),'SoftKey:BackSpace');
$object->addFieldSoftkey('5',Aastra_get_label('Submit',$language),'SoftKey:Submit');
$object->addFieldSoftkey('6',Aastra_get_label('Cancel',$language),$XML_SERVER.'&selection='.$selection);
}
}
# Field Work Number
$object->addField('number');
$object->setFieldPrompt(Aastra_get_label('Work number',$language));
$object->setFieldParameter('input2');
$object->setFieldDefault($data[$selection]['work']);
# Field Mobile Number
$object->addField('number');
$object->setFieldPrompt(Aastra_get_label('Mobile number',$language));
$object->setFieldParameter('input3');
$object->setFieldDefault($data[$selection]['mobile']);
# Field Home number
$object->addField('number');
$object->setFieldPrompt(Aastra_get_label('Home number',$language));
$object->setFieldParameter('input4');
$object->setFieldDefault($data[$selection]['home']);
# Field Other Number
$object->addField('number');
$object->setFieldPrompt(Aastra_get_label('Other number',$language));
$object->setFieldParameter('input5');
$object->setFieldDefault($data[$selection]['other']);
# Common Softkeys
if($nb_softkeys!=10)
{
$object->addSoftkey('1',Aastra_get_label('Backspace',$language),'SoftKey:BackSpace');
$object->addSoftkey($nb_softkeys-1,Aastra_get_label('Submit',$language),'SoftKey:Submit');
$object->addSoftkey($nb_softkeys,Aastra_get_label('Cancel',$language),$XML_SERVER.'&selection='.$selection);
}
}
else
{
# Input Screen
$object=new AastraIPPhoneInputScreen();
$object->setDestroyOnExit();
# Name or number
if($step==1) $object->setType('string');
else $object->setType('number');
# Title
$object->setTitle(sprintf(Aastra_get_label('Speed Dial %d',$language),$selection+1));
# Prompts
if($step==1) $object->setPrompt(Aastra_get_label('Enter Name',$language));
if($step==2) $object->setPrompt(Aastra_get_label('Enter Work Number',$language));
if($step==3) $object->setPrompt(Aastra_get_label('Enter Mobile Number',$language));
if($step==4) $object->setPrompt(Aastra_get_label('Enter Home Number',$language));
if($step==5) $object->setPrompt(Aastra_get_label('Enter Other Number',$language));
$object->setParameter('value');
$object->setURL($XML_SERVER.'&action=set&selection='.$selection.'&step='.$step);
$array=array('0'=>'name','1'=>'work','2'=>'mobile','3'=>'home','4'=>'other');
$object->setDefault($data[$selection][$array[$step-1]]);
# Softkeys
if($nb_softkeys>0)
{
if($nb_softkeys==6)
{
$object->addSoftkey('1',Aastra_get_label('Backspace',$language),'SoftKey:BackSpace');
if($step==1)
{
$object->addSoftkey('3', Aastra_get_label('ABC',$language),'SoftKey:ChangeMode');
$object->addSoftkey('4', Aastra_get_label('NextSpace',$language),'SoftKey:NextSpace');
}
$object->addSoftkey('5',Aastra_get_label('Done',$language),'SoftKey:Submit');
if($step!=1)
{
$step--;
$object->addSoftkey('6',Aastra_get_label('Back',$language),$XML_SERVER.'&action=edit&selection='.$selection.'&step='.$step);
}
else $object->addSoftkey('6',Aastra_get_label('Back',$language),$XML_SERVER.'&action=list&selection='.$selection);
}
else
{
if($step!=1)
{
$step--;
$object->addSoftkey('9',Aastra_get_label('Back',$language),$XML_SERVER.'&action=edit&selection='.$selection.'&step='.$step);
$object->setCancelAction($XML_SERVER.'&action=edit&selection='.$selection.'&step='.$step);
}
else
{
$object->addSoftkey('9',Aastra_get_label('Back',$language),$XML_SERVER.'&action=list&selection='.$selection);
$object->setCancelAction($XML_SERVER.'&action=list&selection='.$selection);
}
}
}
else
{
if($step!=1)
{
$step--;
$object->setCancelAction($XML_SERVER.'&action=edit&selection='.$selection.'&step='.$step);
}
else $object->setCancelAction($XML_SERVER.'&action=list&selection='.$selection);
}
}
break;
# VIEW
case 'view':
# Real input
if($data[$selection]['name']!='')
{
# At least one number
if(($data[$selection]['work']!='') || ($data[$selection]['mobile']!='') || ($data[$selection]['home']!='') || ($data[$selection]['other']!=''))
{
# Display list as TextMenu
$object=new AastraIPPhoneTextMenu();
$object->setDestroyOnExit();
if($is_style_textmenu) $object->setStyle('none');
# Title
if($is_toptitle_supported) $object->setTopTitle($data[$selection]['name']);
else $object->setTitle($data[$selection]['name']);
$title=array( '1'=>Aastra_get_label('W',$language),
'2'=>Aastra_get_label('M',$language),
'3'=>Aastra_get_label('H',$language),
'4'=>Aastra_get_label('O',$language));
$array=array('1'=>'work','2'=>'mobile','3'=>'home','4'=>'other');
for($i=1;$i<5;$i++)
{
$name=$data[$selection][$array[$i]];
if($name!='')
{
if(!$is_icons) $name=$title[$i].' '.$data[$selection][$array[$i]];
else $name=$data[$selection][$array[$i]];
$number=$data[$selection][$array[$i]];
if($nb_softkeys==0) $number='Dial:'.$number;
if(!$is_icons)
{
if($nb_softkeys!=10) $object->addEntry($name,$number,'');
else $object->addEntry($name,'Dial:'.$number,'','',$number);
}
else $object->addEntry($name,$number,'',$i);
}
}
# Softkeys
if($nb_softkeys>0)
{
if($nb_softkeys!=10)
{
$object->addSoftkey('1',Aastra_get_label('Dial',$language),'SoftKey:Dial');
$object->addSoftkey($nb_softkeys-1,Aastra_get_label('Back',$language),$XML_SERVER.'&selection='.$selection);
$object->addSoftkey($nb_softkeys,Aastra_get_label('Exit',$language),'SoftKey:Exit');
}
else
{
$object->addSoftkey('9',Aastra_get_label('Back',$language),$XML_SERVER.'&selection='.$selection);
$object->addSoftkey('10',Aastra_get_label('Exit',$language),'SoftKey:Exit');
$object->setCancelAction($XML_SERVER.'&selection='.$selection);
}
}
else
{
$object->addEntry('Clear',$XML_SERVER.'&action=clear&selection='.$selection);
$object->addEntry('Edit',$XML_SERVER.'&action=edit&step=1&selection='.$selection);
}
# Icons
if($is_icons)
{
if(Aastra_phone_type()!=5)
{
$object->addIcon(1,Aastra_get_custom_icon('Office'));
$object->addIcon(2,Aastra_get_custom_icon('Cellphone'));
$object->addIcon(3,Aastra_get_custom_icon('Home'));
$object->addIcon(4,Aastra_get_custom_icon('Phone'));
}
else
{
$object->addIcon(1,'Icon:Office');
$object->addIcon(2,'Icon:CellPhone');
$object->addIcon(3,'Icon:Home');
$object->addIcon(4,'Icon:PhoneOnHook');
}
}
}
else
{
# Display error
$object=new AastraIPPhoneTextScreen();
$object->setTitle($data[$selection]['name']);
$object->setText(Aastra_get_label('No phone number associated to this name.',$language));
$object->addSoftkey('6',Aastra_get_label('Done',$language),$XML_SERVER.'&action=list&selection='.$selection);
}
}
else
{
# Back to the list
$object=new AastraIPPhoneExecute();
$object->addEntry($XML_SERVER.'&action=list&selection='.$selection);
}
break;
# List of speed dial
case 'list':
# Display speeddials as a list
$object=new AastraIPPhoneTextMenu();
$object->setDestroyOnExit();
# Title
if($is_toptitle_supported) $object->setTopTitle(Aastra_get_label('Speed Dial List',$language));
else $object->setTitle(Aastra_get_label('Speed Dial List',$language));
# Default index
if($selection!='') $object->setDefaultIndex($selection+1);
# Display items
$nb_entries=0;
$object->setBase($XML_SERVER);
for($i=0;$i<AASTRA_MAXLINES;$i++)
{
$name=$data[$i]['name'];
if($name=='')
{
if($mode=='dynamic')
{
$name='...............';
$object->addEntry($name,'&action=edit&selection='.$i,$i);
}
}
else
{
$object->addEntry($name,'&action=view&selection='.$i,$i);
$nb_entries++;
}
}
# At least one item in static mode
if(($mode!='dynamic') and ($nb_entries==0)) $object->addEntry(Aastra_get_label('NO ENTRY',$language),'');
# Add Softkeys
if($nb_softkeys>0)
{
if($nb_softkeys==4)
{
$object->addSoftkey('1',Aastra_get_label('Select',$language),'SoftKey:Select');
if($mode=='dynamic')
{
$object->addSoftkey('2',Aastra_get_label('Move Up',$language),$XML_SERVER.'&action=up');
$object->addSoftkey('3',Aastra_get_label('Move Down',$language),$XML_SERVER.'&action=down');
$object->addSoftkey('4',Aastra_get_label('Clear',$language),$XML_SERVER.'&action=clear');
$object->addSoftkey('5',Aastra_get_label('Edit',$language),$XML_SERVER.'&action=edit');
}
$object->addSoftkey('6',Aastra_get_label('Exit',$language),'SoftKey:Exit');
}
else if($nb_softkeys==6)
{
$object->addSoftkey('1',Aastra_get_label('Select',$language),'SoftKey:Select');
if($mode=='dynamic')
{
$object->addSoftkey('2',Aastra_get_label('Move Up',$language),$XML_SERVER.'&action=up');
$object->addSoftkey('3',Aastra_get_label('Clear',$language),$XML_SERVER.'&action=clear');
$object->addSoftkey('4',Aastra_get_label('Edit',$language),$XML_SERVER.'&action=edit');
$object->addSoftkey('5',Aastra_get_label('Move Down',$language),$XML_SERVER.'&action=down');
}
$object->addSoftkey('6',Aastra_get_label('Exit',$language),'SoftKey:Exit');
}
else
{
if($mode=='dynamic')
{
$object->addSoftkey('3',Aastra_get_label('Move Up',$language),$XML_SERVER.'&action=up');
$object->addSoftkey('6',Aastra_get_label('Clear',$language),$XML_SERVER.'&action=clear');
$object->addSoftkey('7',Aastra_get_label('Edit',$language),$XML_SERVER.'&action=edit');
$object->addSoftkey('8',Aastra_get_label('Move Down',$language),$XML_SERVER.'&action=down');
}
$object->addSoftkey('10',Aastra_get_label('Exit',$language),'SoftKey:Exit');
}
}
break;
}
# Display object
$object->output();
exit;
?>

1
csv_directory/include Symbolic link
View File

@ -0,0 +1 @@
../php_classes

5574
csv_directory/language.ini Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,24 @@
Copyright (c) 2005-2015 Mitel Networks
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of Aastra Telecom US, Inc. may not be used to endorse or promote
products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY MITEL NETWORKS ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL AASTRA TELECOM US, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -0,0 +1,59 @@
##############################################################################################
# ldap_directory.conf
#
# Configuration file for the LDAP directory application
##############################################################################################
##############################################################################################
# Global configuration
#
# [LDAP_Server]
# hostname Hostname or IP address of LDAP server
# port TCP server port of LDAP server. Typically this is 389 or 3268
# baseDN Base / Root Search DN. Example: dc=company, dc=com
# userdomain User domain to connect to the LDAP server (optional)
# username User DN to connect to the LDAP server. Leave blank if anonymous bind is used.
# password Password for the User DN. Leave blank if anonymous bind is used.
##############################################################################################
[LDAP_Server]
hostname=
port=3268
basedn=
userdomain=
username=
password=
##############################################################################################
# Dialing profile
#
# [Dialplan]
# countrycode Country code
# If phone number starts with "+<countrycode>", this will be removed
#
# longdistance Long distance prefix
# This prefix will be added to the number in case +<countrycode> has been stripped.
# Leave blank if not needed.
#
# international International prefix
# The "+" sign will be replaced with this prefix
#
# outgoing Outgoing prefix
# Prefix that needs to be appended for outgoing calls
# (all call but local calls), e.g. 0 or 9
#
# local List of local PBX number prefixes separated by a comma (in national format).
# Prefix will be removed, no outgoing prefix will be added.
# Examples: local=905760,978262
# --> 9057602222 will be replaced by 2222 and 9782623333 will be replaced by 3333.
#
# localextlen Numbers with this number of digits or less will be treated as local PBX extensions
# No prefix added (useful in case numbers are stored in local format in LDAP)
##############################################################################################
[Dialplan]
countrycode=1
longdistance=1
international=011
outgoing=9
local=972555
localextlen=4

View File

@ -0,0 +1,15 @@
[General]
# Public IP address (optional), if not provided $_SERVER['HTTP_HOST'] is used
public=
# Path for the Aastra cache directory (optional), if not provided /var/cache/aastra is used
cache=
# Path for the TFTP root directory (optional) if not provided /tftpboot is used
tftp=
# Path for the XML directory behind the HTTP Server (optional), default is xml
xmldirectory=ldap
# Mode DEBUG (0 or 1), default is 0
debug=0
# Mode TRACE (0 or 1), default is 0
trace=0
# Forced language (optional), can be en, de, fr...
language=

View File

@ -0,0 +1,478 @@
<?php
###################################################################################################
# Example of an XML Directory using LDAP as data source for the Aastra IP Phones
# Copyright 2005-2015 Mitel Networks
#
# Script needs PHP5 or higher with LDAP extension
#
# Aastra SIP Phones Firmware 2.3.0 or higher.
#
# Configuration:
# See file ../config/ldap_directory.conf
#
# Usage:
# Configure an XML softkey on an Aastra IP Phone pointing to this script.
#
###################################################################################################
#############################################################################
# PHP customization for includes and warnings
#############################################################################
$os = strtolower(PHP_OS);
if(strpos($os, "win") === false) ini_set('include_path',ini_get('include_path').':include:../include');
else ini_set('include_path',ini_get('include_path').';include;..\include');
error_reporting(E_ERROR | E_WARNING | E_PARSE);
#############################################################################
# Includes
#############################################################################
require_once('AastraCommon.php');
#############################################################################
# Private functions
#############################################################################
#############################################################################
# query_ldap(lookup,firstn,lastn)
#
# Query the LDAP server using the provided search criteria.
#
# Parameters
# @lookup lookup string (last or first name)
# @firstn lookup string for first name
# @lastn lookup string for last name
#
# Returns
# Array of all directory records matching the criterion.
# NULL if no matches found.
#
#############################################################################
function query_ldap($lookup,$firstn,$lastn)
{
global $LANGUAGE;
# Retrieve LDAP basic configuration
$system=Aastra_readINIfile(AASTRA_CONFIG_DIRECTORY.'ldap_directory.conf', '#','=');
$LDAP_SERVER = $system['LDAP_Server']['hostname'];
$LDAP_PORT = $system['LDAP_Server']['port'];
$LDAP_ROOT_DN = $system['LDAP_Server']['basedn'];
$LDAP_USERDOMAIN = $system['LDAP_Server']['userdomain'];
$LDAP_USERNAME = $system['LDAP_Server']['username'];
$LDAP_PASSWORD = $system['LDAP_Server']['password'];
########################################### Advanced LDAP Configuration #########################################
$LDAP_SIZELIMIT = 400; // limits the number of entries fetched. 0 means no limit.
$LDAP_TIMELIMIT = 5; // max number of seconds spent on the search. 0 means no limit.
# What additional attributes are retrieved from LDAP. Possible attributes: "title", "department", "company"
#$LDAP_ADDITIONAL_ATTRIBUTES = array("title", "department", "company");
# LDAP attribute mapping. Put empty string if attribute does not exist in LDAP.
$LDAP_PHONE_ATTRIBUTE = 'telephonenumber'; // name of the LDAP attribute that contains the office phone number
$LDAP_MOBILE_ATTRIBUTE = 'mobile'; // name of the LDAP attribute that contains the mobile (cell) phone number. "mobile" or "mobiletelephonenumber".
$LDAP_HOMEPHONE_ATTRIBUTE = 'homephone'; // name of the LDAP attribute that contains the home phone number, typically "homephone"
########################################### Advanced LDAP Configuration #########################################
# Prepare search filter
if ($lookup != '') $searchfilter='(|(sn='.$lookup.'*)(givenName='.$lookup.'*))';
else
{
if ($firstn!='' and $lastn!='') $searchfilter='(&(sn='.$lastn.'*)(givenName='.$firstn.'*))';
else
{
if ($firstn!='') $searchfilter='(givenName='.$firstn.'*)';
else $searchfilter='(sn='.$lastn.'*)';
}
}
# Refine searchfilter in order to exclude "contacts"
#$searchfilter="(&".$searchfilter."(!(objectclass=contact)))";
# Prepare LDAP attributes to look for
$ldap_attribues=array('cn','sn','givenname');
array_push($ldap_attribues, $LDAP_PHONE_ATTRIBUTE, $LDAP_MOBILE_ATTRIBUTE, $LDAP_HOMEPHONE_ATTRIBUTE);
# Complete with optional attributes
if (is_array($LDAP_ADDITIONAL_ATTRIBUTES)) $ldap_attribues = array_merge($ldap_attribues, $LDAP_ADDITIONAL_ATTRIBUTES);
# Connect to LDAP SERVER
$ds=ldap_connect($LDAP_SERVER,$LDAP_PORT);
# Connected to the LDAPserver
if($ds)
{
# Bind type
if (trim($LDAP_USERNAME) != '')
{
# bind with credentials
if($LDAP_USERDOMAIN!='') $username=$LDAP_USERDOMAIN.chr(92).$LDAP_USERNAME;
else $username=$LDAP_USERNAME;
$lb=ldap_bind($ds,$username,$LDAP_PASSWORD);
}
else
{
# anonymous bind
$lb = ldap_bind($ds);
}
# Bind successful
if ($lb)
{
# Launch the search
$sr=ldap_search($ds, $LDAP_ROOT_DN, $searchfilter, $ldap_attribues, 0, $LDAP_SIZELIMIT, $LDAP_TIMELIMIT);
# Search is successful
if($sr)
{
# Retrieve dialplan configuration
$dialplan=$system['Dialplan'];
# Convert comma/semicolon/whitespace separated list into array
$dialplan['local']=preg_split('/,|;|\s/',$system['Dialplan']['local']);
# Retrieve results
$entries=ldap_get_entries($ds, $sr);
$j=0;
# Process each answer
for ($i=0; $i<$entries['count']; $i++)
{
# Retrieve phone numbers
$office =$entries[$i][$LDAP_PHONE_ATTRIBUTE][0];
$mobile =$entries[$i][$LDAP_MOBILE_ATTRIBUTE][0];
$home =$entries[$i][$LDAP_HOMEPHONE_ATTRIBUTE][0];
# Keep entries that contain at least one phone number (office, mobile, home). Number must have at least one digit.
if (preg_match("/[0-9]+/",$office) or preg_match("/[0-9]+/",$mobile) or preg_match("/[0-9]+/",$home))
{
$result_array[$j]['office'] = $office;
$result_array[$j]['officeDigits'] = prepare_number($office,$dialplan);
$result_array[$j]['mobile'] = $mobile;
$result_array[$j]['mobileDigits'] = prepare_number($mobile,$dialplan);
$result_array[$j]['home'] = $home;
$result_array[$j]['homeDigits'] = prepare_number($home,$dialplan);
if (empty($entries[$i]["sn"][0])) $result_array[$j]['name'] = $entries[$i]["cn"][0];
else
{
$result_array[$j]['name'] = $entries[$i]["sn"][0];
$result_array[$j]['firstname'] = $entries[$i]["givenname"][0];
}
$result_array[$j]['title'] = $entries[$i]["title"][0];
$result_array[$j]['department'] = $entries[$i]["department"][0];
$result_array[$j]['company'] = $entries[$i]["company"][0];
$j++;
}
}
# Close LDAP connection
ldap_close($ds);
# Return results
return empty($result_array) ? NULL : $result_array;
}
else
{
# Close LDAP connection
ldap_close($ds);
# Display error message
display_message(Aastra_get_label('Server error',$LANGUAGE),Aastra_get_label('Cannot send query to LDAP Server. Please contact your administrator.',$LANGUAGE));
exit;
}
}
else
{
# Close LDAP connection
ldap_close($ds);
# Display error message
display_message(Aastra_get_label('Server error',$LANGUAGE),Aastra_get_label('Cannot bind to LDAP Server. Please contact your administrator.',$LANGUAGE));
exit;
}
}
else
{
# Display error message
display_message(Aastra_get_label('Server error',$LANGUAGE),Aastra_get_label('Cannot connect to LDAP Server. Please contact your administrator.',$LANGUAGE));
exit;
}
}
#############################################################################
# prepare_number(input,dialplan)
#
# Convert number string found in directory into a dial-able number
#
# Parameters
# @input phone number as found in directory
# @dialplan dialplan configuration
#
# Returns
# Dialable number
#############################################################################
function prepare_number($input,$dialplan)
{
# Returns the same by default
$output=$input;
# Remove spaces
$output=str_replace(' ','',$output);
# Remove dashes
$output=str_replace('-','',$output);
# Remove (0)
$output=str_replace('(0)','',$output);
# Remove ( and )
$output=str_replace('(','',$output);
$output=str_replace(')','',$output);
# Convert international numbers from own country into national format (replace +<countrycode> by long distance prefix)
$output=str_replace('+'.$dialplan['countrycode'], $dialplan['longdistance'],$output);
# Replace '+' sign with international prefix
$output=str_replace('+',$dialplan['international'],$output);
# Check length of number. If equal or less than $LOCAL_NUMBER_MAX_LENGTH, treat number as local
if (strlen($output) <= $dialplan['localextlen']) return $output;
# Check local number prefixes
foreach ($dialplan['local'] as $local_prefix)
{
if (empty($local_prefix)) continue;
if (!(strpos($output,$local_prefix) === false))
{
# remove prefix and mark number as local
$output=str_replace($local_prefix,'',$output);
return $output;
}
}
# Add outgoing prefix
$output=$dialplan['outgoing'].$output;
# Return number
return $output;
}
#############################################################################
# display_message($title,$message)
#
# Send message to the phone
#
# Parameters
# @title Title of the message
# @message Body of the message
#############################################################################
function display_message($title,$message,$backURL=NULL)
{
global $LANGUAGE;
$nb_softkeys=Aastra_number_physical_softkeys_supported();
$is_toptitle_supported=Aastra_is_top_title_supported();
# Depending on phone type
if(($nb_softkeys==4) || ($nb_softkeys==6))
{
# non 6739i
require_once('AastraIPPhoneTextScreen.class.php');
$text = new AastraIPPhoneTextScreen();
$text->setDestroyOnExit();
if($is_toptitle_supported) $text->setTopTitle($title);
else $text->setTitle($title);
$text->setText($message);
if($nb_softkeys)
{
$text->addSoftkey($nb_softkeys-1, Aastra_get_label('Back',$LANGUAGE), $backURL);
$text->addSoftkey($nb_softkeys, Aastra_get_label('Exit',$LANGUAGE), 'SoftKey:Exit');
}
$text->setCancelAction($backURL);
$text->output();
}
else
{
# 6739i/BluStar
require_once('AastraIPPhoneFormattedTextScreen.class.php');
$text = new AastraIPPhoneFormattedTextScreen();
$text->setDestroyOnExit();
$text->addLine('','double','center');
$text->addLine($title,'double','center','red');
$text->setScrollStart('3');
$text->addLine('');
$text->addLine('');
$text->addLine($message,NULL,'center');
$text->setScrollEnd();
$text->addLine('',NULL,'center');
$text->addSoftkey('9', Aastra_get_label('Back',$LANGUAGE),$backURL,1);
$text->addSoftkey('10', Aastra_get_label('Exit',$LANGUAGE),'SoftKey:Exit',2);
$text->addIcon(1,'Icon:ArrowLeft');
$text->addIcon(2,'Icon:CircleRed');
$text->setCancelAction($backURL);
$text->output();
}
}
#############################################################################
# WARNINGErrorHandler($code, $string, $file, $line)
#
# Called by error handler in case of WARNINGs
#
#############################################################################
function WARNINGErrorHandler($code, $string, $file, $line)
{
global $LANGUAGE, $XML_SERVER;
if (preg_match("/Sizelimit exceeded/i",$string)) display_message(Aastra_get_label('LDAP Error',$LANGUAGE),Aastra_get_label('Result size limit exceeded. Provide more letters.',$LANGUAGE),$XML_SERVER);
else display_message(Aastra_get_label('Application error',$LANGUAGE),Aastra_get_label('Error Message',$LANGUAGE).": ".$string, $XML_SERVER);
exit;
}
#############################################################################
# Main code
#############################################################################
# Collect parameters
$action =trim(Aastra_getvar_safe('action'));
$lookup =trim(Aastra_getvar_safe('lookup'));
$lastname =trim(Aastra_getvar_safe('lastname'));
$firstname =trim(Aastra_getvar_safe('firstname'));
# Set custom error handler for E_WARNING errors in order to catch LDAP errors
set_error_handler('WARNINGErrorHandler', E_WARNING);
# Log call to the application
Aastra_trace_call('LDAP directory','action='.$action.', lookup='.$lookup.', lastname='.$lastname.', firstname='.$firstname);
# Test Phone
Aastra_test_phone_version('2.3.0.',0);
# Get Language
$LANGUAGE=Aastra_get_language();
# Global compatibility
$nb_softkeys=Aastra_number_physical_softkeys_supported();
$is_toptitle_supported=Aastra_is_top_title_supported();
# If no search string was provided, don't perfom search
if(empty($lookup) && empty($lastname) && empty($firstname)) $action='start';
# Process action
switch($action)
{
# Search
case 'search':
# Make the LDAP query
$result=query_ldap($lookup,$firstname,$lastname);
$hits=count($result);
# How many matches
if ($hits==0)
{
# No match
display_message(Aastra_get_label('No match found',$LANGUAGE),Aastra_get_label('Please modify your search.',$LANGUAGE),$XML_SERVER.'?lastname='.$lastname.'&firstname='.$firstname.'&lookup='.$lookup);
exit;
}
else
{
# Display Results
require_once('AastraIPPhoneScrollableDirectory.class.php');
$object = new AastraIPPhoneScrollableDirectory();
if($hits==1) $object->setTitle(Aastra_get_label('One Match',$LANGUAGE));
else $object->setTitle(sprintf(Aastra_get_label('%s Matches',$LANGUAGE),$hits));
$object->setBackURI($XML_SERVER.'?lastname='.$lastname.'&firstname='.$firstname.'&lookup='.$lookup);
if(Aastra_number_softkeys_supported()==10) $object->setBackKeyPosition(9);
$object->setEntries($result);
if (empty($lookup) && !empty($firstname)) $object->natsortByFirstname();
else $object->natsortByLastname();
}
break;
# INIT
case 'start':
default:
# Depending on the phone
if(Aastra_is_multipleinputfields_supported())
{
# Multiple fields supported
require_once('AastraIPPhoneInputScreen.class.php');
$object = new AastraIPPhoneInputScreen();
if($is_toptitle_supported) $object->setTopTitle(Aastra_get_label('Directory Lookup',$LANGUAGE));
else $object->setTitle(Aastra_get_label('Directory Lookup',$LANGUAGE));
$object->setDisplayMode('condensed');
$object->setURL($XML_SERVER.'?action=search');
$object->setDestroyOnExit();
if(!empty($lookup)) $object->setDefaultIndex('4');
else
{
if (!empty($lastname)) $object->setDefaultIndex('2');
else if (!empty($firstname))$object->setDefaultIndex('3');
}
# Fields
$object->addField('empty');
$object->addField('string');
$object->setFieldPrompt(Aastra_get_label('Last Name:',$LANGUAGE));
$object->setFieldParameter('lastname');
$object->setFieldDefault($lastname);
$object->addField('string');
$object->setFieldPrompt(Aastra_get_label('First Name:',$LANGUAGE));
$object->setFieldParameter('firstname');
$object->setFieldDefault($firstname);
$object->addField('string');
$object->setFieldPrompt(Aastra_get_label('Or Anywhere:',$LANGUAGE));
$object->setFieldParameter('lookup');
$object->setFieldDefault($lookup);
}
else
{
# Single field
require_once('AastraIPPhoneInputScreen.class.php');
$object = new AastraIPPhoneInputScreen();
$object->setTitle(Aastra_get_label('Directory Lookup',$LANGUAGE));
$object->setPrompt(Aastra_get_label('Last/Firstname?',$LANGUAGE));
$object->setParameter('lookup');
$object->setType('string');
$object->setURL($XML_SERVER.'?action=search');
$object->setDestroyOnExit();
$object->setDefault($lookup);
}
# Softkeys
if($nb_softkeys!=0)
{
# Depending on phone type
if($nb_softkeys==4)
{
$object->addSoftkey('1', Aastra_get_label('Lookup',$LANGUAGE), 'SoftKey:Submit');
$object->addSoftkey('2', Aastra_get_label('Backspace',$LANGUAGE), 'SoftKey:BackSpace');
$object->addSoftkey('3', 'ABC', 'SoftKey:ChangeMode');
$object->addSoftkey('4', Aastra_get_label('Reset',$LANGUAGE), $XML_SERVER);
$object->addSoftkey('6', Aastra_get_label('Exit',$LANGUAGE), 'SoftKey:Exit');
}
else if($nb_softkeys==6)
{
$object->addSoftkey('1', Aastra_get_label('Lookup',$LANGUAGE), 'SoftKey:Submit');
$object->addSoftkey('3', 'ABC', 'SoftKey:ChangeMode');
$object->addSoftkey('4', Aastra_get_label('Backspace',$LANGUAGE), 'SoftKey:BackSpace');
$object->addSoftkey('5', Aastra_get_label('Reset',$LANGUAGE), $XML_SERVER);
$object->addSoftkey('6', Aastra_get_label('Exit',$LANGUAGE), 'SoftKey:Exit');
}
else
{
$object->addSoftkey('8', Aastra_get_label('Lookup',$LANGUAGE), 'SoftKey:Submit',1);
$object->addSoftkey('5', Aastra_get_label('Reset',$LANGUAGE), $XML_SERVER, 3);
$object->addSoftkey('10', Aastra_get_label('Exit',$LANGUAGE), 'SoftKey:Exit',2);
$object->addIcon(1,'Icon:Search');
$object->addIcon(2,'Icon:CircleRed');
$object->addIcon(3,'Icon:Delete');
}
}
break;
}
# Display XML object
$object->output();
exit;
?>

1
ldap_directory/include Symbolic link
View File

@ -0,0 +1 @@
../php_classes

5574
ldap_directory/language.ini Normal file

File diff suppressed because it is too large Load Diff

1433
php_classes/AastraCommon.php Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +1,58 @@
<?php
###################################################################################################
# Aastra XML API Classes - AastraIPPhone
# Copyright Aastra Telecom 2007
# Copyright Mitel Networks 2005-2015
#
# AastraIPPhone is the root class for all the Aastra XML objects.
#
# Public methods
# setTitle(Title) to setup the title of an object (optional)
# setTitle(Title,color) to setup the title of an object (optional)
# @title string
# @color string, "red", "blue", ... (optional)
# setTitleWrap() to set the title to be wrapped on 2 lines (optional)
# setTopTitle(title,color,icon_index) to set the Top Title of the XML screen
# @title string
# @color string, "red", "blue", ... (optional)
# @icon_index integer, icon number
# setBackgroundColor(color) to change the XML object background color (optional)
# @color string, "red", "blue", ...
# setCancelAction(uri) to set the cancel parameter with the URI to be called on Cancel (optional)
# @uri string
# setDestroyOnExit() to set DestroyonExit parameter to 'yes', 'no' by default (optional)
# setBeep() to enable a notification beep with the object (optional)
# setLockIn() to set the Lock-in tag to 'yes' (optional)
# setAllowAnswer() to set the allowAnswer tag to 'yes' (optional)
# setLockIn(uri) to set the Lock-in tag to 'yes' and the GoodbyeLockInURI(optional)
# @uri string, GoodByeLockInURI
# setLockInCall() to set the Lock-in tag to 'call' (optional)
# setCallProtection(notif) to protect the XML object against incoming calls
# @notif to enable/disable (false by default) the display of an incoming call notification (optional)
# setAllowAnswer() to set the allowAnswer tag to 'yes' (optional only for non softkey phones)
# setAllowDrop() to set the allowDrop tag to 'yes' (optional only for non softkey phones)
# setAllowXfer() to set the allowXfer tag to 'yes' (optional only for non softkey phones)
# setAllowConf() to set the allowConf tag to 'yes' (optional only for non softkey phones)
# setTimeout(timeout) to define a specific timeout for the XML object (optional)
# addSoftkey(index,label,uri,icon_index) to add custom soktkeys to the object (optional)
# @timeout integer (seconds)
# addSoftkey(index,label,uri,icon_index,color) to add custom soktkeys to the object (optional)
# @index integer, softkey number
# @label string
# @uri string
# @icon_index integer, icon number
# @color string, "red", "blue", ... (optional)
# setRefresh(timeout,URL) to add Refresh parameters to the object (optional)
# @timeout integer (seconds)
# @URL string
# setEncodingUTF8() to change encoding from default ISO-8859-1 to UTF-8 (optional)
# addIcon(index,icon) to add custom icons to the object (optional)
# generate() to return the object content
# output() to display the object
#
# @index integer, icon index
# @icon string, icon name or definition
# generate() to return the generated XML for the object
# output(flush) to display the object
# @flush boolean optional, output buffer to be flushed out or not.
###################################################################################################
###################################################################################################
# Includes
###################################################################################################
require_once('AastraIPPhone.php');
require_once('AastraIPPhoneSoftkeyEntry.class.php');
require_once('AastraIPPhoneIconEntry.class.php');
@ -31,17 +62,28 @@ class AastraIPPhone {
var $_icons;
var $_title='';
var $_title_wrap='';
var $_title_color='';
var $_destroyOnExit='';
var $_cancelAction='';
var $_refreshTimeout=0;
var $_refreshURL='';
var $_beep='';
var $_beep='';
var $_lockin='';
var $_callprotection='';
var $_timeout=0;
var $_allowAnswer='';
var $_allowDrop='';
var $_allowXfer='';
var $_allowConf='';
var $_background_color='';
var $_toptitle='';
var $_toptitle_icon='';
var $_toptitle_color='';
var $_encoding='ISO-8859-1';
function AastraIPPhone()
{
# Variables for the XML object
$this->_entries = array();
$this->_softkeys = array();
$this->_icons = array();
@ -49,20 +91,42 @@ class AastraIPPhone {
$this->_destroyOnExit='';
$this->_refreshTimeout=0;
$this->_refreshURL='';
$this->_beep='';
$this->_beep='';
$this->_lockin='';
$this->_lockin_uri='';
$this->_timeout=0;
$this->_allowAnswer='';
$this->_allowDrop='';
$this->_allowXfer='';
$this->_allowConf='';
}
function setTitle($title)
function setEncodingUTF8()
{
$this->_encoding = 'UTF-8';
}
function setBackgroundColor($color)
{
$this->_background_color = $color;
}
function setTitle($title,$color='')
{
$this->_title = $title;
$this->_title_color = $color;
}
function setTopTitle($title,$color='',$icon='')
{
$this->_toptitle = $title;
$this->_toptitle_color = $color;
$this->_toptitle_icon = $icon;
}
function setTitleWrap()
{
$this->_title_wrap = "yes";
$this->_title_wrap = 'yes';
}
function setRefresh($timeout,$URL)
@ -87,9 +151,24 @@ class AastraIPPhone {
}
function setLockIn()
function setLockIn($uri='')
{
$this->_lockin='yes';
$this->_lockin_uri=$uri;
}
function setLockInCall()
{
$this->_lockin='call';
}
function setCallProtection($notif=False)
{
if($notif==True) {
$this->_callprotection='notif';
} else {
$this->_callprotection='yes';
}
}
function setTimeout($timeout)
@ -102,39 +181,122 @@ class AastraIPPhone {
$this->_allowAnswer='yes';
}
function output()
function setAllowDrop()
{
header("Content-type: text/xml");
$this->_allowDrop='yes';
}
function setAllowXfer()
{
$this->_allowXfer='yes';
}
function setAllowConf()
{
$this->_allowConf='yes';
}
function output($flush=False)
{
header("Content-Type: text/xml; charset=".$this->_encoding);
if (($this->_refreshTimeout!=0) and ($this->_refreshURL!='')) header("Refresh: ".$this->_refreshTimeout."; url=".$this->_refreshURL);
$output=$this->render();
header("Content-Length: ".strlen($output));
$output="<?xml version=\"1.0\" encoding=\"".$this->_encoding."\"?>\n";
$output.=$this->render();
header('Content-Length: '.strlen($output));
echo($output);
if($flush)
{
ob_flush();
flush();
}
}
function generate()
{
$output=$this->render();
return($output);
return($this->render());
}
function addSoftkey($index, $label, $uri, $icon=NULL)
function addSoftkey($index, $label, $uri, $icon=NULL, $color='')
{
$this->_softkeys[] = new AastraIPPhoneSoftkeyEntry($index, $this->escape($label), $this->escape($uri), $icon);
if(!Aastra_is_icons_supported()) $icon=NULL;
if(($index>=1) and ($index<=Aastra_number_softkeys_supported())) $this->_softkeys[$index] = new AastraIPPhoneSoftkeyEntry($index, $this->escape($label), $this->escape($uri), $icon, $color);
$this->_softkeys[$index] = new AastraIPPhoneSoftkeyEntry($index, $this->escape($label), $this->escape($uri), $icon, $color);
}
function addIcon($index, $icon)
{
$this->_icons[] = new AastraIPPhoneIconEntry($index, $icon);
# if(Aastra_is_icons_supported()) $this->_icons[$index] = new AastraIPPhoneIconEntry($index, $icon);
$this->_icons[$index] = new AastraIPPhoneIconEntry($index, $icon);
}
function escape($string)
{
return(str_replace(
array('<', '>', '&'),
array('&lt;', '&gt;', '&amp;'),
$string
));
return(str_replace(
array('&', '<', '>', '"', "'"),
array('&amp;', '&lt;', '&gt;', '&quot;', '&apos;'),
$string
));
}
function convert_high_ascii($s)
{
$HighASCII = array(
"!\xc0!" => 'A', # A`
"!\xe0!" => 'a', # a`
"!\xc1!" => 'A', # A'
"!\xe1!" => 'a', # a'
"!\xc2!" => 'A', # A^
"!\xe2!" => 'a', # a^
"!\xc4!" => 'Ae', # A:
"!\xe4!" => 'ae', # a:
"!\xc3!" => 'A', # A~
"!\xe3!" => 'a', # a~
"!\xc8!" => 'E', # E`
"!\xe8!" => 'e', # e`
"!\xc9!" => 'E', # E'
"!\xe9!" => 'e', # e'
"!\xca!" => 'E', # E^
"!\xea!" => 'e', # e^
"!\xcb!" => 'Ee', # E:
"!\xeb!" => 'ee', # e:
"!\xcc!" => 'I', # I`
"!\xec!" => 'i', # i`
"!\xcd!" => 'I', # I'
"!\xed!" => 'i', # i'
"!\xce!" => 'I', # I^
"!\xee!" => 'i', # i^
"!\xcf!" => 'Ie', # I:
"!\xef!" => 'ie', # i:
"!\xd2!" => 'O', # O`
"!\xf2!" => 'o', # o`
"!\xd3!" => 'O', # O'
"!\xf3!" => 'o', # o'
"!\xd4!" => 'O', # O^
"!\xf4!" => 'o', # o^
"!\xd6!" => 'Oe', # O:
"!\xf6!" => 'oe', # o:
"!\xd5!" => 'O', # O~
"!\xf5!" => 'o', # o~
"!\xd8!" => 'Oe', # O/
"!\xf8!" => 'oe', # o/
"!\xd9!" => 'U', # U`
"!\xf9!" => 'u', # u`
"!\xda!" => 'U', # U'
"!\xfa!" => 'u', # u'
"!\xdb!" => 'U', # U^
"!\xfb!" => 'u', # u^
"!\xdc!" => 'Ue', # U:
"!\xfc!" => 'ue', # u:
"!\xc7!" => 'C', # ,C
"!\xe7!" => 'c', # ,c
"!\xd1!" => 'N', # N~
"!\xf1!" => 'n', # n~
"!\xdf!" => 'ss'
);
$find = array_keys($HighASCII);
$replace = array_values($HighASCII);
$s = preg_replace($find,$replace,$s);
return $s;
}
}
?>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,213 @@
<?php
########################################################################################################
# Aastra XML API Classes - AastraIPPhoneCallLog
# Copyright Mitel Networks 2005-2015
#
# AastraIPPhoneCallLog object.
#
# Public methods
#
# Inherited from AastraIPPhone
# setTopTitle(title,color,icon_index) to set the Top Title of the XML screen (6739i only)
# @title string
# @color string, "red", "blue", ... (optional)
# @icon_index integer, icon number
# setCancelAction(uri) to set the cancel parameter with the URI to be called on Cancel (optional)
# @uri string
# setDestroyOnExit() to set DestroyonExit parameter to 'yes', 'no' by default (optional)
# setBeep() to enable a notification beep with the object (optional)
# setLockIn(uri) to set the Lock-in tag to 'yes' and the GoodbyeLockInURI(optional)
# @uri string, GoodByeLockInURI
# setAllowAnswer() to set the allowAnswer tag to 'yes' (optional only for non softkey phones)
# setAllowDrop() to set the allowDrop tag to 'yes' (optional only for non softkey phones)
# setAllowXfer() to set the allowXfer tag to 'yes' (optional only for non softkey phones)
# setAllowConf() to set the allowConf tag to 'yes' (optional only for non softkey phones)
# setTimeout(timeout) to define a specific timeout for the XML object (optional)
# @timeout integer (seconds)
# setRefresh(timeout,URL) to add Refresh parameters to the object (optional)
# @timeout integer (seconds)
# @URL string
# setEncodingUTF8() to change encoding from default ISO-8859-1 to UTF-8 (optional)
# addIcon(index,icon) to add custom icons to the object (optional)
# @index integer, icon index
# @icon string, icon name or definition
# generate() to return the generated XML for the object
# output(flush) to display the object
# @flush boolean optional, output buffer to be flushed out or not.
#
# Specific to the object
# addEntry(name,number,date,time,selection,duration,type,terminal,count,line)
# @name string (optional)
# @number string
# @date string MM-DD-YYYY
# @time string HH:MM (military time)
# @selection string (optional)
# @duration integer call duration in seconds (optional)
# @type string call type (incoming/outgoung/missed) (optional)
# @terminal string terminal type (office/mobile/home) (optional)
# @count integer number of calls (optional)
# @line integer line used (1-9) (optional)
# setScrollConstrain() to avoid the list to wrap
# setScrollUp(uri) to set the URI to be called when the user presses the Up arrow (optional)
# @uri string
# setScrollDown(uri) to set the URI to be called when the user presses the Down arrow (optional)
# @uri string
# setDeleteUri(uri) to configure the uri called by the "Delete" button (optional)
# @uri string
# setDeleteAllUri(uri) to configure the uri called by the "Delete ALL" button (optional)
# @uri string
# setDialUri(uri) to configure the uri called by the "Dial" button (optional)
# @uri string
# setAddUri(uri) to configure the uri called by the "Add to directory" button(optional)
# @uri string
#
# Example
#
########################################################################################################
require_once('AastraIPPhone.class.php');
require_once('AastraIPPhoneCallLogEntry.class.php');
class AastraIPPhoneCallLog extends AastraIPPhone {
var $_maxitems='50';
var $_scrollConstrain='';
var $_scrollUp='';
var $_scrollDown='';
var $_delete='';
var $_deleteAll='';
var $_dial='';
var $_add='';
function addEntry($name, $number, $date, $time, $selection, $duration, $type, $terminal, $count='', $line='')
{
$this->_entries[] = new AastraIPPhoneCallLogEntry($name, $number, $date, $time, $selection, $duration, $type, $terminal, $count, $line);
}
function setScrollConstrain()
{
$this->_scrollConstrain = 'yes';
}
function setScrollUp($uri)
{
$this->_scrollUp = $uri;
}
function setScrollDown($uri)
{
$this->_scrollDown = $uri;
}
function setDeleteUri($uri)
{
$this->_delete = $uri;
}
function setDeleteAllUri($uri)
{
$this->_deleteAll = $uri;
}
function setDialUri($uri)
{
$this->_dial = $uri;
}
function setAddUri($uri)
{
$this->_add = $uri;
}
function render()
{
# Beginning of root tag
$out = "<AastraIPPhoneCallLog";
# DestroyOnExit
if ($this->_destroyOnExit=='yes') $out .= " destroyOnExit=\"yes\"";
# CancelAction
if($this->_cancelAction != "") {
$cancelAction = $this->escape($this->_cancelAction);
$out .= " cancelAction=\"{$cancelAction}\"";
}
# Beep
if ($this->_beep=='yes') $out .= " Beep=\"yes\"";
# Lockin
if($this->_lockin!='') {
$out .= " LockIn=\"{$this->_lockin}\"";
if($this->_lockin_uri!='') $out .= " GoodbyeLockInURI=\"".$this->escape($this->_lockin_uri)."\"";
}
# AllowAnswer
if ($this->_allowAnswer == 'yes') $out .= " allowAnswer=\"yes\"";
# AllowDrop
if ($this->_allowDrop == 'yes') $out .= " allowDrop=\"yes\"";
# AllowXfer
if ($this->_allowXfer == 'yes') $out .= " allowXfer=\"yes\"";
# AllowConf
if ($this->_allowConf == 'yes') $out .= " allowConf=\"yes\"";
# Timeout
if ($this->_timeout!=0) $out .= " Timeout=\"{$this->_timeout}\"";
# Prevent list wrap
if ($this->_scrollConstrain == 'yes') $out .= " scrollConstrain=\"yes\"";
# Scrolls up/down
if($this->_scrollUp!='') $out .= " scrollUp=\"".$this->escape($this->_scrollUp)."\"";
if($this->_scrollDown!='') $out .= " scrollDown=\"".$this->escape($this->_scrollDown)."\"";
# Misc uris
if($this->_delete!='') $out .= " deleteUri=\"".$this->escape($this->_delete)."\"";
if($this->_deleteAll!='') $out .= " deleteAllUri=\"".$this->escape($this->_deleteAll)."\"";
if($this->_dial!='') $out .= " dialUri=\"".$this->escape($this->_dial)."\"";
if($this->_add!='') $out .= " addUri=\"".$this->escape($this->_add)."\"";
# End of root tag
$out .= ">\n";
# Top Title
if ($this->_toptitle!='') {
$toptitle = $this->escape($this->_toptitle);
$out .= "<TopTitle";
if ($this->_toptitle_icon!='') $out .= " icon=\"{$this->_toptitle_icon}\"";
if ($this->_toptitle_color!='') $out .= " Color=\"{$this->_toptitle_color}\"";
$out .= ">".$toptitle."</TopTitle>\n";
}
# Menu items
if (isset($this->_entries) && is_array($this->_entries)) {
$index=0;
foreach ($this->_entries as $entry) {
if($index<$this->_maxitems) $out .= $entry->render($this->_style,$length,$is_softkeys);
$index++;
}
}
# Icons
if (isset($this->_icons) && is_array($this->_icons)) {
$IconList=False;
foreach ($this->_icons as $icon) {
if(!$IconList) {
$out .= "<IconList>\n";
$IconList=True;
}
$out .= $icon->render();
}
if($IconList) $out .= "</IconList>\n";
}
# End Tag
$out .= "</AastraIPPhoneCallLog>\n";
# Return XML object
return($out);
}
}
?>

View File

@ -0,0 +1,83 @@
<?php
################################################################################
# Aastra XML API Classes - AastraIPPhoneCallLogEntry
# Copyright Mitel Networks 2005-2015
#
# Internal class for AastraIPPhoneCallLog object.
################################################################################
class AastraIPPhoneCallLogEntry extends AastraIPPhone {
var $_name;
var $_number;
var $_date;
var $_time;
var $_selection;
var $_duration;
var $_type;
var $_terminal;
var $_count;
var $_line;
function AastraIPPhoneCallLogEntry($name, $number, $date, $time, $selection, $duration, $type, $terminal, $count, $line)
{
$this->_name=$name;
$this->_number=$number;
$this->_date=$date;
$this->_time=$time;
$this->_selection=$selection;
$this->_duration=$duration;
$this->_type=$type;
$this->_terminal=$terminal;
$this->_count=$count;
$this->_line=$line;
}
function render()
{
# Opening
$xml = '<LogItem';
if($this->_duration!='') {
$temp = $this->escape($this->_duration);
$xml .= " duration=\"".$temp."\"";
}
if($this->_type!='') {
$temp = $this->escape($this->_type);
$xml .= " type=\"".$temp."\"";
}
if($this->_terminal!='') {
$temp = $this->escape($this->_terminal);
$xml .= " callingTerminal=\"".$temp."\"";
}
if($this->_count!='') {
$temp = $this->escape($this->_count);
$xml .= " count=\"".$temp."\"";
}
if($this->_line!='') {
$temp = $this->escape($this->_line);
$xml .= " line=\"".$temp."\"";
}
$xml .= ">\n";
# Fiedls
$temp = $this->escape($this->_name);
$xml .= "<Name>{$temp}</Name>\n";
$temp = $this->escape($this->_number);
$xml .= "<Number>{$temp}</Number>\n";
$temp = $this->escape($this->_date);
$xml .= "<Date>{$temp}</Date>\n";
$temp = $this->escape($this->_time);
$xml .= "<Time>{$temp}</Time>\n";
if($this->_selection!='') {
$temp = $this->escape($this->_selection);
$xml .= "<Selection>{$temp}</Selection>\n";
}
# Close
$xml .= "</LogItem>\n";
# Return generated vaue
return($xml);
}
}
?>

View File

@ -1,20 +1,26 @@
<?php
########################################################################################################
# Aastra XML API Classes - AastraIPPhoneConfiguration
# Copyright Aastra Telecom 2007
# Copyright Mitel Networks 2005-2015
#
# AastraIPPhoneConfiguration object.
#
# Public methods
#
# Inherited from AastraIPPhone
# output() to display the object
# generate() to return the object content
# setBeep() to enable a notification beep with the object (optional)
# setEncodingUTF8() to change encoding from default ISO-8859-1 to UTF-8 (optional)
# generate() to return the generated XML for the object
# output(flush) to display the object
# @flush boolean optional, output buffer to be flushed out or not.
#
# Specific to the object
# addEntry(parameter,value) to add a configuration change.
# setType(type) to set the type of configuration object (optional)
# @type string, configuration change type
# addEntry(parameter,value,type) to add a configuration change
# @parameter string, parameter name
# @value string, parameter value
# @type string, conmfiguration change type (optional)
# setTriggerDestroyOnExit() to set the triggerDestroyOnExit tag to
# "yes" (optional)
#
@ -33,10 +39,12 @@ require_once('AastraIPPhone.class.php');
require_once('AastraIPPhoneConfigurationEntry.class.php');
class AastraIPPhoneConfiguration extends AastraIPPhone {
var $_type='';
var $_triggerDestroyOnExit='';
function addEntry($parameter, $value)
function addEntry($parameter, $value, $type='')
{
$this->_entries[] = new AastraIPPhoneConfigurationEntry($parameter, $value);
$this->_entries[] = new AastraIPPhoneConfigurationEntry($parameter, $value, $type);
}
function setTriggerDestroyOnExit()
@ -44,15 +52,39 @@ class AastraIPPhoneConfiguration extends AastraIPPhone {
$this->_triggerDestroyOnExit="yes";
}
function setType($type)
{
$this->_type=$type;
}
function render()
{
# Beginning of root tag
$out = "<AastraIPPhoneConfiguration";
# Beep
if($this->_beep=='yes') $out .= " Beep=\"yes\"";
# TriggerDestroyOnExit
if($this->_triggerDestroyOnExit=='yes') $out .= " triggerDestroyOnExit=\"yes\"";
# Type
if($this->_type!='') $out .= " setType=\"{$this->_type}\"";
# End of root tag
$out .= ">\n";
foreach ($this->_entries as $entry) $out .= $entry->render();
# Configuration Items
if (isset($this->_entries) && is_array($this->_entries))
{
foreach ($this->_entries as $entry) $out .= $entry->render();
}
# End tag
$out .= "</AastraIPPhoneConfiguration>\n";
# Return XML object
return($out);
}
}
?>
?>

View File

@ -1,8 +1,8 @@
<?php
################################################################################
# Aastra XML API Classes - AastraIPPhoneConfigurationEntry
# Copyright Aastra Telecom 2007
# Firmware 2.0 or better
# Copyright Mitel Networks 2005-2015
#
# Internal class for AastraIPPhoneConfiguration object.
################################################################################
@ -10,11 +10,13 @@
class AastraIPPhoneConfigurationEntry extends AastraIPPhone {
var $_parameter;
var $_value;
var $_type;
function AastraIPPhoneConfigurationEntry($parameter, $value)
function AastraIPPhoneConfigurationEntry($parameter, $value, $type)
{
$this->setParameter($parameter);
$this->setValue($value);
$this->setType($type);
}
function setParameter($parameter)
@ -27,15 +29,24 @@ class AastraIPPhoneConfigurationEntry extends AastraIPPhone {
$this->_value = $value;
}
function setType($type)
{
$this->_type = $type;
}
function render()
{
$parameter = $this->escape($this->_parameter);
$value = $this->escape($this->_value);
$xml = "<ConfigurationItem>\n";
$type = $this->escape($this->_type);
$xml = "<ConfigurationItem";
if($type!='') $xml.=" setType=\"".$type."\"";
$xml .=">\n";
$xml .= "<Parameter>".$parameter."</Parameter>\n";
$xml .= "<Value>".$value."</Value>\n";
$xml .= "</ConfigurationItem>\n";
return($xml);
}
}
?>
?>

View File

@ -1,125 +0,0 @@
<?
########################################################################################################
# Aastra XML API Classes - AastraIPPhoneDirectory
# Copyright Aastra Telecom 2007
#
# AastraIPPhoneDirectory object.
#
# Public methods
#
# Inherited from AastraIPPhone
# setTitle(Title) to setup the title of an object (optional)
# setTitleWrap() to set the title to be wrapped on 2 lines (optional)
# setDestroyOnExit() to set DestroyonExit parameter to 'yes', 'no' by default (optional)
# setCancelAction(uri) to set the cancel parameter with the URI to be called on Cancel (optional)
# setBeep() to enable a notification beep with the object (optional)
# setLockIn() to set the Lock-in tag to 'yes' (optional)
# setTimeout(timeout) to define a specific timeout for the XML object (optional)
# addSoftkey(index,label,uri,icon_index) to add custom softkeys to the object (optional)
# addIcon(index,icon) to add custom icons to the object (optional)
# setRefresh(timeout,URL) to add Refresh parameters to the object (optional)
# generate() to return the object content
# output() to display the object
#
# Specific to the object
# setNext(next) to set URI of the next page (optional)
# setPrevious(previous) to set URI of the previous page (optional)
# addEntry(name,phone) to add an element in the list to be displayed, at least one is needed.
# natsortbyname() to order the list
#
# Example
# require_once('AastraIPPhoneDirectory.class.php');
# $directory = new AastraIPPhoneDirectory();
# $directory->setTitle('Title');
# $directory->setNext('http://myserver.com/script.php?page=2');
# $directory->setPrevious('http://myserver.com/script.php?page=0');
# $directory->setDestroyOnExit();
# $directory->addEntry('John Doe', '200');
# $directory->addEntry('Jane Doe', '201');
# $directory->natsortByName();
# $directory->addSoftkey('1', 'Label', 'http://myserver.com/script.php?action=1');
# $directory->addSoftkey('6', 'Exit', 'SoftKey:Exit');
# $directory->output();
#
########################################################################################################
require_once('AastraIPPhone.class.php');
require_once('AastraIPPhoneDirectoryEntry.class.php');
class AastraIPPhoneDirectory extends AastraIPPhone {
var $_next="";
var $_previous="";
function setNext($next)
{
$this->_next = $next;
}
function setPrevious($previous)
{
$this->_previous = $previous;
}
function addEntry($name, $telephone)
{
$this->_entries[] = new AastraIPPhoneDirectoryEntry($name, $telephone);
}
function natsortByName()
{
$tmpary = array();
foreach ($this->_entries as $id => $entry) {
$tmpary[$id] = $entry->getName();
}
natsort($tmpary);
foreach ($tmpary as $id => $name) {
$newele[] = $this->_entries[$id];
}
$this->_entries = $newele;
}
function render()
{
$out = '';
$out .= "<AastraIPPhoneDirectory";
if($this->_previous!="")
{
$previous = $this->escape($this->_previous);
$out .= " previous=\"$previous\"";
}
if($this->_next!="")
{
$next = $this->escape($this->_next);
$out .= " next=\"$next\"";
}
if($this->_destroyOnExit == 'yes') $out .= " destroyOnExit=\"yes\"";
if($this->_allowAnswer == 'yes') $out .= " allowAnswer=\"yes\"";
if($this->_cancelAction != "")
{
$cancelAction = $this->escape($this->_cancelAction);
$out .= " cancelAction=\"{$cancelAction}\"";
}
if($this->_beep=='yes') $out .= " Beep=\"yes\"";
if($this->_lockin=='yes') $out .= " LockIn=\"yes\"";
if($this->_timeout!=0) $out .= " Timeout=\"{$this->_timeout}\"";
$out .= ">\n";
if ($this->_title!='')
{
$title = $this->escape($this->_title);
$out .= "<Title";
if ($this->_title_wrap=='yes') $out .= " wrap=\"yes\"";
$out .= ">".$title."</Title>\n";
}
$index=0;
foreach ($this->_entries as $entry) {
if($index<15) $out .= $entry->render();
$index++;
}
foreach ($this->_softkeys as $softkey) $out .= $softkey->render();
$out .= "</AastraIPPhoneDirectory>\n";
return $out;
}
}
?>

View File

@ -1,33 +0,0 @@
<?php
########################################################################################################
# Aastra XML API Classes - AastraIPPhoneDirectoryEntry
# Copyright Aastra Telecom 2007
#
# Internal class for AastraIPPhoneDirectory object.
########################################################################################################
class AastraIPPhoneDirectoryEntry extends AastraIPPhone {
var $_name;
var $_telephone;
function AastraIPPhoneDirectoryEntry($name, $telephone)
{
$this->_name=$name;
$this->_telephone=$telephone;
}
function getName()
{
return($this->_name);
}
function render()
{
$name = $this->escape($this->_name);
$telephone = $this->escape($this->_telephone);
return("<MenuItem>\n<Prompt>{$name}</Prompt>\n<URI>{$telephone}</URI>\n</MenuItem>\n");
}
}
?>

View File

@ -1,21 +1,25 @@
<?php
########################################################################################################
# Aastra XML API Classes - AastraIPPhoneExecute
# Copyright Aastra Telecom 2007
# Copyright Mitel Networks 2005-2015
#
# AastraIPPhoneExecute object.
#
# Public methods
#
# Inherited from AastraIPPhone
# output() to display the object
# generate() to return the object content
# setBeep() to enable a notification beep with the object (optional)
# setEncodingUTF8() to change encoding from default ISO-8859-1 to UTF-8 (optional)
# generate() to return the generated XML for the object
# output(flush) to display the object
# @flush boolean optional, output buffer to be flushed out or not.
#
# Specific to the object
# setTriggerDestroyOnExit() to set the triggerDestroyOnExit tag to "yes" (optional)
# addEntry(url,interruptCall) to add an action to be executed.
# addEntry(url,interruptCall,title) to add an action to be executed.
# @url string
# @interruptCall string, optional, "yes" or "no"
# @title string, optional, title to be used in Wav.Play screen
#
# Example
# require_once('AastraIPPhoneExecute.class.php');
@ -30,29 +34,44 @@ require_once('AastraIPPhone.class.php');
require_once('AastraIPPhoneExecuteEntry.class.php');
class AastraIPPhoneExecute extends AastraIPPhone {
var $_defaultIndex="";
var $_triggerDestroyOnExit="";
var $_defaultIndex='';
var $_triggerDestroyOnExit='';
function addEntry($url,$interruptCall=NULL)
function addEntry($url,$interruptCall=NULL,$title='')
{
$this->_entries[] = new AastraIPPhoneExecuteEntry($url,$interruptCall);
$this->_entries[] = new AastraIPPhoneExecuteEntry($url,$interruptCall,$title);
}
function setTriggerDestroyOnExit()
{
$this->_triggerDestroyOnExit="yes";
$this->_triggerDestroyOnExit='yes';
}
function render()
{
$title = $this->escape($this->_title);
# Beginning of root tag
$out = "<AastraIPPhoneExecute";
# Beep
if($this->_beep=='yes') $out .= " Beep=\"yes\"";
# TriggerDestroyOnExit
if($this->_triggerDestroyOnExit=='yes') $out .= " triggerDestroyOnExit=\"yes\"";
# End of root tag
$out .= ">\n";
foreach ($this->_entries as $entry) $out .= $entry->render();
# Execute Items
if (isset($this->_entries) && is_array($this->_entries))
{
foreach ($this->_entries as $entry) $out .= $entry->render();
}
# End tag
$out .= "</AastraIPPhoneExecute>\n";
# Return XML object
return($out);
}
}
?>
?>

View File

@ -1,8 +1,8 @@
<?php
################################################################################
# Aastra XML API Classes - AastraIPPhoneExecuteEntry
# Copyright Aastra Telecom 2007
# Firmware 2.0 or better
# Copyright Mitel Networks 2005-2015
#
# Internal class for AastraIPPhoneExecute object.
################################################################################
@ -10,18 +10,22 @@
class AastraIPPhoneExecuteEntry extends AastraIPPhone {
var $_url;
var $_interruptCall;
var $_title;
function AastraIPPhoneExecuteEntry($url,$interruptCall)
function AastraIPPhoneExecuteEntry($url,$interruptCall,$title)
{
$this->_url = $url;
$this->_interruptCall = $interruptCall;
$this->_title = $title;
}
function render()
{
$url = $this->escape($this->_url);
$title = $this->escape($this->_title);
$xml = "<ExecuteItem URI=\"".$url."\"";
if ($this->_interruptCall=='no') $xml .= " interuptCall=\"no\"";
if ($this->_interruptCall=='no') $xml .= " interruptCall=\"no\"";
if ($this->_title!='') $xml .= " title=\"".$title."\"";
$xml .= "/>\n";
return($xml);
}

View File

@ -1,31 +1,83 @@
<?
<?php
########################################################################################################
# Aastra XML API Classes - AastraIPFormattedPhoneTextScreen
# Copyright Aastra Telecom 2007
# Copyright Mitel Networks 2005-2015
#
# AastraIPPhoneFormattedTextScreen object.
#
# Public methods
#
# Inherited from AastraIPPhone
# setDestroyOnExit() to set DestroyonExit parameter to 'yes', 'no' by default (optional)
# setTopTitle(title,color,icon_index) to set the Top Title of the XML screen (6739i only)
# @title string
# @color string, "red", "blue", ... (optional)
# @icon_index integer, icon number
# setCancelAction(uri) to set the cancel parameter with the URI to be called on Cancel (optional)
# @uri string
# setDestroyOnExit() to set DestroyonExit parameter to 'yes', 'no' by default (optional)
# setBeep() to enable a notification beep with the object (optional)
# setLockIn() to set the Lock-in tag to 'yes' (optional)
# setAllowAnswer() to set the allowAnswer tag to 'yes' (optional)
# setLockIn(uri) to set the Lock-in tag to 'yes' and the GoodbyeLockInURI(optional)
# @uri string, GoodByeLockInURI
# setLockInCall() to set the Lock-in tag to 'call' (optional)
# setCallProtection(notif) to protect the XML object against incoming calls
# @notif to enable/disable (false by default) the display of an incoming call notification (optional)
# setAllowAnswer() to set the allowAnswer tag to 'yes' (optional only for non softkey phones)
# setAllowDrop() to set the allowDrop tag to 'yes' (optional only for non softkey phones)
# setAllowXfer() to set the allowXfer tag to 'yes' (optional only for non softkey phones)
# setAllowConf() to set the allowConf tag to 'yes' (optional only for non softkey phones)
# setTimeout(timeout) to define a specific timeout for the XML object (optional)
# addSoftkey(index, label, uri) to add custom softkeys to the object (optional)
# addIcon(index,icon) to add custom icons to the object (optional)
# @timeout integer (seconds)
# setBackgroundColor(color) to change the XML object background color (optional)
# @color string, "red", "blue", ...
# addSoftkey(index,label,uri,icon_index) to add custom soktkeys to the object (optional)
# @index integer, softkey number
# @label string
# @uri string
# @icon_index integer, icon number
# setRefresh(timeout,URL) to add Refresh parameters to the object (optional)
# generate() to return the object content
# output() to display the object
# @timeout integer (seconds)
# @URL string
# setEncodingUTF8() to change encoding from default ISO-8859-1 to UTF-8 (optional)
# addIcon(index,icon) to add custom icons to the object (optional)
# @index integer, icon index
# @icon string, icon name or definition
# generate() to return the generated XML for the object
# output(flush) to display the object
# @flush boolean optional, output buffer to be flushed out or not.
#
# Specific to the object
# addLine(text,size,align) to add a formatted line
# addLine(text,size,align,color,wrap,blink) to add a formatted line
# @text string
# @size string, optional, "small", "double" or "large"
# @align string, optional, "left", "right" or "center"
# @color string, optional, "red", "black", ...
# @wrap boolean, optional, "yes", "no" (default)
# @blink string, optional, "slow", "fast" or "no" (default)
# addText(text,size,align,$color,wrap,blink) to add a formatted text as formatted lines
# @text string, can include carriage returns
# @size string, optional, "double"
# @align string, optional, "left", "right" or "center"
# @color string, optional, "red", "black", ...
# @wrap boolean, optional, "yes", "no" (default)
# @blink string, optional, "slow", "fast" or "no" (default)
# setScrollStart(height) to define the beginning of the scrolling section and its height
# @height integer
# setScrollEnd() to define the end of the scrolling section
# setAllowDTMF() to allow DTMF passthrough on the object
# setDoneAction(uri) to set the URI to be called when the user selects the default "Done" key (optional)
# @uri string
# setScrollUp(uri) to set the URI to be called when the user presses the Up arrow (optional)
# @uri string
# setScrollDown(uri) to set the URI to be called when the user presses the Down arrow (optional)
# @uri string
# setScrollLeft(uri) to set the URI to be called when the user presses the Left arrow (optional)
# @uri string
# setScrollRight(uri) to set the URI to be called when the user presses the Right arrow (optional)
# @uri string
# setNoFontMono() to allow the override of the monotype font with a proportional font (6867i. 6869i and 6873i only)
# setDial(number,line) to set the number to be dialed as well as the line to use when going off-hook or with the custom softkey Softkey::Dial2
# @number string
# @line integer (optional)
#
# Example
# require_once('AastraIPPhoneFormattedTextScreen.class.php');
@ -51,21 +103,35 @@ require_once('AastraIPPhone.class.php');
require_once('AastraIPPhoneFormattedTextScreenEntry.class.php');
class AastraIPPhoneFormattedTextScreen extends AastraIPPhone {
var $_doneAction="";
var $_doneAction='';
var $_allowDTMF='';
var $_scrollUp='';
var $_scrollDown='';
var $_scrollLeft='';
var $_scrollRight='';
var $_dialNumber='';
var $_dialLine='';
var $_fontMono='';
function addLine($text, $size=NULL, $align=NULL)
function addLine($text, $size=NULL, $align=NULL, $color=NULL, $wrap=NULL, $blink=NULL)
{
$this->_entries[] = new AastraIPPhoneFormattedTextScreenEntry($text, $size, $align, 'normal');
$this->_entries[] = new AastraIPPhoneFormattedTextScreenEntry($text, $size, $align, $color, $wrap, $blink, 'normal');
}
function addText($text, $size=NULL, $align=NULL, $color=NULL, $wrap=NULL, $blink=NULL)
{
$pieces=explode("\n",wordwrap($text,$this->_display_size,"\n",True));
foreach($pieces as $value) $this->_entries[] = new AastraIPPhoneFormattedTextScreenEntry($value, $size, $align, $color, $wrap, $blink, 'normal');
}
function setScrollStart($height)
{
$this->_entries[] = new AastraIPPhoneFormattedTextScreenEntry(NULL, $height, NULL, 'scrollstart');
$this->_entries[] = new AastraIPPhoneFormattedTextScreenEntry(NULL, $height, NULL, NULL, NULL, NULL, 'scrollstart');
}
function setScrollEnd()
{
$this->_entries[] = new AastraIPPhoneFormattedTextScreenEntry(NULL, NULL, NULL, 'scrollend');
$this->_entries[] = new AastraIPPhoneFormattedTextScreenEntry(NULL, NULL, NULL, NULL, NULL, NULL, 'scrollend');
}
function setDoneAction($uri)
@ -73,40 +139,162 @@ class AastraIPPhoneFormattedTextScreen extends AastraIPPhone {
$this->_doneAction = $uri;
}
function setAllowDTMF()
{
$this->_allowDTMF = 'yes';
}
function setScrollUp($uri)
{
$this->_scrollUp = $uri;
}
function setScrollDown($uri)
{
$this->_scrollDown = $uri;
}
function setScrollLeft($uri)
{
$this->_scrollLeft = $uri;
}
function setScrollRight($uri)
{
$this->_scrollRight = $uri;
}
function setDial($dialNumber,$dialLine='')
{
$this->_dialNumber = $dialNumber;
$this->_dialLine = $dialLine;
}
function setNoFontMono()
{
$this->_fontMono = 'no';
}
function render()
{
$out = '';
$out .= "<AastraIPPhoneFormattedTextScreen";
# Beginning of root tag
$out = "<AastraIPPhoneFormattedTextScreen";
# DestroyOnExit
if($this->_destroyOnExit == 'yes') $out .= " destroyOnExit=\"yes\"";
if($this->_cancelAction != "")
# CancelAction
if($this->_cancelAction != '')
{
$cancelAction = $this->escape($this->_cancelAction);
$out .= " cancelAction=\"{$cancelAction}\"";
}
if($this->_doneAction != "")
# DoneAction
if($this->_doneAction != '')
{
$doneAction = $this->escape($this->_doneAction);
$out .= " doneAction=\"{$doneAction}\"";
}
# Beep
if($this->_beep=='yes') $out .= " Beep=\"yes\"";
if($this->_lockin=='yes') $out .= " LockIn=\"yes\"";
# Lockin
if($this->_lockin!='') {
$out .= " LockIn=\"{$this->_lockin}\"";
if($this->_lockin_uri!='') $out .= " GoodbyeLockInURI=\"".$this->escape($this->_lockin_uri)."\"";
}
# Call Protection
if($this->_callprotection!='') {
$out .= " CallProtection=\"{$this->_callprotection}\"";
}
# AllowAnswer
if($this->_allowAnswer == 'yes') $out .= " allowAnswer=\"yes\"";
# AllowDrop
if($this->_allowDrop == 'yes') $out .= " allowDrop=\"yes\"";
# AllowXfer
if($this->_allowXfer == 'yes') $out .= " allowXfer=\"yes\"";
# AllowConf
if($this->_allowConf == 'yes') $out .= " allowConf=\"yes\"";
# TimeOut
if($this->_timeout!=0) $out .= " Timeout=\"{$this->_timeout}\"";
# Background color
if ($this->_background_color!='') $out .= " bgColor=\"{$this->_background_color}\"";
# AllowDTMF
if($this->_allowDTMF=='yes') $out .= " allowDTMF=\"yes\"";
# Scrolls up/down/left/right
if($this->_scrollUp!='') $out .= " scrollUp=\"".$this->escape($this->_scrollUp)."\"";
if($this->_scrollDown!='') $out .= " scrollDown=\"".$this->escape($this->_scrollDown)."\"";
if($this->_scrollLeft!='') $out .= " scrollLeft=\"".$this->escape($this->_scrollLeft)."\"";
if($this->_scrollRight!='') $out .= " scrollRight=\"".$this->escape($this->_scrollRight)."\"";
# Font Monotype
if ($this->_fontMono == 'no') $out .= " fontMono=\"no\"";
# End of Root tag
$out .= ">\n";
foreach ($this->_entries as $entry) $out .= $entry->render();
foreach ($this->_softkeys as $softkey) $out .= $softkey->render();
$IconList=0;
foreach ($this->_icons as $icon)
# Top Title
if ($this->_toptitle!='')
{
if($IconList==0)
{
$out .= "<IconList>\n";
$IconList=1;
}
$out .= $icon->render();
$toptitle = $this->escape($this->_toptitle);
$out .= "<TopTitle";
if ($this->_toptitle_icon!='') $out .= " icon=\"{$this->_toptitle_icon}\"";
if ($this->_toptitle_color!='') $out .= " Color=\"{$this->_toptitle_color}\"";
$out .= ">".$toptitle."</TopTitle>\n";
}
if($IconList!=0) $out .= "</IconList>\n";
# Lines
if (isset($this->_entries) && is_array($this->_entries))
{
foreach ($this->_entries as $entry) $out .= $entry->render();
}
# Dial
if ($this->_dialNumber!='')
{
$dialNumber = $this->escape($this->_dialNumber);
$out .= "<Dial";
if ($this->_dialLine!='') $out .= " line=\"{$this->_dialLine}\"";
$out .= ">".$dialNumber."</Dial>\n";
}
# Softkeys
if (isset($this->_softkeys) && is_array($this->_softkeys))
{
foreach ($this->_softkeys as $softkey) $out .= $softkey->render();
}
# Icons
if (isset($this->_icons) && is_array($this->_icons))
{
$IconList=False;
foreach ($this->_icons as $icon)
{
if(!$IconList)
{
$out .= "<IconList>\n";
$IconList=True;
}
$out .= $icon->render();
}
if($IconList) $out .= "</IconList>\n";
}
# End tag
$out .= "</AastraIPPhoneFormattedTextScreen>\n";
# Return XML object
return $out;
}
}

View File

@ -1,8 +1,8 @@
<?php
################################################################################
# Aastra XML API Classes - AastraIPPhoneFormattedTextScreenEntry
# Copyright Aastra Telecom 2007
# Firmware 2.0 or better
# Copyright Mitel Networks 2005-2015
#
# Internal class for AastraIPPhoneFormattedTextScreen object.
################################################################################
@ -11,13 +11,20 @@ class AastraIPPhoneFormattedTextScreenEntry extends AastraIPPhone {
var $_text;
var $_size;
var $_align;
var $_color;
var $_wrap;
var $_blink;
var $_type;
function AastraIPPhoneFormattedTextScreenEntry($text, $size, $align, $type)
function AastraIPPhoneFormattedTextScreenEntry($text, $size, $align, $color, $wrap, $blink, $type)
{
$this->_text=$text;
if($size=='double')$this->_text=$this->convert_high_ascii($text);
else $this->_text=$text;
$this->_size=$size;
$this->_align=$align;
$this->_color=$color;
$this->_wrap=$wrap;
$this->_blink=$blink;
$this->_type=$type;
}
@ -29,11 +36,15 @@ class AastraIPPhoneFormattedTextScreenEntry extends AastraIPPhone {
$xml = "<Line";
if($this->_size!=NULL) $xml .= " Size=\"{$this->_size}\"";
if($this->_align!=NULL) $xml .= " Align=\"{$this->_align}\"";
if($this->_color!=NULL) $xml .= " Color=\"{$this->_color}\"";
if($this->_wrap!=NULL) $xml .= " wrap=\"{$this->_wrap}\"";
if($this->_blink!=NULL) $xml .= " blink=\"{$this->_blink}\"";
$xml .= ">";
$xml .= $this->escape($this->_text)."</Line>\n";
break;
case "scrollstart":
$xml = "<Scroll Height=\"{$this->_size}\">\n";
if($this->_size!='') $xml = "<Scroll Height=\"{$this->_size}\">\n";
else $xml = "<Scroll>\n";
break;
case "scrollend":
$xml = "</Scroll>\n";

View File

@ -0,0 +1,203 @@
<?php
#########################################################################################################
# Aastra XML API Classes - Aastra XML API Classes - AastraIPPhoneGDImage
# Copyright Mitel Networks 2005-2015
#
# Firmware 2.0 or better
#
# AastraIPPhoneGDImage for AastraIPPhoneImageScreen and AastraIPPhoneImageScreen.
#
# php engine needs GD extensions
# ------------------------------
#
# Public methods
#
# drawttftext(fontsize,angle,x,y,text,colorIndex,fontfile)
# Writes text to the image using TrueType fonts
# fontsize The font size. Depending on your version of GD, this should be specified as the pixel
# size (GD1) or point size (GD2)
# angle The angle in degrees, with 0 degrees being left-to-right reading text. Higher values
# represent a counter-clockwise rotation. For example, a value of 90 would result in
# bottom-to-top reading text.
# x,y The coordinates given by x and y will define the basepoint of the first character
# (roughly the lower-left corner of the character).
# colorIndex 0=White 1=Black
# fontfile Location and name of the ttf file to use
# see php imagettftext() for more details
#
# drawtext(fontsize,x,y,text,colorIndex)
# Writes text to the image using built-in font
# fontsize The font size. From 1 to 5
# x,y The coordinates given by x and y will define the basepoint of the first character
# (roughly the lower-left corner of the character).
# colorIndex 0=White 1=Black
# see php imagestring() for more details
#
# rectangle(x1,y1,x2,y2,colorIndex,filled)
# Creates a rectangle starting at the specified coordinates.
# x1,y1 Upper left x,y coordinate. 0,0 is the top left corner of the image.
# x2,y2 Bottom right x,y coordinate
# colorIndex 0=White 1=Black
# filled Boolean, optional (default if False)
# see php imagerectangle() and imagefilledrectangle() for more details
#
# ellipse(cx,cy,width,height,colorIndex,filled)
# Draws an ellipse centered at the specified coordinates.
# cx,cy x-coordinate and y-coordinate of the center
# width the ellipse width
# height the ellipse height
# colorIndex 0=White 1=Black
# filled Boolean, optional (default if False)
# see php imageellipse() and imagefilledellipse() for more details
#
# line(x1,y1,x2,y2,colorIndex)
# Draws a line
# x1,y1 x,y coordinates for the first point
# x2,y2 x,y coordinates for the second point
# colorIndex 0=White 1=Black
# see php imageline() for more details
#
# setGDImage(image)
# Imports an externally generated GD image
# image GD image to import
#
# getGDImage()
# Exports the current GD image
#
# setFontPath(fontpath)
# Set directory path for the fonts to use
# fontpath Directory for the ttf fonts
# Default value
# Windows based platform C:\Windows\Fonts
# Linux based platform ../fonts
#
# Example 1
# require_once('AastraIPPhoneGDImage.class.php');
# $PhoneImageGD = new AastraIPPhoneGDImage();
# $time = strftime("%H:%M");
# $PhoneImageGD->drawttftext(30, 0, 10, 39, $time, 1,'Ni7seg.ttf');
#
# Example 2
# require_once('AastraIPPhoneGDImage.class.php');
# $PhoneImageGD = new AastraIPPhoneGDImage();
# $utf8text = "&#19996;&#19997;&#19998;&#19999;&#20024;";
# $PhoneImageGD->drawttftext(20, 0, 5, 35, $utf8text, 1,'arialuni.ttf');
#
########################################################################################################
########################################################################################################
class AastraIPPhoneGDImage
{
var $_img;
var $_white;
var $_black;
var $_red;
var $_green;
var $_blue;
var $_font;
var $_fontpath;
var $_color;
function AastraIPPhoneGDImage($width=144,$height=40,$color=False)
{
# create the actual image
$this->_color=$color;
if($color) {
$this->_img=imagecreatetruecolor($width, $height);
} else {
$this->_img=imagecreate($width, $height);
}
# define black and white
$this->_white = imagecolorallocate($this->_img, 255, 255, 255);
$this->_black = imagecolorallocate($this->_img, 0, 0, 0);
if($color) {
$this->_red = imagecolorallocate($this->_img, 255, 0, 0);
$this->_green = imagecolorallocate($this->_img, 0, 255, 0);
$this->_blue = imagecolorallocate($this->_img, 0, 0, 255);
}
# Black and White only so disable anti-aliasing
if(!$color) {
$this->_black = $this->_black * -1;
$this->_white = $this->_white * -1;
}
# define a default font path
$os = strtolower(PHP_OS);
if(strpos($os, "win") === false) $this->_fontpath='../fonts';
else $this->_fontpath='C:\Windows\Fonts';
putenv('GDFONTPATH='.$this->_fontpath);
}
function importFromPng($file,$x,$y)
{
$image=@imagecreatefrompng($file);
imagecopy($this->_img,$image,$x,$y,0,0,imagesx($image),imagesy($image));
}
function setFontPath($fontpath)
{
$this->_fontpath=$fontpath;
putenv('GDFONTPATH='.$this->_fontpath);
}
function drawttftext($size, $angle, $x, $y, $text, $colorIndex, $font)
{
imagettftext($this->_img, $size, $angle, $x, $y, $this->getColor($colorIndex), $font, $text);
}
function drawtext($size, $x, $y, $text, $colorIndex)
{
imagestring($this->_img, $size, $x, $y, $text, $this->getColor($colorIndex));
}
function setGDImage($image)
{
$this->_img=$image;
}
function getGDImage()
{
return $this->_img;
}
function savePNGImage($filename)
{
imagepng($this->_img,$filename);
}
function rectangle($x1, $y1, $x2, $y2, $colorIndex, $filled=False)
{
if($filled) imagefilledrectangle($this->_img, $x1, $y1, $x2, $y2, $this->getColor($colorIndex));
else imagerectangle($this->_img, $x1, $y1, $x2, $y2, $this->getColor($colorIndex));
}
function ellipse($cx, $cy, $width, $height, $colorIndex, $filled=False)
{
if($filled) imagefilledellipse($this->_img, $cx, $cy, $width, $height, $this->getColor($colorIndex));
else imageellipse($this->_img, $cx, $cy, $width, $height, $this->getColor($colorIndex));
}
function line($x1, $y1, $x2, $y2, $colorIndex, $dashed=False)
{
if(!$dashed) imageline($this->_img, $x1, $y1, $x2, $y2, $this->getColor($colorIndex));
else
{
$style = array($this->_black, $this->_white);
imagesetstyle($this->_img, $style);
imageline($this->_img, $x1, $y1, $x2, $y2, IMG_COLOR_STYLED);
}
}
function getColor($index)
{
if ($index == 0) return $this->_white;
else if ($index == 1) return $this->_black;
else if ($index == 2) return $this->_red;
else if ($index == 3) return $this->_green;
else if ($index == 4) return $this->_blue;
}
}
?>

View File

@ -1,8 +1,8 @@
<?php
################################################################################
# Aastra XML API Classes - AastraIPIconEntry
# Copyright Aastra Telecom 2007
# Aastra XML API Classes - AastraIPPhoneIconEntry
# Firmware 2.0 or better
# Copyright Mitel Networks 2005-2015
#
# Internal class for AastraIPPhone object.
################################################################################

View File

@ -0,0 +1,242 @@
<?php
########################################################################################################
# Aastra XML API Classes - AastraIPPhoneTextMenu
# Copyright Mitel Networks 2005-2015
#
# AastraIPPhoneTextMenu object.
#
# Public methods
#
# Inherited from AastraIPPhone
# setTitle(Title) to setup the title of an object (optional)
# @title string
# setTitleWrap() to set the title to be wrapped on 2 lines (optional)
# setTopTitle(title,color,icon_index) to set the Top Title of the XML screen (6739i only)
# @title string
# @color string, "red", "blue", ... (optional)
# @icon_index integer, icon number
# setDestroyOnExit() to set DestroyonExit parameter to 'yes', 'no' by default (optional)
# setBeep() to enable a notification beep with the object (optional)
# setLockIn(uri) to set the Lock-in tag to 'yes' and the GoodbyeLockInURI(optional)
# @uri string, GoodByeLockInURI
# setLockInCall() to set the Lock-in tag to 'call' (optional)
# setTimeout(timeout) to define a specific timeout for the XML object (optional)
# @timeout integer (seconds)
# setCallProtection(notif) to protect the XML object against incoming calls
# @notif to enable/disable (false by default) the display of an incoming call notification (optional)
# setBackgroundColor(color) to change the XML object background color (optional)
# @color string, "red", "blue", ...
# addSoftkey(index,label,uri,icon_index) to add custom soktkeys to the object (optional)
# @index integer, softkey number
# @label string
# @uri string
# @icon_index integer, icon number
# setRefresh(timeout,URL) to add Refresh parameters to the object (optional)
# @timeout integer (seconds)
# @URL string
# setEncodingUTF8() to change encoding from default ISO-8859-1 to UTF-8 (optional)
# addIcon(index,icon) to add custom icons to the object (optional)
# @index integer, icon index
# @icon string, icon name or definition
# generate() to return the generated XML for the object
# output(flush) to display the object
# @flush boolean optional, output buffer to be flushed out or not.
#
# Specific to the object
# setLayout(layout) to set the desired layout
# @layout 1 or 2
# setMode(mode) to set the screen mode
# @mode 'regular' or 'extended'
# setDefaultIndex(index) to set the default selection in the list (optional)
# @index index (1-24)
# setFontMono(fontMono) to decide the use of the monotype font
# @fontMono boolean ("yes"/"no")
# addEntry(url,selection,icon,iconScaled,fontMono,dial,line) to add an element in the list to be displayed
# @url string
# @selection string (optional)
# @icon string (optional)
# @iconScaled boolean (optional)
# @fontMono boolean (optional)
# @dial string, phone number to dial (optional)
# @line integer, SIP line to use (optional)
# addLine(text,align,color) to add a line in the current item
# @text string
# @align string, optional, "left", "right" or "center"
# @color string, optional, "red", "black", ...
#
# Example
# require_once('AastraIPPhoneIconMenu.class.php');
# $menu = new AastraIPPhoneIconMenu();
# $menu->setDestroyOnExit();
# $menu->setDeFaultIndex('3');
# $menu->setLayout('1');
# $menu->setMode('regular');
# $menu->setFontMono('yes');
# $menu->addEntry('http://myserver.com/script.php?choice=1','Value=1','Icon:Alarm','yes');
# $menu->addLine('Line 11','left','red');
# $menu->addLine('Line 12','right','green');
# $menu->addLine('Line 13','center','blue');
# $menu->addEntry('http://myserver.com/script.php?choice=2','Value=2','Icon:AlarmFilled','no');
# $menu->addLine('Line 21','left','red');
# $menu->addLine('Line 22','right','green');
# $menu->addLine('Line 23','center','blue');
# $menu->addSoftkey('1', 'My Select', 'http://myserver.com/script.php?action=1');
# $menu->addSoftkey('6', 'Exit', 'SoftKey:Exit');
# $menu->output();
#
########################################################################################################
require_once('AastraIPPhone.class.php');
require_once('AastraIPPhoneIconMenuEntry.class.php');
class AastraIPPhoneIconMenu extends AastraIPPhone {
var $_layout='';
var $_mode='';
var $_defaultIndex='';
var $_style='';
var $_maxitems='24';
var $_fontMono='';
function setLayout($layout)
{
$this->_layout = $layout;
}
function setMode($mode)
{
$this->_mode = $mode;
}
function setFontMono($fontMono)
{
$this->_fontMono = $fontMono;
}
function setDefaultIndex($defaultIndex)
{
$this->_defaultIndex = $defaultIndex;
}
function setStyle($style)
{
$this->_style = $style;
}
function addEntry($url, $selection=NULL, $icon=NULL, $iconScaled=NULL, $fontMono=NULL, $dial=NULL, $line=NULL)
{
$this->_entries[] = new AastraIPPhoneIconMenuEntry( $url,
$selection,
$icon,
$iconScaled,
$fontMono,
$dial,
$line
);
}
function addLine($text, $align=NULL, $color=NULL)
{
$index=count($this->_entries);
if($index>0) {
$this->_entries[$index-1]->addLine($text, $align, $color);
}
}
function render()
{
# Beginning of root tag
$out = "<AastraIPPhoneIconMenu";
# DestroyOnExit
if ($this->_destroyOnExit=='yes') $out .= " destroyOnExit=\"yes\"";
# DefaultIndex
if ($this->_defaultIndex!="") $out .= " defaultIndex=\"{$this->_defaultIndex}\"";
# Layout
if ($this->_layout!='') $out .= " layout=\"{$this->_layout}\"";
# Mode
if ($this->_mode!='') $out .= " mode=\"{$this->_mode}\"";
# FontMono
if ($this->_fontMono!='') $out .= " fontMono=\"{$this->_fontMono}\"";
# Beep
if ($this->_beep=='yes') $out .= " Beep=\"yes\"";
# Lockin
if($this->_lockin!='') {
$out .= " LockIn=\"{$this->_lockin}\"";
if($this->_lockin_uri!='') $out .= " GoodbyeLockInURI=\"".$this->escape($this->_lockin_uri)."\"";
}
# Call Protection
if($this->_callprotection!='') {
$out .= " CallProtection=\"{$this->_callprotection}\"";
}
# Timeout
if ($this->_timeout!=0) $out .= " Timeout=\"{$this->_timeout}\"";
# Background color
if ($this->_background_color!='') $out .= " bgColor=\"{$this->_background_color}\"";
# Font Monotype
if ($this->_fontMono == 'no') $out .= " fontMono=\"no\"";
# End of root tag
$out .= ">\n";
# Top Title
if ($this->_toptitle!='')
{
$toptitle = $this->escape($this->_toptitle);
$out .= "<TopTitle";
if ($this->_toptitle_icon!='') $out .= " icon=\"{$this->_toptitle_icon}\"";
if ($this->_toptitle_color!='') $out .= " Color=\"{$this->_toptitle_color}\"";
$out .= ">".$toptitle."</TopTitle>\n";
}
# Menu items
if (isset($this->_entries) && is_array($this->_entries))
{
$index=0;
$is_softkeys=Aastra_is_softkeys_supported();
foreach ($this->_entries as $entry)
{
if($index<$this->_maxitems) $out .= $entry->render();
$index++;
}
}
# Softkeys
if (isset($this->_softkeys) && is_array($this->_softkeys))
{
foreach ($this->_softkeys as $softkey) $out .= $softkey->render();
}
# Icons
if (isset($this->_icons) && is_array($this->_icons))
{
$IconList=False;
foreach ($this->_icons as $icon)
{
if(!$IconList)
{
$out .= "<IconList>\n";
$IconList=True;
}
$out .= $icon->render();
}
if($IconList) $out .= "</IconList>\n";
}
# End Tag
$out .= "</AastraIPPhoneIconMenu>\n";
# Return XML object
return($out);
}
}
?>

View File

@ -0,0 +1,87 @@
<?php
################################################################################
# Aastra XML API Classes - AastraIPPhoneTextMenuEntry
# Copyright Mitel Networks 2005-2015
#
# Internal class for AastraIPPhoneTextMenu object.
################################################################################
class AastraIPPhoneIconMenuEntry extends AastraIPPhone {
var $_url;
var $_selection;
var $_icon;
var $_iconScaled;
var $_fontMono;
var $_dial;
var $_line;
var $_lines=array();
function AastraIPPhoneIconMenuEntry($url, $selection, $icon, $iconScaled, $fontMono, $dial, $line)
{
$this->_url=$url;
$this->_selection=$selection;
$this->_icon=$icon;
$this->_iconScaled=$iconScaled;
$this->_dial=$dial;
$this->_line=$line;
$this->_fontMono=$fontMono;
}
function addLine($text, $align, $color)
{
$this->_lines[]=array('text'=>$text,'align'=>$align,'color'=>$color);
}
function render()
{
# Opening
$xml = '<MenuItem';
if($this->_fontMono!='') $xml .= " fontMono=\"{$this->_fontMono}\"";
$xml .= ">\n";
# Prompt
$icon = $this->escape($this->_icon);
$xml .= "<iconName";
if($this->_iconScaled!='') $xml .= " scaled=\"{$this->_iconScaled}\"";
$xml .= ">{$icon}</iconName>\n";
# URI
$url = $this->escape($this->_url);
$xml .= "<URI>{$url}</URI>\n";
# Selection
$selection = $this->escape($this->_selection);
if($selection!=NULL) $xml .= "<Selection>{$selection}</Selection>\n";
# Dial
if($this->_dial!=NULL)
{
if($this->_line!=NULL) $xml .= "<Dial line=\"{$this->_line}\">{$this->_dial}</Dial>\n";
else $xml .= "<Dial>{$this->_dial}</Dial>\n";
}
# Lines
foreach($this->_lines as $value) {
$xml .= '<Line';
if($value['align']!='') {
$align = $this->escape($value['align']);
$xml .= " Align=\"{$align}\"";
}
if($value['color']!='') {
$color = $this->escape($value['color']);
$xml .= " Color=\"{$color}\"";
}
$xml .= ">";
$text = $this->escape($value['text']);
if($text!='') $xml .= $text;
$xml .= '</Line>'."\n";
}
# Close
$xml .= '</MenuItem>'."\n";
# Return generated vaue
return($xml);
}
}
?>

View File

@ -1,29 +1,72 @@
<?php
########################################################################################################
# Aastra XML API Classes - AastraIPPhoneImageMenu
# Copyright Aastra Telecom 2007
# Copyright Mitel Networks 2005-2015
#
# AastraIPPhoneImageMenu object.
#
# Public methods
#
# Inherited from AastraIPPhone
# setTopTitle(title,color,icon_index) to set the Top Title of the XML screen (6739i only)
# @title string
# @color string, "red", "blue", ... (optional)
# @icon_index integer, icon number
# setCancelAction(uri) to set the cancel parameter with the URI to be called on Cancel (optional)
# @uri string
# setDestroyOnExit() to set DestroyonExit parameter to 'yes', 'no' by default (optional)
# setBeep() to enable a notification beep with the object (optional)
# setLockIn(uri) to set the Lock-in tag to 'yes' and the GoodbyeLockInURI(optional)
# @uri string, GoodByeLockInURI
# setLockInCall() to set the Lock-in tag to 'call' (optional)
# setCallProtection(notif) to protect the XML object against incoming calls
# @notif to enable/disable (false by default) the display of an incoming call notification (optional)
# setAllowAnswer() to set the allowAnswer tag to 'yes' (optional, only for non softkey phones)
# setAllowDrop() to set the allowDrop tag to 'yes' (optional, only for non softkey phones)
# setAllowXfer() to set the allowXfer tag to 'yes' (optional, only for non softkey phones)
# setAllowConf() to set the allowConf tag to 'yes' (optional, only for non softkey phones)
# setTimeout(timeout) to define a specific timeout for the XML object (optional)
# setLockIn() to set the Lock-in tag to 'yes' (optional)
# addSoftkey(index,label,uri,icon_index) to add custom softkeys to the object (optional)
# @timeout integer (seconds)
# setBackgroundColor(color) to change the XML object background color (optional)
# @color string, "red", "blue", ...
# addSoftkey(index,label,uri,icon_index) to add custom soktkeys to the object (optional)
# @index integer, softkey number
# @label string
# @uri string
# @icon_index integer, icon number
# setRefresh(timeout,URL) to add Refresh parameters to the object (optional)
# generate() to return the object content
# output() to display the object
# @timeout integer (seconds)
# @URL string
# setEncodingUTF8() to change encoding from default ISO-8859-1 to UTF-8 (optional)
# addIcon(index,icon) to add custom icons to the object (optional)
# @index integer, icon index
# @icon string, icon name or definition
# generate() to return the generated XML for the object
# output(flush) to display the object
# @flush boolean optional, output buffer to be flushed out or not.
#
# Specific to the object
# setImage(image)to define the image to be displayed
# @image string
# setGDImage(GDImage) to use a GDImage for display, the size is forced to 40x144
# @GDImage GDImage
# setAlignment(vertical,horizontal) to define image alignment
# @vertical string, "top", "middle", "bottom"
# @horizontal string, "left", "middle", "right"
# setSize(height,width) to define image size
# @height integer (pixels)
# @width integer (pixels)
# setURIBase(uriBase) to define the base URI for the selections
# @uriBase string
# addURI(key,uri) to add a selection key with its URI
# @key string (1-9, * and #)
# @uri string
# setMode(mode) to define the image mode to be displayed (normal,extended,fullscreen) (optional, 6739i only)
# @mode string enum normal,extended,fullscreen
# setDoneAction(uri) to set the URI to be called when the user selects the default "Done" key (optional)
# @uri string
# setImageAction(uri) to set the imageAction parameter with the URI to be called when user presses on the displayed image (optional, 6739i only)
# @uri string
#
# Example
# require_once('AastraIPPhoneImageMenu.class.php');
@ -51,6 +94,9 @@ class AastraIPPhoneImageMenu extends AastraIPPhone {
var $_height=NULL;
var $_width=NULL;
var $_uriBase=NULL;
var $_mode=NULL;
var $_imageAction='';
var $_doneAction='';
function setImage($image)
{
@ -78,47 +124,184 @@ class AastraIPPhoneImageMenu extends AastraIPPhone {
{
$this->_entries[] = new AastraIPPhoneImageMenuEntry($key, $uri);
}
function setGDImage($GDImage)
{
$img = $GDImage->getGDImage();
$byte = 0;
$i = 0;
$imageHexString = "";
for ($x=0; $x < 144; $x++)
{
for ($y=0; $y < 40; $y++)
{
$rgb = imagecolorat($img, $x, $y);
if ($rgb > 0) $byte = $byte + pow(2,(7-($i%8)));
if ($i%8 == 7)
{
$byteHex = dechex($byte);
if (strlen($byteHex) == 1) $byteHex = "0".$byteHex;
$imageHexString = $imageHexString . $byteHex;
$byte=0;
}
$i++;
}
}
$this->setImage($imageHexString);
$this->setSize(40,144);
}
function setImageAction($action)
{
$this->_imageAction = $action;
}
function setDoneAction($uri)
{
$this->_doneAction = $uri;
}
function setMode($mode)
{
$this->_mode = $mode;
}
function render()
{
$title = $this->escape($this->_title);
# Beginning of roor tag
$out = "<AastraIPPhoneImageMenu";
# DestroyOnExit
if ($this->_destroyOnExit=='yes') $out .= " destroyOnExit=\"yes\"";
# CancelAction
if($this->_cancelAction != "")
{
$cancelAction = $this->escape($this->_cancelAction);
$out .= " cancelAction=\"{$cancelAction}\"";
}
# DoneAction
if($this->_doneAction != "")
{
$doneAction = $this->escape($this->_doneAction);
$out .= " doneAction=\"{$doneAction}\"";
}
# Beep
if($this->_beep=='yes') $out .= " Beep=\"yes\"";
if($this->_lockin=='yes') $out .= " LockIn=\"yes\"";
if($this->_allowAnswer == 'yes') $out .= " allowAnswer=\"yes\"";
# Lockin
if($this->_lockin!='') {
$out .= " LockIn=\"{$this->_lockin}\"";
if($this->_lockin_uri!='') $out .= " GoodbyeLockInURI=\"".$this->escape($this->_lockin_uri)."\"";
}
# Call Protection
if($this->_callprotection!='') {
$out .= " CallProtection=\"{$this->_callprotection}\"";
}
# AllowAnswer
if ($this->_allowAnswer == 'yes') $out .= " allowAnswer=\"yes\"";
# AllowDrop
if ($this->_allowDrop == 'yes') $out .= " allowDrop=\"yes\"";
# AllowXfer
if ($this->_allowXfer == 'yes') $out .= " allowXfer=\"yes\"";
# AllowConf
if ($this->_allowConf == 'yes') $out .= " allowConf=\"yes\"";
# Timeout
if($this->_timeout!=0) $out .= " Timeout=\"{$this->_timeout}\"";
# Background color
if ($this->_background_color!='') $out .= " bgColor=\"{$this->_background_color}\"";
# ImageAction
if($this->_imageAction != '')
{
$imageAction = $this->escape($this->_imageAction);
$out .= " imageAction=\"{$imageAction}\"";
}
# Mode
if($this->_mode != '')
{
$mode = $this->escape($this->_mode);
$out .= " mode=\"{$mode}\"";
}
# End of root tag
$out .= ">\n";
# Top Title
if ($this->_toptitle!='')
{
$toptitle = $this->escape($this->_toptitle);
$out .= "<TopTitle";
if ($this->_toptitle_icon!='') $out .= " icon=\"{$this->_toptitle_icon}\"";
if ($this->_toptitle_color!='') $out .= " Color=\"{$this->_toptitle_color}\"";
$out .= ">".$toptitle."</TopTitle>\n";
}
# Image tag
$out .= "<Image";
# VerticalAlign
if($this->_verticalAlign!=NULL) $out .= " verticalAlign=\"{$this->_verticalAlign}\"";
# HorizontalAlign
if($this->_horizontalAlign!=NULL) $out .= " horizontalAlign=\"{$this->_horizontalAlign}\"";
# Height
if($this->_height!=NULL) $out .= " height=\"{$this->_height}\"";
# Width
if($this->_width!=NULL) $out .= " width=\"{$this->_width}\"";
# Image
$out .= ">{$this->_image}</Image>\n";
# URI List
$out .= "<URIList";
$uriBase = $this->escape($this->_uriBase);
if($uriBase!=NULL) $out .= " base=\"{$uriBase}\"";
$out .= ">\n";
foreach ($this->_entries as $entry) $out .= $entry->render();
$out .= "</URIList>\n";
foreach ($this->_softkeys as $softkey) $out .= $softkey->render();
$IconList=0;
foreach ($this->_icons as $icon)
if (isset($this->_entries) && is_array($this->_entries))
{
if($IconList==0)
{
$out .= "<IconList>\n";
$IconList=1;
}
$out .= $icon->render();
foreach ($this->_entries as $entry) $out .= $entry->render();
}
if($IconList!=0) $out .= "</IconList>\n";
$out .= "</URIList>\n";
# Softkeys
if (isset($this->_softkeys) && is_array($this->_softkeys))
{
foreach ($this->_softkeys as $softkey) $out .= $softkey->render();
}
# Icons
if (isset($this->_icons) && is_array($this->_icons))
{
$IconList=False;
foreach ($this->_icons as $icon)
{
if(!$IconList)
{
$out .= "<IconList>\n";
$IconList=True;
}
$out .= $icon->render();
}
if($IconList) $out .= "</IconList>\n";
}
# End of root tag
$out .= "</AastraIPPhoneImageMenu>\n";
# Return XML object
return($out);
}
}

View File

@ -1,8 +1,8 @@
<?php
################################################################################
# Aastra XML API Classes - AastraIPPhoneImageMenuEntry
# Copyright Aastra Telecom 2007
# Firmware 2.0 or better
# Copyright Mitel Networks 2005-2015
#
# Internal class for AastraIPPhoneImageMenu object.
################################################################################

View File

@ -1,30 +1,85 @@
<?
<?php
########################################################################################################
# Aastra XML API Classes - AastraIPPhoneImageScreen
# Copyright Aastra Telecom 2007
# Copyright Mitel Networks 2005-2015
#
# AastraIPPhoneImageScreen object.
#
# Public methods
#
# Inherited from AastraIPPhone
# setTopTitle(title,color,icon_index) to set the Top Title of the XML screen (6739i only)
# @title string
# @color string, "red", "blue", ... (optional)
# @icon_index integer, icon number
# setCancelAction(uri) to set the cancel parameter with the URI to be called on Cancel (optional)
# @uri string
# setDestroyOnExit() to set DestroyonExit parameter to 'yes', 'no' by default (optional)
# setBeep() to enable a notification beep with the object (optional)
# setLockIn() to set the Lock-in tag to 'yes' (optional)
# setLockIn(uri) to set the Lock-in tag to 'yes' and the GoodbyeLockInURI(optional)
# @uri string, GoodByeLockInURI
# setLockInCall() to set the Lock-in tag to 'call' (optional)
# setCallProtection(notif) to protect the XML object against incoming calls
# @notif to enable/disable (false by default) the display of an incoming call notification (optional)
# setAllowAnswer() to set the allowAnswer tag to 'yes' (optional, only for non softkey phones)
# setAllowDrop() to set the allowDrop tag to 'yes' (optional, only for non softkey phones)
# setAllowXfer() to set the allowXfer tag to 'yes' (optional, only for non softkey phones)
# setAllowConf() to set the allowConf tag to 'yes' (optional, only for non softkey phones)
# setTimeout(timeout) to define a specific timeout for the XML object (optional)
# addSoftkey(index,label,uri,icon_index) to add custom softkeys to the object (optional)
# addIcon(index,icon) to add custom icons to the object (optional)
# @timeout integer (seconds)
# setBackgroundColor(color) to change the XML object background color (optional)
# @color string, "red", "blue", ...
# addSoftkey(index,label,uri,icon_index) to add custom soktkeys to the object (optional)
# @index integer, softkey number
# @label string
# @uri string
# @icon_index integer, icon number
# setRefresh(timeout,URL) to add Refresh parameters to the object (optional)
# generate() to return the object content
# output() to display the object
# @timeout integer (seconds)
# @URL string
# setEncodingUTF8() to change encoding from default ISO-8859-1 to UTF-8 (optional)
# addIcon(index,icon) to add custom icons to the object (optional)
# @index integer, icon index
# @icon string, icon name or definition
# generate() to return the generated XML for the object
# output(flush) to display the object
# @flush boolean optional, output buffer to be flushed out or not.
#
# Specific to the object
# setImage(image)to define the image to be displayed
# setImage(image,scaling) to define the image to be displayed
# @image string
# @scaling scaling indicator "yes"/"no" optional
# setGDImage(GDImage) to use a GDImage for display, the size is forced to 40x144
# @GDImage GDImage
# setSPImage(SPImage) to use a SPImage for display, the size is forced to 40x144
# @SPImage SPImage
# setAlignment(vertical,horizontal) to define image alignment
# @vertical string, "top", "middle", "bottom"
# @horizontal string, "left", "middle", "right"
# setScaling() to indicate if image must be scaled
# setSize(height,width) to define image size
# @height integer (pixels)
# @width integer (pixels)
# setAllowDTMF() to allow DTMF passthrough on the object
# setScrollUp(uri) to set the URI to be called when the user presses the Up arrow (optional)
# @uri string
# setScrollDown(uri) to set the URI to be called when the user presses the Down arrow (optional)
# @uri string
# setScrollLeft(uri) to set the URI to be called when the user presses the Left arrow (optional)
# @uri string
# setScrollRight(uri) to set the URI to be called when the user presses the Right arrow (optional)
# @uri string
# setMode(mode) to define the image mode to be displayed (normal,extended,fullscreen) (optional, 6739i only)
# @mode string enum normal,extended,fullscreen
# setDoneAction(uri) to set the URI to be called when the user selects the default "Done" key (optional)
# @uri string
# setImageAction(uri) to set the imageAction parameter with the URI to be called when user presses on the displayed image (optional, 6739i only)
# @uri string
#
# Example
#
# Using a Pixel image
#
# require_once('AastraIPPhoneImageScreen.class.php');
# $images = new AastraIPPhoneImageScreen();
# $images->setDestroyOnExit();
@ -35,6 +90,32 @@
# $images->addIcon('1', 'Icon:Envelope');
# $images->output();
#
# Using a GD image
#
# require_once('AastraIPPhoneGDImage.class.php');
# require_once('AastraIPPhoneImageScreen.class.php');
# $PhoneImageGD = new AastraIPPhoneGDImage();
# $object = new AastraIPPhoneImageScreen();
# $time = strftime("%H:%M");
# $PhoneImageGD->drawttftext(30, 0, 10, 39, $time, 1,'Ni7seg.ttf');
# $object->setGDImage($PhoneImageGD);
# $object->output();
#
# Using a SP image
#
# require_once('AastraIPPhoneImageScreen.class.php');
# $object = new AastraIPPhoneImageScreen();
# require_once('AastraIPPhoneSPImage.class.php');
# $SPimage=new AastraIPPhoneSPImage();
# $SPimage->addIcon('1','286CEE6C2800');
# $SPimage->setBitmap('answered',3,1);
# $SPimage->setText('Jean Valjean',1,'left',3);
# $SPimage->setText('9057604454',2,'left',3);
# $SPimage->setText('Sep 9 10:14am',4,'left',3);
# $SPimage->setText('Use #1# to browse',5,'center');
# $object->setSPImage($SPimage);
# $object->output();
#
########################################################################################################
require_once('AastraIPPhone.class.php');
@ -43,8 +124,17 @@ class AastraIPPhoneImageScreen extends AastraIPPhone {
var $_image;
var $_verticalAlign=NULL;
var $_horizontalAlign=NULL;
var $_scaled='';
var $_height=NULL;
var $_width=NULL;
var $_allowDTMF='';
var $_scrollUp='';
var $_scrollDown='';
var $_scrollLeft='';
var $_scrollRight='';
var $_mode=NULL;
var $_imageAction='';
var $_doneAction='';
function setImage($image)
{
@ -57,44 +147,226 @@ class AastraIPPhoneImageScreen extends AastraIPPhone {
$this->_horizontalAlign = $horizontal;
}
function setScaling()
{
$this->_scaled = 'yes';
}
function setSize($height,$width)
{
$this->_height = $height;
$this->_width = $width;
}
function setScrollUp($uri)
{
$this->_scrollUp = $uri;
}
function setScrollDown($uri)
{
$this->_scrollDown = $uri;
}
function setScrollLeft($uri)
{
$this->_scrollLeft = $uri;
}
function setScrollRight($uri)
{
$this->_scrollRight = $uri;
}
function setImageAction($action)
{
$this->_imageAction = $action;
}
function setDoneAction($uri)
{
$this->_doneAction = $uri;
}
function setMode($mode)
{
$this->_mode = $mode;
}
function setGDImage($GDImage)
{
$img = $GDImage->getGDImage();
$byte = 0;
$i = 0;
$imageHexString = "";
for ($x=0; $x < 144; $x++)
{
for ($y=0; $y < 40; $y++)
{
$rgb = imagecolorat($img, $x, $y);
if ($rgb > 0) $byte = $byte + pow(2,(7-($i%8)));
if ($i%8 == 7)
{
$byteHex = dechex($byte);
if (strlen($byteHex) == 1) $byteHex = "0".$byteHex;
$imageHexString = $imageHexString . $byteHex;
$byte=0;
}
$i++;
}
}
$this->setImage($imageHexString);
$this->setSize(40,144);
}
function setSPImage($SPImage)
{
$this->setImage($SPImage->getSPImage());
$this->setSize(40,144);
}
function setAllowDTMF()
{
$this->_allowDTMF = 'yes';
}
function render()
{
# Beginning of root tag
$out = "<AastraIPPhoneImageScreen";
# DestroyOnExit
if($this->_destroyOnExit == 'yes') $out .= " destroyOnExit=\"yes\"";
# CancelAction
if($this->_cancelAction != "")
{
$cancelAction = $this->escape($this->_cancelAction);
$out .= " cancelAction=\"{$cancelAction}\"";
}
if($this->_beep=='yes') $out .= " Beep=\"yes\"";
if($this->_allowAnswer == 'yes') $out .= " allowAnswer=\"yes\"";
if($this->_timeout!=0) $out .= " Timeout=\"{$this->_timeout}\"";
$out .= ">\n";
$out .= "<Image";
if($this->_verticalAlign!=NULL) $out .= " verticalAlign=\"{$this->_verticalAlign}\"";
if($this->_horizontalAlign!=NULL) $out .= " horizontalAlign=\"{$this->_horizontalAlign}\"";
if($this->_height!=NULL) $out .= " height=\"{$this->_height}\"";
if($this->_width!=NULL) $out .= " width=\"{$this->_width}\"";
$out .= ">{$this->_image}</Image>\n";
foreach ($this->_softkeys as $softkey) $out .= $softkey->render();
$IconList=0;
foreach ($this->_icons as $icon)
{
if($IconList==0)
{
$out .= "<IconList>\n";
$IconList=1;
}
$out .= $icon->render();
# DoneAction
if($this->_doneAction != "")
{
$doneAction = $this->escape($this->_doneAction);
$out .= " doneAction=\"{$doneAction}\"";
}
if($IconList!=0) $out .= "</IconList>\n";
# Beep
if($this->_beep=='yes') $out .= " Beep=\"yes\"";
# Lockin
if($this->_lockin!='') {
$out .= " LockIn=\"{$this->_lockin}\"";
if($this->_lockin_uri!='') $out .= " GoodbyeLockInURI=\"".$this->escape($this->_lockin_uri)."\"";
}
# Call Protection
if($this->_callprotection!='') {
$out .= " CallProtection=\"{$this->_callprotection}\"";
}
# Timeout
if($this->_timeout!=0) $out .= " Timeout=\"{$this->_timeout}\"";
# Background color
if ($this->_background_color!='') $out .= " bgColor=\"{$this->_background_color}\"";
# AllowAnswer
if ($this->_allowAnswer == 'yes') $out .= " allowAnswer=\"yes\"";
# AllowDrop
if ($this->_allowDrop == 'yes') $out .= " allowDrop=\"yes\"";
# AllowXfer
if ($this->_allowXfer == 'yes') $out .= " allowXfer=\"yes\"";
# AllowConf
if ($this->_allowConf == 'yes') $out .= " allowConf=\"yes\"";
# AllowDTMF
if($this->_allowDTMF=='yes') $out .= " allowDTMF=\"yes\"";
# Scrolls up/down/left/right
if($this->_scrollUp!='') $out .= " scrollUp=\"".$this->escape($this->_scrollUp)."\"";
if($this->_scrollDown!='') $out .= " scrollDown=\"".$this->escape($this->_scrollDown)."\"";
if($this->_scrollLeft!='') $out .= " scrollLeft=\"".$this->escape($this->_scrollLeft)."\"";
if($this->_scrollRight!='') $out .= " scrollRight=\"".$this->escape($this->_scrollRight)."\"";
# ImageAction
if($this->_imageAction != '')
{
$imageAction = $this->escape($this->_imageAction);
$out .= " imageAction=\"{$imageAction}\"";
}
# Mode
if($this->_mode != '')
{
$mode = $this->escape($this->_mode);
$out .= " mode=\"{$mode}\"";
}
# End of root tag
$out .= ">\n";
# Top Title
if ($this->_toptitle!='')
{
$toptitle = $this->escape($this->_toptitle);
$out .= "<TopTitle";
if ($this->_toptitle_icon!='') $out .= " icon=\"{$this->_toptitle_icon}\"";
if ($this->_toptitle_color!='') $out .= " Color=\"{$this->_toptitle_color}\"";
$out .= ">".$toptitle."</TopTitle>\n";
}
# Beginning of Image tag
$out .= "<Image";
# VerticalAlign
if($this->_verticalAlign!=NULL) $out .= " verticalAlign=\"{$this->_verticalAlign}\"";
# HorizontalAlign
if($this->_horizontalAlign!=NULL) $out .= " horizontalAlign=\"{$this->_horizontalAlign}\"";
# Height
if($this->_height!=NULL) $out .= " height=\"{$this->_height}\"";
# Width
if($this->_width!=NULL) $out .= " width=\"{$this->_width}\"";
# Scaling
if($this->_scaled!='') $out .= " scaled=\"{$this->_scaled}\"";
# Image and end of image tag
$out .= ">{$this->_image}</Image>\n";
# Softkeys
if (isset($this->_softkeys) && is_array($this->_softkeys))
{
foreach ($this->_softkeys as $softkey) $out .= $softkey->render();
}
# Icons
if (isset($this->_icons) && is_array($this->_icons))
{
$IconList=False;
foreach ($this->_icons as $icon)
{
if(!$IconList)
{
$out .= "<IconList>\n";
$IconList=True;
}
$out .= $icon->render();
}
if($IconList) $out .= "</IconList>\n";
}
# End tag
$out .= "</AastraIPPhoneImageScreen>\n";
# Return XML object
return $out;
}
}

View File

@ -1,8 +1,7 @@
<?
<?php
########################################################################################################
# Aastra XML API Classes - AastraIPPhoneInputScreen
# Copyright Aastra Telecom 2007
# Copyright Mitel Networks 2005-2015
#
# AastraIPPhoneInputScreen object.
#
@ -10,46 +9,114 @@
#
# Inherited from AastraIPPhone
# setTitle(Title) to setup the title of an object (optional)
# @title string
# setTitleWrap() to set the title to be wrapped on 2 lines (optional)
# setDestroyOnExit() to set DestroyonExit parameter to 'yes', 'no' by default (optional)
# setTopTitle(title,color,icon_index) to set the Top Title of the XML screen (6739i only)
# @title string
# @color string, "red", "blue", ... (optional)
# @icon_index integer, icon number
# setCancelAction(uri) to set the cancel parameter with the URI to be called on Cancel (optional)
# @uri string
# setDestroyOnExit() to set DestroyonExit parameter to 'yes', 'no' by default (optional)
# setBeep() to enable a notification beep with the object (optional)
# setLockIn() to set the Lock-in tag to 'yes' (optional)
# setAllowAnswer() to set the allowAnswer tag to 'yes' (optional)
# setLockIn(uri) to set the Lock-in tag to 'yes' and the GoodbyeLockInURI(optional)
# @uri string, GoodByeLockInURI
# setLockInCall() to set the Lock-in tag to 'call' (optional)
# setCallProtection(notif) to protect the XML object against incoming calls
# @notif to enable/disable (false by default) the display of an incoming call notification (optional)
# setAllowAnswer() to set the allowAnswer tag to 'yes' (optional only for non softkey phones)
# setAllowDrop() to set the allowDrop tag to 'yes' (optional only for non softkey phones)
# setAllowXfer() to set the allowXfer tag to 'yes' (optional only for non softkey phones)
# setAllowConf() to set the allowConf tag to 'yes' (optional only for non softkey phones)
# setTimeout(timeout) to define a specific timeout for the XML object (optional)
# addSoftkey(index,label,uri,icon_index) to add custom softkeys to the object (optional)
# @timeout integer (seconds)
# setBackgroundColor(color) to change the XML object background color (optional)
# @color string, "red", "blue", ...
# addSoftkey(index,label,uri,icon_index) to add custom soktkeys to the object (optional)
# @index integer, softkey number
# @label string
# @uri string
# @icon_index integer, icon number
# setRefresh(timeout,URL) to add Refresh parameters to the object (optional)
# @timeout integer (seconds)
# @URL string
# setEncodingUTF8() to change encoding from default ISO-8859-1 to UTF-8 (optional)
# addIcon(index,icon) to add custom icons to the object (optional)
# generate() to return the object content
# output() to display the object
# @index integer, icon index
# @icon string, icon name or definition
# generate() to return the generated XML for the object
# output(flush) to display the object
# @flush boolean optional, output buffer to be flushed out or not.
#
# Specific to the object - Single Input
# setURL(url) to set the URL to called after the input
# setType(type) to set type of input ('IP', 'string'or 'number'), 'string' by default
# @url string
# setType(type) to set type of input, 'string' by default
# @type enum ('IP', 'string', 'number', 'dateUS'...)
# setDefault(default) to set default value for the input (optional)
# setParameter(param) to set the parameter name to be parsed after the input
# @default string
# setParameter(param,color,bcolor) to set the parameter name to be parsed after the input
# @param string
# @color string, field color "red", "blue" ... (optional)
# @bcolor string, background color "red", "blue" ... (optional)
# setInputLanguage(language) to set the language of the input (optional)
# @language enum ("English", "French"....)
# setPassword() to set the Password parameter to 'yes', 'no' by default (optional)
# setNotEditable() to set the editable parameter to 'no', 'yes' by default (optional)
# setEditable() is now replaced by setNotEditable but kept for compatibility reasons (optional)
# setPrompt(prompt) to set the prompt to be displayed for the input.
# setPrompt(prompt,color) to set the prompt to be displayed for the input.
# @prompt string
# @color string, prompt color "red", "blue" ... (optional)
# setDefaultFocus() to set the default focus to 'yes'
#
# Specific to the object - Multiple Inputs
# setURL(url) to set the URL to called after the input
# setType(type) to set the default type of input ('IP', 'string'or 'number'), 'string' by default
# @url string
# setType(type) to set the default type of input 'string' by default
# @type enum ('IP', 'string', 'number', 'dateUS'...)
# setDefault(default) to set default default value for the input (optional)
# setParameter(param) to set the default parameter name to be parsed after the input
# @default string
# setParameter(param,color) to set the default parameter name to be parsed after the input
# @param string
# @color string, field color "red", "blue" ... (optional)
# setPassword() to set the default Password parameter to 'yes', 'no' by default (optional)
# setNotEditable() to set the default editable parameter to 'no', 'yes' by default (optional)
# setEditable() is now replaced by setNotEditable but kept for compatibility reasons (optional)
# setPrompt(prompt) to set the default prompt to be displayed for the input.
# setDefaultIndex(index) to define the field index the object will use to start (optional) default is 1
# setDisplayMode(display) to define the aspect of the display, normal/condensed (optional) default is normal.
# addField(type) to add an input field and setting its type (IP, string, number, dateUS, timeUS,dateInt, timeInt or empty) if the type is an empty string then the type is inherited from the main object.
# setFieldPassword(password) to set the password mode for the input field ('yes', no'), overrides the value set by setPassword for the field
# setPrompt(prompt,color) to set the default prompt to be displayed for the input.
# @prompt string
# @color string, prompt color "red", "blue" ... (optional)
# setDefaultIndex(index) to define the field index the object will use to start (optional)
# @index integer, optional, default is 1
# setDisplayMode(display) to define the aspect of the display, normal/condensed (optional)
# @display enum ("normal, "condensed"), default is "normal".
# setInputLanguage(language) to set the language of the input (optional)
# @language enum ("English", "French"....)
# addField(type,choiceURL) to add an input field and setting its type
# @type (IP, string, number, dateUS, timeUS,dateInt, timeInt, empty or choice) if the type is an empty string then the type is inherited from the main object.
# @choiceURL escape URL for choice input
# setFieldType(type,choiceURL) to set input field type
# @type (IP, string, number, dateUS, timeUS,dateInt, timeInt, empty or choice) if the type is an empty string then the type is inherited from the main object.
# @choiceURL escape URL for choice input
# setFieldPassword(password) to set the password mode for the input field, overrides the value set by setPassword for the field
# @password enum ("yes", "no")
# setFieldEditable(editable) to set the input field editable mode ('yes', no'), overrides the value set by setEditable or setNotEditable for the field
# setFieldParameter(parameter) to set the parameter name to be parsed after the global input, overrides the value set by setParameter for the field
# setFieldPrompt(prompt)to set the prompt to be displayed for the input field, overrides the value set by setPrompt for the field
# @editable enum ("yes", "no")
# setDefaultFocus() to set the default focus to 'yes'
# setFieldParameter(parameter,color) to set the parameter name to be parsed after the global input, overrides the value set by setParameter for the field
# @parameter string
# @color string, field color "red", "blue" ... (optional)
# setFieldPrompt(prompt,color)to set the prompt to be displayed for the input field, overrides the value set by setPrompt for the field
# @prompt string
# @color string, prompt color "red", "blue" ... (optional)
# setFieldSelection(selection) to set the Selection tag for the field
# @selection string
# setFieldDefault(default) to set default value for the input field, overrides the value set by setDefault for the field
# @default string
# addFieldSoftkey(index,label,uri,icon) to add custom softkeys to the input field, overrides the softkeys set by addSoftkey.
# @index integer, softkey number
# @label string
# @uri string
# @icon integer, icon number
#
# Example 1 - Single Input
# require_once('AastraIPPhoneInputScreen.class.php');
@ -95,9 +162,13 @@ class AastraIPPhoneInputScreen extends AastraIPPhone {
var $_prompt;
var $_editable='';
var $_default='';
var $_defaultfocus='';
var $_password='';
var $_defaultindex='';
var $_displaymode='';
var $_inputlanguage='';
var $_fieldcolor='';
var $_promptcolor='';
function setURL($url)
{
@ -123,9 +194,15 @@ class AastraIPPhoneInputScreen extends AastraIPPhone {
$this->_default=$default;
}
function setParameter($parameter)
function setDefaultFocus()
{
$this->_defaultfocus='yes';
}
function setParameter($parameter,$color='')
{
$this->_parameter=$parameter;
$this->_fieldcolor=$color;
}
function setPassword()
@ -133,9 +210,10 @@ class AastraIPPhoneInputScreen extends AastraIPPhone {
$this->_password='yes';
}
function setPrompt($prompt)
function setPrompt($prompt,$color='')
{
$this->_prompt=$prompt;
$this->_promptcolor=$color;
}
function setDefaultIndex($index)
@ -148,15 +226,22 @@ class AastraIPPhoneInputScreen extends AastraIPPhone {
$this->_displaymode=$display;
}
function addField($type='')
function setInputLanguage($input)
{
$this->_inputlanguage=$input;
}
function addField($type='',$choiceURL='')
{
$this->_entries[] = new AastraIPPhoneInputScreenEntry($type);
end($this->_entries);
if($type=='choice') $this->_entries[key($this->_entries)]->_choiceURL=$choiceURL;
}
function setFieldType($type)
function setFieldType($type,$choiceURL='')
{
$this->_entries[key($this->_entries)]->_type=$type;
if($type=='choice') $this->_entries[key($this->_entries)]->_choiceURL=$choiceURL;
}
function setFieldPassword($password='yes')
@ -169,14 +254,16 @@ class AastraIPPhoneInputScreen extends AastraIPPhone {
$this->_entries[key($this->_entries)]->_editable=$editable;
}
function setFieldParameter($parameter)
function setFieldParameter($parameter,$color='')
{
$this->_entries[key($this->_entries)]->_parameter=$parameter;
$this->_entries[key($this->_entries)]->_fieldcolor=$color;
}
function setFieldPrompt($prompt)
function setFieldPrompt($prompt,$color='')
{
$this->_entries[key($this->_entries)]->_prompt=$this->escape($prompt);
$this->_entries[key($this->_entries)]->_promptcolor=$color;
}
function setFieldDefault($default)
@ -184,57 +271,158 @@ class AastraIPPhoneInputScreen extends AastraIPPhone {
$this->_entries[key($this->_entries)]->_default=$default;
}
function setFieldSelection($selection)
{
$this->_entries[key($this->_entries)]->_selection=$selection;
}
function addFieldSoftkey($index, $label, $uri, $icon=NULL)
{
$this->_entries[key($this->_entries)]->_softkeys[] = new AastraIPPhoneSoftkeyEntry($index, $this->escape($label), $this->escape($uri), $icon);
}
function render()
{
$prompt = $this->escape($this->_prompt);
$url = $this->escape($this->_url);
$out = '';
$out .= "<AastraIPPhoneInputScreen type=\"$this->_type\"";
# Beginning of root tag
$out = "<AastraIPPhoneInputScreen type=\"$this->_type\"";
# Password
if($this->_password == 'yes') $out .= " password=\"yes\"";
# DestroyOnExit
if($this->_destroyOnExit == 'yes') $out .= " destroyOnExit=\"yes\"";
# CancelAction
if($this->_cancelAction != "")
{
$cancelAction = $this->escape($this->_cancelAction);
$out .= " cancelAction=\"{$cancelAction}\"";
}
# Editable
if($this->_editable=='no') $out .= " editable=\"no\"";
# Beep
if($this->_beep=='yes') $out .= " Beep=\"yes\"";
# DefaultIndex
if($this->_defaultindex!='') $out .= " defaultIndex=\"".$this->_defaultindex."\"";
# DefaultFocus
if($this->_defaultfocus!='') $out .= " defaultFocus=\"yes\"";
# InputLanguage
if($this->_inputlanguage!='') $out .= " inputLanguage=\"".$this->_inputlanguage."\"";
# Display Mode
if($this->_displaymode!='') $out .= " displayMode=\"".$this->_displaymode."\"";
if($this->_lockin=='yes') $out .= " LockIn=\"yes\"";
# Lockin
if($this->_lockin!='') {
$out .= " LockIn=\"{$this->_lockin}\"";
if($this->_lockin_uri!='') $out .= " GoodbyeLockInURI=\"".$this->escape($this->_lockin_uri)."\"";
}
# Call Protection
if($this->_callprotection!='') {
$out .= " CallProtection=\"{$this->_callprotection}\"";
}
# AllowAnswer
if($this->_allowAnswer == 'yes') $out .= " allowAnswer=\"yes\"";
# AllowDrop
if($this->_allowDrop == 'yes') $out .= " allowDrop=\"yes\"";
# AllowXfer
if($this->_allowXfer == 'yes') $out .= " allowXfer=\"yes\"";
# AllowConf
if($this->_allowConf == 'yes') $out .= " allowConf=\"yes\"";
# TimeOut
if($this->_timeout!=0) $out .= " Timeout=\"{$this->_timeout}\"";
# Background color
if ($this->_background_color!='') $out .= " bgColor=\"{$this->_background_color}\"";
# End of the root tag
$out .= ">\n";
# Title
if ($this->_title!='')
{
$title = $this->escape($this->_title);
$out .= "<Title";
if ($this->_title_wrap=='yes') $out .= " wrap=\"yes\"";
if ($this->_title_color!='') $out .= " Color=\"{$this->_title_color}\"";
$out .= ">".$title."</Title>\n";
}
if($this->_prompt != '') $out .= "<Prompt>{$prompt}</Prompt>\n";
$out .= "<URL>{$url}</URL>\n";
if($this->_parameter != '') $out .= "<Parameter>{$this->_parameter}</Parameter>\n";
$out .= "<Default>{$this->_default}</Default>\n";
foreach ($this->_entries as $entry) $out .= $entry->render();
foreach ($this->_softkeys as $softkey) $out .= $softkey->render();
$IconList=0;
foreach ($this->_icons as $icon)
# Top Title
if ($this->_toptitle!='')
{
if($IconList==0)
{
$out .= "<IconList>\n";
$IconList=1;
}
$out .= $icon->render();
$toptitle = $this->escape($this->_toptitle);
$out .= "<TopTitle";
if ($this->_toptitle_icon!='') $out .= " icon=\"{$this->_toptitle_icon}\"";
if ($this->_toptitle_color!='') $out .= " Color=\"{$this->_toptitle_color}\"";
$out .= ">".$toptitle."</TopTitle>\n";
}
if($IconList!=0) $out .= "</IconList>\n";
# Prompt
if($this->_prompt != '')
{
$prompt = $this->escape($this->_prompt);
$out .= "<Prompt";
if($this->_promptcolor != '') $out .= " Color=\"{$this->_promptcolor}\"";
$out .= ">{$prompt}</Prompt>\n";
}
# URL
$url = $this->escape($this->_url);
$out .= "<URL>{$url}</URL>\n";
# Parameter
if($this->_parameter != '')
{
$out .= "<Parameter";
if($this->_fieldcolor != '') $out .= " Color=\"{$this->_fieldcolor}\"";
if($this->_fieldbcolor != '') $out .= " Bcolor=\"{$this->_fieldbcolor}\"";
$out .= ">{$this->_parameter}</Parameter>\n";
}
# Default
$out .= "<Default>{$this->_default}</Default>\n";
# Multiple input fields
if (isset($this->_entries) && is_array($this->_entries))
{
foreach ($this->_entries as $entry) $out .= $entry->render();
}
# Softkeys
if (isset($this->_softkeys) && is_array($this->_softkeys))
{
foreach ($this->_softkeys as $softkey) $out .= $softkey->render();
}
# Icons
if (isset($this->_icons) && is_array($this->_icons))
{
$IconList=False;
foreach ($this->_icons as $icon)
{
if(!$IconList)
{
$out .= "<IconList>\n";
$IconList=True;
}
$out .= $icon->render();
}
if($IconList) $out .= "</IconList>\n";
}
# End tag
$out .= "</AastraIPPhoneInputScreen>\n";
return $out;
}

View File

@ -1,8 +1,8 @@
<?php
################################################################################
# Aastra XML API Classes - AastraIPPhoneInputScreenEntry
# Copyright Aastra Telecom 2007
# Firmware 2.0 or better
# Copyright Mitel Networks 2005-2015
#
# Internal class for AastraIPPhoneInputScreen object.
################################################################################
@ -14,7 +14,12 @@ class AastraIPPhoneInputScreenEntry {
var $_parameter='';
var $_prompt='';
var $_default='';
var $_selection='';
var $_softkeys;
var $_inputlanguage='';
var $_fieldcolor='';
var $_promptcolor='';
var $_choiceURL='';
function AastraIPPhoneInputScreenEntry($type)
{
@ -29,9 +34,22 @@ class AastraIPPhoneInputScreenEntry {
if($this->_password != '') $xml .= " password=\"".$this->_password."\"";
if($this->_editable != '') $xml .= " editable=\"".$this->_editable."\"";
$xml .= ">\n";
if($this->_prompt != '') $xml .= "<Prompt>".$this->_prompt."</Prompt>\n";
if($this->_parameter != '') $xml .= "<Parameter>".$this->_parameter."</Parameter>\n";
if($this->_prompt != '')
{
$xml .= "<Prompt";
if($this->_promptcolor != '') $xml .= " Color=\"{$this->_promptcolor}\"";
$xml .= ">".$this->_prompt."</Prompt>\n";
}
if($this->_parameter != '')
{
$xml .= "<Parameter";
if($this->_fieldcolor != '') $xml .= " Color=\"{$this->_fieldcolor}\"";
if($this->_fieldbcolor != '') $xml .= " Bcolor=\"{$this->_fieldbcolor}\"";
$xml .= ">".$this->_parameter."</Parameter>\n";
}
if($this->_selection != '') $xml .= "<Selection>".$this->_selection."</Selection>\n";
if($this->_default != '') $xml .= "<Default>".$this->_default."</Default>\n";
if($this->_choiceURL != '') $xml .= "<choiceURL>".$this->_choiceURL."</choiceURL>\n";
foreach ($this->_softkeys as $softkey) $xml .= $softkey->render();
$xml .= "</InputField>\n";
return($xml);

View File

@ -0,0 +1,69 @@
<?php
#############################################################################
# AastraIPPhoneScrollHandler
#
# Copyright Mitel Networks 2005-2015
#
# Note
# This script is a helper script of the AastraIPPhoneScrollableTextMenu
# and AastraIPPhoneScrollableDirectory class. It should only be called
# by those classes.
#
#############################################################################
#############################################################################
# PHP customization for includes and warnings
#############################################################################
$os = strtolower(PHP_OS);
if(strpos($os, "win") === false) ini_set('include_path',ini_get('include_path').':include:../include');
else ini_set('include_path',ini_get('include_path').';include;..\include');
error_reporting(E_ERROR | E_WARNING | E_PARSE);
#############################################################################
# Includes
#############################################################################
require_once('AastraCommon.php');
require_once('AastraIPPhoneTextScreen.class.php');
require_once('AastraIPPhoneScrollableTextMenu.class.php');
require_once('AastraIPPhoneScrollableDirectory.class.php');
$cookie = Aastra_getvar_safe('listCookie');
$page = Aastra_getvar_safe('listPage');
$zoomIndex = Aastra_getvar_safe('zoomIndex');
$recentSelection = Aastra_getvar_safe('recentSelection');
$recentPage = Aastra_getvar_safe('recentPage');
Aastra_trace_call('LDAP directory',$_SERVER['REQUEST_URI']);
# Get Language and HTTP header
$language = Aastra_get_language();
$header = Aastra_decode_HTTP_header();
# Load user context
$menu = Aastra_get_user_context($header['mac'],'scrollableTextMenuData');
if (!is_object($menu)) {
# If not an object: Something went wrong when fetching the user context. Display error and exit.
$object = new AastraIPPhoneTextScreen();
$object->setTitle(Aastra_get_label('Server error',$language));
$object->setText(Aastra_get_label('Context not found. Check cache directory settings.',$language));
$object->output();
exit;
}
if (!$menu->verifyCookie($cookie)) {
# If cookie does not match: Display error and exit.
$object = new AastraIPPhoneTextScreen();
$object->setTitle(Aastra_get_label('Server error',$language));
$object->setText(Aastra_get_label('Session not found. Please try again.',$language));
$object->output();
exit;
}
if ($recentSelection != "") $menu->setDefaultIndex($recentSelection);
if ($zoomIndex != "") $menu->zoom($zoomIndex,$recentPage,$recentSelection); # This means $object is of type AastraIPPhoneScrollableDirectory
else $menu->output($page);
exit;
?>

View File

@ -0,0 +1,351 @@
<?php
########################################################################################################
# Aastra XML API Classes - AastraIPPhoneScrollableDirectory
#
# Aastra SIP Phones 1.4.2 or better
#
# Copyright Mitel Networks 2005-2015
#
# Supported Aastra Phones
# All IP phones except Aastra9112i and Aastra9133i
#
# AastraIPPhoneScrollableDirectory object.
#
# Public methods
# setDialKeyPosition(position) Set position of Dial Softkey in list view. Default is 2.
# setNameDisplayFormat(format) Set name display format. 0="Firstname Lastname", 1="Lastname, Firstname"
# natsortByLastname() Sort by lastname (same as natsortByName in case firstname is not provided)
# natsortByFirstname() Sort by firstname (same as natsortByName in case firstname is not provided)
#
# Overwritten methods from AastraIPPhoneScrollableTextMenu
# setEntries(records) Set directory entries by 2 dim array. Inner array fields: See addEntry(record)
# addEntry(record) Add directory entry
# Array fields: (name is mandatory, rest optional)
# name: Lastname or name
# firstname: Firstname (optional)
# title: Title
# department: Department
# company: Company
# icon: Icon
# office: Office number display format
# officeDigits: Office number digits / extension to be dialed. Optional
# mobile: Cell number display format
# mobileDigits: Cell number digits / extension to be dialed. Optional
# home: Home number display format
# homeDigits: Home number digits / extension to be dialed. Optional
# office2: Alternative / 2nd office number display format
# office2Digits: 2nd office number digits / extension to be dialed. Optional
# speedURL: If this field is present, a "+Speed" Softkey will be shown in zoom mode. Selected number will be passed in $selection variable.
# Ex: speedURL=http://xmlserver/xml/speed/speed.php?action=add&name=Peter
#
# Inherited from AastraIPPhoneScrollableTextMenu
# setEntries(entries) Set entries of the list by an 2 dim array. Inner array field names: 'name', 'url', 'selection', 'icon', 'dial'
# verifyCookie(cookie) Verifies if the cookie of the HTTP requests matches the cookie of the saved context.
# setBackURI(URI) Set the cancel parameter with the URI to be called on Cancel or Back Softkey (optional)
# setBackKeyPosition(position) Set position of Back Softkey. Default is 3.
# setNextKeyPosition(position) Set position of Back Softkey. Default is 4.
# setPreviousKeyPosition(position) Set position of Back Softkey. Default is 5.
# setExitKeyPosition(position) Set position of Back Softkey. Default is 6.
# setSelectKeyPosition(position) Set position of Back Softkey. Default is 1.
# setNextKeyIcon(icon) Set icon of Next Softkey. Default is Icon:TailArrowDown. Set NULL to disable icon.
# setPreviousKeyIcon(icon) Set icon of Previous Softkey. Default is Icon:TailArrowUp. Set NULL to disable icon.
# disableExitKey() Disable the Exit Softkey
# setSelectKeyLabel(label) Set the label of the Select Softkey. Default is 'Select'. Make sure the string is in language.ini.
# setCancelAction(uri) to set the cancel parameter with the URI to be called on Cancel or Back Softkey (optional)
# addIcon(index,icon) to add custom icons to the object (optional)
# output() to display the object
# addEntry(name,url,selection,icon,dial) to add an element in the list to be displayed
# natsortbyname() to order the list
#
# Example:
# $records[0]['name'] = "Smith";
# $records[0]['firstname'] = "Lisa";
# $records[0]['office'] = "+1 (0) 555-123-4321";
# $records[0]['officeDigits'] = "4321";
# $records[0]['mobile'] = "079 555 12 34";
# # ... add as many entries you want
# $records[99]['name'] = "Miller";
# $records[99]['firstname'] = "Bob";
# $records[99]['office'] = "+1 (0) 555-123-1234";
# $records[99]['officeDigits'] = "1234";
# $records[99]['home'] = "044 555 22 33";
# $records[99]['company'] = "Mitel";
# $directory = new AastraIPPhoneScrollableDirectory();
# $directory->setTitle('Directory');
# $directory->setBackURI($XML_SERVER."?action=start");
# $directory->setEntries($records):
# $directory->output(); # Page scrolling and record zooming will be handled by AastraIPPhoneScrollableTextMenu
########################################################################################################
require_once('AastraIPPhoneScrollableTextMenu.class.php');
class AastraIPPhoneScrollableDirectory extends AastraIPPhoneScrollableTextMenu
{
# Variables
var $_dialKeyPosition = 2;
var $_selectKeyLabel = 'Details';
var $_index = 0;
var $_nameDisplayFormat = 0; # 0="Firstname Lastname", 1="Lastname, Firstname"
# Constructor
function AastraIPPhoneScrollableDirectory()
{
# Set default style to "none"
$this->setStyle('none');
# Set default title
$this->setTitle(Aastra_get_label('Directory',$this->_language));
# Call parent constructor
parent::AastraIPPhoneScrollableTextMenu();
}
function addEntry($record)
{
# If no name or fistname provided, skip record
if (empty($record['name']) && empty($record['firstname'])) return;
# Save lastname (needed if we want to sort by lastname)
$record['lastname'] = $record['name'];
# Set display name
if ($this->_nameDisplayFormat==0) $record['name'] = trim((isset($record['firstname'])) ? $record['firstname'] . ' ' . $record['name'] : $record['name']);
else $record['name'] = trim((isset($record['firstname'])) ? $record['name'] . ', ' . $record['firstname'] : $record['name']);
# If actual digits are not provided, use display format number.
if (empty($record['officeDigits'])) $record['officeDigits'] = $record['office'];
if (empty($record['mobileDigits'])) $record['mobileDigits'] = $record['mobile'];
if (empty($record['homeDigits'])) $record['homeDigits'] = $record['home'];
if (empty($record['office2Digits'])) $record['office2Digits'] = $record['office2'];
# Remove non-numeric digits
$record['officeDigits'] = preg_replace('/[^0-9]/','',$record['officeDigits']);
$record['mobileDigits'] = preg_replace('/[^0-9]/','',$record['mobileDigits']);
$record['homeDigits'] = preg_replace('/[^0-9]/','',$record['homeDigits']);
$record['office2Digits'] = preg_replace('/[^0-9]/','',$record['office2Digits']);
# Set instant dial number (to be dialed when hook is lifted in list view / when dial key is pressed in list view)
if (!empty($record['officeDigits'])) $record['dial'] = $record['officeDigits'];
else if (!empty($record['office2Digits'])) $record['dial'] = $record['office2Digits'];
else if (!empty($record['mobileDigits'])) $record['dial'] = $record['mobileDigits'];
else if (!empty($record['homeDigits'])) $record['dial'] = $record['homeDigits'];
$record['url'] = $this->_scrollHandlerReference.'&zoomIndex='.$this->_index;
# We need to save the index as a field as the order of $this->_list can change after sorting
$record['index'] = $this->_index;
# Add record to text menu list entries
$this->_list[$this->_index] = $record;
$this->_index++;
}
function setEntries($records)
{
# Empty list?
if (empty($records)) return;
# Clear list
$this->_list = array();
foreach ($records as $record) $this->addEntry($record);
}
function zoom($index, $recentPage, $recentSelection)
{
# Find record matching the given index
foreach ($this->_list as $record)
{
if ($record['index']==$index)
{
$myrecord = $record;
break;
}
}
# Textmenu for the zoom
$menu = new AastraIPPhoneTextMenu();
$menu->setDestroyOnExit();
if (Aastra_is_style_textmenu_supported()) $menu->setStyle('none');
if (Aastra_is_wrap_title_supported())$menu->setTitleWrap();
if (Aastra_is_textmenu_wrapitem_supported()) $menu->setWrapList();
$menu->setTitle($myrecord['name']);
# Default Index
$defaultIndex = 1;
if(!empty($myrecord['title']))
{
$menu->addEntry($myrecord['title'], NULL, NULL);
$defaultIndex++;
}
if(!empty($myrecord['department']))
{
$menu->addEntry($myrecord['department'], NULL, NULL);
$defaultIndex++;
}
if(!empty($myrecord['company']))
{
$menu->addEntry($myrecord['company'], NULL, NULL);
$defaultIndex++;
}
$menu->setDefaultIndex($defaultIndex);
# If Dial2 softkey is supported, add 'Dial:' Prefix to URL (so number can be dialed by pressing right navigation key)
if (!Aastra_test_phone_version('2.0.1.',1)) $URLprefix = 'Dial:'; else $URLprefix = '';
# Office Number
if(!empty($myrecord['office']))
{
if (Aastra_is_icons_supported())
{
$iconIndex = 10;
$prompt='';
}
else
{
$iconIndex = NULL;
$prompt=Aastra_get_label('(W)',$this->_language).' ';
}
if (!Aastra_test_phone_version('2.0.1.',1)) $menu->addEntry($prompt.$myrecord['office'], $URLprefix.$myrecord['officeDigits'], $myrecord['officeDigits'], $iconIndex, $myrecord['officeDigits']);
else $menu->addEntry($prompt.$myrecord['office'], $URLprefix.$myrecord['officeDigits'], $myrecord['officeDigits']);
}
# Office 2 number
if(!empty($myrecord['office2']))
{
if (Aastra_is_icons_supported())
{
$iconIndex = 10;
$prompt='';
}
else
{
$iconIndex = NULL;
$prompt=Aastra_get_label('(W)',$this->_language).' ';
}
if (!Aastra_test_phone_version('2.0.1.',1)) $menu->addEntry($prompt.$myrecord['office2'], $URLprefix.$myrecord['office2Digits'], $myrecord['officeDigits'], $iconIndex, $myrecord['office2Digits']);
else $menu->addEntry($prompt.$myrecord['office2'], $URLprefix.$myrecord['office2Digits'], $myrecord['officeDigits']);
}
# Mobile number
if(!empty($myrecord['mobile']))
{
if (Aastra_is_icons_supported())
{
$iconIndex = 11;
$prompt='';
}
else
{
$iconIndex = NULL;
$prompt=Aastra_get_label('(C)',$this->_language).' ';
}
if (!Aastra_test_phone_version('2.0.1.',1)) $menu->addEntry($prompt.$myrecord['mobile'], $URLprefix.$myrecord['mobileDigits'], $myrecord['officeDigits'], $iconIndex, $myrecord['mobileDigits']);
else $menu->addEntry($prompt.$myrecord['mobile'], $URLprefix.$myrecord['mobileDigits'], $myrecord['officeDigits']);
}
# Home number
if(!empty($myrecord['home']))
{
if (Aastra_is_icons_supported())
{
$iconIndex = 12;
$prompt='';
}
else
{
$iconIndex = NULL;
$prompt=Aastra_get_label('(H)',$this->_language).' ';
}
if (!Aastra_test_phone_version('2.0.1.',1)) $menu->addEntry($prompt.$myrecord['home'], $URLprefix.$myrecord['homeDigits'], $myrecord['officeDigits'], $iconIndex, $myrecord['homeDigits']);
else $menu->addEntry($prompt.$myrecord['home'], $URLprefix.$myrecord['homeDigits'], $myrecord['officeDigits']);
}
# Softkeys
if (Aastra_is_softkeys_supported())
{
if (Aastra_number_softkeys_supported()!=10)
{
# Regular phone with 6 softkeys
if (!Aastra_test_phone_version('2.0.1.',1)) $dialKeyType = 'SoftKey:Dial2';
else $dialKeyType = 'SoftKey:Dial';
$menu->addSoftkey(1, Aastra_get_label('Dial',$this->_language), $dialKeyType);
$menu->addSoftkey(3, Aastra_get_label('Back',$this->_language), $this->_scrollHandlerReference.'&listPage='.$recentPage.'&recentSelection='.$recentSelection);
$menu->addSoftkey(6, Aastra_get_label('Exit',$this->_language), 'SoftKey:Exit');
# Check if speed dial URL is set
if (isset($myrecord['speedURL'])) $menu->addSoftkey(4, Aastra_get_label('Add to Speed Dial',$this->_language), $myrecord['speedURL']);
}
else
{
# 6739i
$menu->addSoftkey(9, Aastra_get_label('Back',$this->_language), $this->_scrollHandlerReference.'&listPage='.$recentPage.'&recentSelection='.$recentSelection,8);
$menu->addSoftkey(10, Aastra_get_label('Exit',$this->_language), 'SoftKey:Exit',9);
# Check if speed dial URL is set
if (isset($myrecord['speedURL'])) $menu->addSoftkey(6, Aastra_get_label('+Speed',$this->_language), $myrecord['speedURL']);
}
}
# Icons
if(Aastra_is_icons_supported())
{
if(Aastra_phone_type()!=5)
{
$menu->addIcon(10,Aastra_get_custom_icon('Office'));
$menu->addIcon(11,Aastra_get_custom_icon('Cellphone'));
$menu->addIcon(12,Aastra_get_custom_icon('Home'));
}
else
{
$menu->addIcon(8,'Icon:ArrowLeft');
$menu->addIcon(9,'Icon:CircleRed');
$menu->addIcon(10,'Icon:Office');
$menu->addIcon(11,'Icon:CellPhone');
$menu->addIcon(12,'Icon:Home');
}
}
# Cancel action
$menu->setCancelAction($this->_scrollHandlerReference.'&listPage='.$recentPage.'&recentSelection='.$recentSelection);
# Display XML object
$menu->output();
}
function _setupSoftKeys()
{
# Check if softkeys and the Dial2 softkey is supported. Don't put dial key on 6739i
if (Aastra_is_softkeys_supported() && !Aastra_test_phone_version('2.0.1.',1) && Aastra_phone_type()!=5) $this->addSoftkey($this->_dialKeyPosition, Aastra_get_label('Dial',$this->_language), 'SoftKey:Dial2');
parent::_setupSoftKeys();
}
function setDialKeyPosition($position)
{
$this->_dialKeyPosition = $position;
}
function setNameDisplayFormat($format)
{
$this->_nameDisplayFormat = $format;
}
function natsortByLastname()
{
if (empty($this->_list)) return;
$tmpary = array();
foreach ($this->_list as $id => $entry) $tmpary[$id] = $entry['lastname'];
natsort($tmpary);
foreach ($tmpary as $key => $valude) $new[] = $this->_list[$key];
$this->_list = $new;
}
function natsortByFirstname()
{
if (empty($this->_list)) return;
$tmpary = array();
foreach ($this->_list as $id => $entry) $tmpary[$id] = $entry['firstname'];
natsort($tmpary);
foreach ($tmpary as $key => $valude) $new[] = $this->_list[$key];
$this->_list = $new;
}
}
?>

View File

@ -0,0 +1,383 @@
<?php
########################################################################################################
# Aastra XML API Classes - AastraIPPhoneScrollableTextMenu
#
# Aastra SIP Phones 1.4.2 or better
#
# Copyright Mitel Networks 2005-2015
#
# Supported Aastra Phones
# All IP phones except Aastra9112i and Aastra9133i
#
# AastraIPPhoneScrollableTextMenu object.
#
# Public methods
# setEntries(entries) Set entries of the list by 2 dim array. Inner array field names: 'name', 'url', 'selection', 'icon', 'dial'
# verifyCookie(cookie) Verifies if the cookie of the HTTP requests matches the cookie of the saved context.
# setBackURI(URI) Set the cancel parameter with the URI to be called on Cancel or Back Softkey (optional)
# setBackKeyPosition(position) Set position of Back Softkey. Default is 3.
# setNextKeyPosition(position) Set position of Next Softkey. Default is 4.
# setPreviousKeyPosition(position) Set position of Previous Softkey. Default is 5.
# setExitKeyPosition(position) Set position of Back Softkey. Default is 6.
# setSelectKeyPosition(position) Set position of Back Softkey. Default is 1.
# setNextKeyIcon(icon) Set icon of Next Softkey. Default is Icon:TailArrowDown. Set NULL to disable icon.
# setPreviousKeyIcon(icon) Set icon of Previous Softkey. Default is Icon:TailArrowUp. Set NULL to disable icon.
# disableExitKey() Disable the Exit Softkey
# setSelectKeyLabel(label) Set the label of the Select Softkey. Default is 'Select'. Make sure the string is in language.ini.
#
# Overwritten methods from AastraIPPhoneTextMenu
# setCancelAction(uri) to set the cancel parameter with the URI to be called on Cancel or Back Softkey (optional)
# output() to display the object
# addEntry(name,url,selection,icon,dial) to add an element in the list to be displayed
# natsortbyname() to order the list
#
# Inherited from AastraIPPhoneTextMenu
# setTitle(Title) to setup the title of an object (optional)
# setTitleWrap() to set the title to be wrapped on 2 lines (optional)
# setTopTitle(title,color,icon_index) to set the Top Title of the XML screen (6739i only)
# setDestroyOnExit() to set DestroyOnExit parameter to "yes" (optional)
# setBeep() to enable a notification beep with the object (optional)
# setLockIn(uri) to set the Lock-in tag to 'yes' and the GoodbyeLockInURI (optional)
# setAllowAnswer() to set the allowAnswer tag to 'yes' (optional)
# setTimeout(timeout) to define a specific timeout for the XML object (optional)
# addSoftkey(index,label,uri,icon_index) to add custom softkeys to the object (optional)
# setRefresh(timeout,URL) to add Refresh parameters to the object (optional)
# generate() to return the object content
# setDefaultIndex(index) to set the default selection in the list (optional)
# setStyle(style) to set the style of the list numbered/none/radio (optional)
# setWrapList() to allow 2 lines items (optional)
#
# Example 1:
# $menu = new AastraIPPhoneScrollableTextMenu();
# $menu->setTitle('My Menu');
# $menu->addEntry('Choice 1', $XML_SERVER."?choice=1", '1');
# # ... add as many entries you want
# $menu->addEntry('Choice 100', $XML_SERVER."?choice=100", '100');
# $menu->output(); # Page scrolling will be handled by AastraIPPhoneScrollableTextMenu
#
# Example 2:
# $entries[0]['name'] = "Choice 1";
# $entries[0]['url'] = $XML_SERVER."?choice=1";
# $entries[0]['selection'] = "1";
# # ... add as many entries you want
# $entries[99]['name'] = "Choice 100";
# $entries[99]['url'] = $XML_SERVER."?choice=100";
# $entries[99]['selection'] = "100";
# $menu = new AastraIPPhoneScrollableTextMenu();
# $menu->setTitle('My Menu');
# $menu->setEntries($entries):
# $menu->output(); # Page scrolling will be handled by AastraIPPhoneScrollableTextMenu
#
########################################################################################################
require_once('AastraCommon.php');
require_once('AastraIPPhoneTextMenu.class.php');
class AastraIPPhoneScrollableTextMenu extends AastraIPPhoneTextMenu {
var $_language;
var $_list = array(); # All entries of the list
var $_count = 0; # Total number of entries
var $_cookie; # Cookie - unique per AastraIPPhoneScrollableTextMenu instance
var $_header;
var $_scrollHandlerReference;
var $_backCancelURL;
var $_maxLines;
var $_exitKeyDisabled;
var $_selectKeyLabel = 'Select';
var $_backKeyPosition = 3;
var $_exitKeyPosition = 6;
var $_selectKeyPosition = 1;
var $_nextKeyPosition = 4;
var $_previousKeyPosition = 5;
var $_backKeyIconIndex = 8;
var $_selectKeyIconIndex = 9;
var $_exitKeyIconIndex = 10;
var $_nextKeyIconIndex = 11;
var $_previousKeyIconIndex = 12;
var $_nextKeyIcon = 'Icon:TailArrowDown';
var $_previousKeyIcon = 'Icon:TailArrowUp';
# Constructor
function AastraIPPhoneScrollableTextMenu()
{
# Get Language
$this->_language = Aastra_get_language();
# Decode HTTP header
$this->_header = Aastra_decode_HTTP_header();
# Generate new cookie
$this->_cookie = $this->_generateCookie();
# Generate Scroll Handler reference
global $XML_HTTP, $AA_XML_SERVER, $AA_XMLDIRECTORY;
$this->_scrollHandlerReference = $XML_HTTP.$AA_XML_SERVER."/".$AA_XMLDIRECTORY."/include/AastraIPPhoneScrollHandler.php?listCookie=".$this->_cookie;
# Calculate max linex
$this->_calculateMaxLines();
# Modify some values for 6739i
if(Aastra_number_softkeys_supported()==10)
{
$this->_exitKeyPosition = 10;
$this->_nextKeyPosition = 8;
$this->_previousKeyPosition = 7;
$this->_selectKeyPosition = 3;
}
}
function addEntry($name, $url, $selection=NULL, $icon=NULL, $dial=NULL)
{
$entry['name'] = $name;
$entry['url'] = $url;
$entry['selection'] = $selection;
$entry['icon'] = $icon;
$entry['dial'] = $dial;
$this->_list[] = $entry;
}
function setEntries($entries)
{
$this->_list = $entries;
}
function output($page=NULL)
{
# Test phone firmware / model
Aastra_test_phone_version('1.4.2.',0);
Aastra_test_phone_model(array('Aastra9112i','Aastra9133i'),False,0);
# Force destroyOnExit
$this->_destroyOnExit = 'yes';
# Initial call?
if (!isset($page))
{
# Count number of entries in list
$this->_count = count($this->_list);
# Setup icons
$this->_setupIcons();
# Setup Softkeys
$this->_setupSoftKeys();
# Set Cancel URI
if (!empty($this->_backCancelURL)) parent::setCancelAction($this->_backCancelURL);
# Do some security / compliancy checks
# Protect against wrap list bug in FW < R2.4.0
if (Aastra_test_phone_version('2.4.0.',1)) $this->_wraplist = 'no';
if (!Aastra_is_wrap_title_supported())$this->_wraplist = 'no';
if (!Aastra_is_textmenu_wrapitem_supported()) $this->_title_wrap = 'no';
if (!Aastra_is_style_textmenu_supported()) $this->_style = '';
if (!Aastra_is_lockin_supported()) $this->_lockin = 'no';
# Save object in user context (context = mac address)
Aastra_save_user_context($this->_header['mac'],'scrollableTextMenuData',$this);
}
else
{
# If beep is set, only beep during initial call
$this->_beep='no';
}
# Generate the actual items of the menu for the given page
$this->_generatePage($page);
parent::output();
}
function _generatePage($page)
{
# Empty List protection (to avoid 'cannot display')
if ($this->_count==0)
{
$tmpEntry['name'] = '[NO ENTRIES]';
$this->_list[] = $tmpEntry;
$this->_count++;
}
# Calculate total number of pages
$last = ceil($this->_count / $this->_maxLines);
# Invalid page protection
if (empty($page) or $page < 1) $page = 1;
if ($page > $last) $page = $last;
# On phones without softkeys: Add dummy entry that allows to jump to previous page
if (!Aastra_is_softkeys_supported() && ($page > 1 && $last > 1)) $this->_entries[] = new AastraIPPhoneTextMenuEntry('['.Aastra_get_label('Previous Page',$this->_language).']', $this->_scrollHandlerReference.'&listPage='.($page-1), NULL, NULL, NULL, NULL,NULL);
# Populate list for current page
for ($i = 0; ($i < $this->_maxLines and ($i + (($page - 1) * $this->_maxLines)) < $this->_count); $i++)
{
# Get entry from list
$tmpEntry = $this->_list[$i + (($page - 1) * $this->_maxLines)];
# Add 'recentSelection' and 'recentPage' attribute to URL of the entry.
# Allows to jump back to same page / selection
$tmpURI = $tmpEntry['url'];
# Check if URI is an HTTP(S) URL (could also be an URI like Dial:1234)
if (preg_match('/^http/i',$tmpURI))
{
# Check if URL already contains parameters
if (preg_match('/\?/',$tmpURI)) $tmpEntry['url'] = $tmpEntry['url'].'&recentSelection='.($i+1).'&recentPage='.$page;
else $tmpEntry['url'] = $tmpEntry['url'].'?recentSelection='.($i+1).'&recentPage='.$page;
}
# Make sure we don't add menu items the phone firmware cannot handle
if (!Aastra_is_icons_supported()) $tmpEntry['icon'] = NULL;
if (Aastra_test_phone_version('2.0.1.',1)) $tmpEntry['dial'] = NULL;
$this->_entries[] = new AastraIPPhoneTextMenuEntry($tmpEntry['name'], $tmpEntry['url'], $tmpEntry['selection'], $tmpEntry['icon'], $tmpEntry['dial'], NULL, NULL, NULL, NULL);
}
# On phones without softkeys: Add dummy entry that allows to jump to next page
if (!Aastra_is_softkeys_supported() && ($page < $last)) $this->_entries[] = new AastraIPPhoneTextMenuEntry('['.Aastra_get_label('Next Page',$this->_language).']', $this->_scrollHandlerReference.'&listPage='.($page+1), NULL, NULL, NULL, NULL,NULL);
# On phones with softkeys:Add Next/Previous Softkeys
if(Aastra_is_softkeys_supported())
{
if ($page < $last)
{
# Add Next key
if (Aastra_is_icons_supported() && !empty($this->_nextKeyIcon)) $this->addSoftkey($this->_nextKeyPosition, Aastra_get_label('Next',$this->_language), $this->_scrollHandlerReference.'&listPage='.($page+1), $this->_nextKeyIconIndex);
else $this->addSoftkey($this->_nextKeyPosition, Aastra_get_label('Next',$this->_language), $this->_scrollHandlerReference.'&listPage='.($page+1));
}
if ($page > 1 && $last > 1)
{
# Add Previous key
if (Aastra_is_icons_supported() && !empty($this->_previousKeyIcon)) $this->addSoftkey($this->_previousKeyPosition, Aastra_get_label('Previous',$this->_language), $this->_scrollHandlerReference.'&listPage='.($page-1), $this->_previousKeyIconIndex);
else $this->addSoftkey($this->_previousKeyPosition, Aastra_get_label('Previous',$this->_language), $this->_scrollHandlerReference.'&listPage='.($page-1));
}
}
# Add page info to title
if ($last > 1)
{
# For phones with big screen
if (Aastra_is_softkeys_supported()) $this->_title = $this->_title.' ('.Aastra_get_label('Pg.',$this->_language).' '.$page.'/'.$last.')';
# For 3 line phones
else $this->_title = $this->_title.' ('.$page.'/'.$last.')';
}
}
function _calculateMaxLines()
{
$this->_maxLines = Aastra_max_items_textmenu();
if(!Aastra_is_softkeys_supported()) $this->_maxLines = $this->_maxLines - 2;
}
function _setupIcons()
{
if (Aastra_is_icons_supported())
{
$this->addIcon($this->_nextKeyIconIndex, $this->_nextKeyIcon);
$this->addIcon($this->_previousKeyIconIndex, $this->_previousKeyIcon);
if(Aastra_phone_type()==5)
{
# 6739i
$this->addIcon($this->_backKeyIconIndex,'Icon:ArrowLeft');
$this->addIcon($this->_selectKeyIconIndex,'Icon:Information');
$this->addIcon($this->_exitKeyIconIndex,'Icon:CircleRed');
}
}
}
function _setupSoftKeys()
{
if (Aastra_is_softkeys_supported())
{
if(Aastra_phone_type()!=5)
{
# non 6739i
$this->addSoftkey($this->_selectKeyPosition, Aastra_get_label($this->_selectKeyLabel,$this->_language), 'SoftKey:Select');
if (!$this->_exitKeyDisabled) $this->addSoftkey($this->_exitKeyPosition, Aastra_get_label('Exit',$this->_language), 'SoftKey:Exit');
if (!empty($this->_backCancelURL)) $this->addSoftkey($this->_backKeyPosition, Aastra_get_label('Back',$this->_language), $this->_backCancelURL);
}
else
{
# 6739i SoftKey:Select not yet supported
#$this->addSoftkey($this->_selectKeyPosition, Aastra_get_label($this->_selectKeyLabel,$this->_language), 'SoftKey:Select',$this->_selectKeyIconIndex);
if (!$this->_exitKeyDisabled) $this->addSoftkey($this->_exitKeyPosition, Aastra_get_label('Exit',$this->_language), 'SoftKey:Exit',$this->_exitKeyIconIndex);
if (!empty($this->_backCancelURL)) $this->addSoftkey($this->_backKeyPosition, Aastra_get_label('Back',$this->_language), $this->_backCancelURL,$this->_backKeyIconIndex);
}
}
}
function _generateCookie()
{
return md5(time().rand());
}
function verifyCookie($cookie)
{
return ($this->_cookie == $cookie);
}
function setBackURI($URI)
{
$this->_backCancelURL = $URI;
}
function setBackKeyPosition($position)
{
$this->_backKeyPosition = $position;
}
function setNextKeyPosition($position)
{
$this->_nextKeyPosition = $position;
}
function setPreviousKeyPosition($position)
{
$this->_previousKeyPosition = $position;
}
function setExitKeyPosition($position)
{
$this->_exitKeyPosition = $position;
}
function setSelectKeyPosition($position)
{
$this->_selectKeyPosition = $position;
}
function setNextKeyIcon($icon=NULL)
{
$this->_nextKeyIcon = $icon;
}
function setPreviousKeyIcon($icon=NULL)
{
$this->_previousKeyIcon = $icon;
}
function disableExitKey()
{
$this->_exitKeyDisabled = 1;
}
function setSelectKeyLabel($label)
{
$this->_selectKeyLabel = $label;
}
function setCancelAction($cancelAction)
{
$this->_backCancelURL = $cancelAction;
}
function natsortByName()
{
if (empty($this->_list)) return;
$tmpary = array();
foreach ($this->_list as $id => $entry) $tmpary[$id] = $entry['name'];
natsort($tmpary);
foreach ($tmpary as $key => $value) $new[] = $this->_list[$key];
$this->_list = $new;
}
}
?>

View File

@ -0,0 +1,77 @@
<?php
########################################################################################################
# Aastra XML API Classes - AastraIPPhoneConfiguration
# Copyright Mitel Networks 2005-2016
#
# AastraIPPhoneConfiguration object.
#
# Public methods
#
# Inherited from AastraIPPhone
# setBeep() to enable a notification beep with the object (optional)
# setEncodingUTF8() to change encoding from default ISO-8859-1 to UTF-8 (optional)
# generate() to return the generated XML for the object
# output(flush) to display the object
# @flush boolean optional, output buffer to be flushed out or not.
#
# Specific to the object
# addEntry(parameter,value,type) to add a configuration change
# @parameter string, parameter name
# @value string, parameter value
# @type string, conmfiguration change type (optional)
# setTriggerDestroyOnExit() to set the triggerDestroyOnExit tag to
# "yes" (optional)
#
# Example
# require_once('AastraIPPhoneConfiguration.class.php');
# $configuration = new AastraIPPhoneConfiguration();
# $configuration->addEntry('topsoftkey1 label','Test');
# $configuration->addEntry('topsoftkey1 background color','blue');
# $configuration->output();
#
########################################################################################################
require_once('AastraIPPhone.class.php');
require_once('AastraIPPhoneSoftkeyParam.class.php');
class AastraIPPhoneSoftkey extends AastraIPPhone {
var $_triggerDestroyOnExit='';
function addEntry($parameter, $value)
{
$this->_entries[] = new AastraIPPhoneSoftkeyParam($parameter, $value);
}
function setTriggerDestroyOnExit()
{
$this->_triggerDestroyOnExit="yes";
}
function render()
{
# Beginning of root tag
$out = "<AastraIPPhoneSoftkey";
# Beep
if($this->_beep=='yes') $out .= " Beep=\"yes\"";
# TriggerDestroyOnExit
if($this->_triggerDestroyOnExit=='yes') $out .= " triggerDestroyOnExit=\"yes\"";
# End of root tag
$out .= ">\n";
# Configuration Items
if (isset($this->_entries) && is_array($this->_entries))
{
foreach ($this->_entries as $entry) $out .= $entry->render();
}
# End tag
$out .= "</AastraIPPhoneSoftkey>\n";
# Return XML object
return($out);
}
}
?>

View File

@ -1,8 +1,8 @@
<?php
################################################################################
# Aastra XML API Classes - AastraIPPhoneSoftkeyEntry
# Copyright Aastra Telecom 2007
# Firmware 2.0 or better
# Copyright Mitel Networks 2005-2015
#
# Internal class for AastraIPPhone object.
################################################################################
@ -12,21 +12,26 @@ class AastraIPPhoneSoftkeyEntry {
var $_label;
var $_uri;
var $_icon;
var $_color;
function AastraIPPhoneSoftkeyEntry($index, $label, $uri, $icon)
function AastraIPPhoneSoftkeyEntry($index, $label, $uri, $icon, $color)
{
$this->_index = $index;
$this->_label = $label;
$this->_uri = $uri;
$this->_icon = $icon;
$this->_color = $color;
}
function render()
{
$xml = "<SoftKey index=\"".$this->_index."\"";
$index=$this->_index;
$xml = "<SoftKey index=\"".$index."\"";
if($this->_icon!=NULL) $xml.= " icon=\"".$this->_icon."\"";
$xml .= ">\n";
$xml .= "<Label>".$this->_label."</Label>\n";
$xml .= "<Label";
if($this->_color!='') $xml.= " Color=\"".$this->_color."\"";
$xml .=">".$this->_label."</Label>\n";
$xml .= "<URI>".$this->_uri."</URI>\n";
$xml .= "</SoftKey>\n";
return($xml);

View File

@ -0,0 +1,42 @@
<?php
################################################################################
# Aastra XML API Classes - AastraIPPhoneSoftkeyParam
# Firmware 2.0 or better
# Copyright Mitel Networks 2005-2015
#
# Internal class for AastraIPPhoneConfiguration object.
################################################################################
class AastraIPPhoneSoftkeyParam extends AastraIPPhone {
var $_parameter;
var $_value;
function AastraIPPhoneSoftkeyParam($parameter, $value)
{
$this->setParameter($parameter);
$this->setValue($value);
}
function setParameter($parameter)
{
$this->_parameter = $parameter;
}
function setValue($value)
{
$this->_value = $value;
}
function render()
{
$parameter = $this->escape($this->_parameter);
$value = $this->escape($this->_value);
$xml = "<SoftkeyItem>\n";
$xml .= "<Parameter>".$parameter."</Parameter>\n";
$xml .= "<Value>".$value."</Value>\n";
$xml .= "</SoftkeyItem>\n";
return($xml);
}
}
?>

View File

@ -1,24 +1,31 @@
<?php
########################################################################################################
# Aastra XML API Classes - AastraIPPhoneStatus
# Copyright Aastra Telecom 2007
# Copyright Mitel Networks 2005-2015
#
# AastraIPPhoneStatus object.
#
# Public methods
#
# Inherited from AastraIPPhone
# output() to display the object
# generate() to return the object content
# setBeep() to enable a notification beep with the object (optional)
# setEncodingUTF8() to change encoding from default ISO-8859-1 to UTF-8 (optional)
# generate() to return the generated XML for the object
# output(flush) to display the object
# @flush boolean optional, output buffer to be flushed out or not.
#
# Specific to the object
# setSession(session) to setup the session ID
# setTriggerDestroyOnExit() to set the triggerDestroyOnExit tag to
# "yes" (optional)
# addEntry(index,message,type,timeout) to add a message to be displayed
# on the idle screen.
# @session string
# setTriggerDestroyOnExit() to set the triggerDestroyOnExit tag to "yes" (optional)
# addEntry(index,message,type,timeout,uri,icon,color) to add a message to be displayed on the idle screen.
# @index integer
# @message string
# @type enum ("alert","icon") optional
# @timeout integer (seconds) optional
# @uri uri to call when message/alert pressed optional, only for 6739i
# @icon icon index 6739i only, optional
# @color label color, 6739i only, optional
#
# Example
# require_once('AastraIPPhoneStatus.class.php');
@ -48,21 +55,65 @@ class AastraIPPhoneStatus extends AastraIPPhone {
$this->_triggerDestroyOnExit="yes";
}
function addEntry($index, $message, $type='', $timeout=NULL)
function addEntry($index, $message, $type='', $timeout=NULL, $uri='', $icon=0, $color='')
{
$this->_entries[] = new AastraIPPhoneStatusEntry($index, $message, $type, $timeout);
$this->_entries[] = new AastraIPPhoneStatusEntry($index, $message, $type, $timeout, $uri, $icon, $color);
}
function addMessage($index, $message, $timeout=NULL, $uri='', $icon=0, $color='')
{
$this->_entries[] = new AastraIPPhoneStatusEntry($index, $message, '', $timeout, $uri, $icon, $color);
}
function addToaster($message, $uri='', $icon=0)
{
$this->_entries[] = new AastraIPPhoneStatusEntry('0', $message, 'toaster', NULL, $uri, $icon, '');
}
function render()
{
$session = $this->escape($this->_session);
# Beginning of root tag
$out = "<AastraIPPhoneStatus";
# Beep
if($this->_beep=='yes') $out .= " Beep=\"yes\"";
# TriggerDestroyOnExit
if($this->_triggerDestroyOnExit=='yes') $out .= " triggerDestroyOnExit=\"yes\"";
# End of root tag
$out .= ">\n";
# Session
$session = $this->escape($this->_session);
$out .= "<Session>".$session."</Session>\n";
foreach ($this->_entries as $entry) $out .= $entry->render();
# Status Items
if (isset($this->_entries) && is_array($this->_entries))
{
foreach ($this->_entries as $entry) $out .= $entry->render();
}
# Icons
if (isset($this->_icons) && is_array($this->_icons))
{
$IconList=False;
foreach ($this->_icons as $icon)
{
if(!$IconList)
{
$out .= "<IconList>\n";
$IconList=True;
}
$out .= $icon->render();
}
if($IconList) $out .= "</IconList>\n";
}
# End tag
$out .= "</AastraIPPhoneStatus>\n";
# Return XML object
return($out);
}
}

View File

@ -1,8 +1,7 @@
<?php
################################################################################
# Aastra XML API Classes - AastraIPPhoneStatusEntry
# Copyright Aastra Telecom 2007
# Copyright Mitel Networks 2005-2015
#
# Internal class for AastraIPPhoneStatus object.
################################################################################
@ -10,53 +9,41 @@
class AastraIPPhoneStatusEntry extends AastraIPPhone {
var $_index;
var $_message;
var $_type='';
var $_timeout=0;
var $_type='';
var $_timeout=0;
var $_uri='';
var $_color='';
var $_icon=0;
function AastraIPPhoneStatusEntry($index, $message, $type='', $timeout=NULL)
{
$this->setIndex($index);
$this->setMessage($message);
$this->setType($type);
$this->setTimeout($timeout);
}
function setIndex($index)
function AastraIPPhoneStatusEntry($index, $message, $type='', $timeout=NULL, $uri='', $icon=0, $color)
{
$this->_index = $index;
}
function setMessage($message)
{
$this->_message = $message;
}
function setType($type)
{
$this->_message = $this->convert_high_ascii($message);
$this->_type = $type;
}
function setTimeout($timeout)
{
$this->_timeout = $timeout;
$this->_uri = $uri;
$this->_icon = $icon;
$this->_color = $color;
}
function render()
{
$index = $this->escape($this->_index);
$message = $this->escape($this->_message);
$type = $this->escape($this->_type);
$timeout = $this->_timeout;
$uri = $this->escape($this->_uri);
$xml = "<Message index=\"{$index}\"";
if ($this->_color!='') $xml .= " Color=\"{$this->_color}\"";
if ($type!='')
{
$xml .= " type=\"{$type}\"";
if ($timeout!=NULL) $xml .= " Timeout=\"{$timeout}\"";
}
if ($uri!='') $xml .= " URI=\"{$uri}\"";
if($this->_icon!=0) $xml .= " icon=\"{$this->_icon}\"";
$xml .= ">{$message}</Message>\n";
return($xml);
}
}
?>
?>

View File

@ -1,8 +1,7 @@
<?php
########################################################################################################
# Aastra XML API Classes - AastraIPPhoneTextMenu
# Copyright Aastra Telecom 2007
# Copyright Mitel Networks 2005-2015
#
# AastraIPPhoneTextMenu object.
#
@ -10,25 +9,77 @@
#
# Inherited from AastraIPPhone
# setTitle(Title) to setup the title of an object (optional)
# @title string
# setTitleWrap() to set the title to be wrapped on 2 lines (optional)
# setDestroyOnExit() to set DestroyOnExit parameter to "yes" (optional)
# setTopTitle(title,color,icon_index) to set the Top Title of the XML screen (6739i only)
# @title string
# @color string, "red", "blue", ... (optional)
# @icon_index integer, icon number
# setCancelAction(uri) to set the cancel parameter with the URI to be called on Cancel (optional)
# @uri string
# setDestroyOnExit() to set DestroyonExit parameter to 'yes', 'no' by default (optional)
# setBeep() to enable a notification beep with the object (optional)
# setLockIn() to set the Lock-in tag to 'yes' (optional)
# setAllowAnswer() to set the allowAnswer tag to 'yes' (optional)
# setLockIn(uri) to set the Lock-in tag to 'yes' and the GoodbyeLockInURI(optional)
# @uri string, GoodByeLockInURI
# setLockInCall() to set the Lock-in tag to 'call' (optional)
# setCallProtection(notif) to protect the XML object against incoming calls
# @notif to enable/disable (false by default) the display of an incoming call notification (optional)
# setAllowAnswer() to set the allowAnswer tag to 'yes' (optional only for non softkey phones)
# setAllowDrop() to set the allowDrop tag to 'yes' (optional only for non softkey phones)
# setAllowXfer() to set the allowXfer tag to 'yes' (optional only for non softkey phones)
# setAllowConf() to set the allowConf tag to 'yes' (optional only for non softkey phones)
# setTimeout(timeout) to define a specific timeout for the XML object (optional)
# addSoftkey(index,label,uri,icon_index) to add custom softkeys to the object (optional)
# addIcon(index,icon) to add custom icons to the object (optional)
# @timeout integer (seconds)
# setBackgroundColor(color) to change the XML object background color (optional)
# @color string, "red", "blue", ...
# addSoftkey(index,label,uri,icon_index) to add custom soktkeys to the object (optional)
# @index integer, softkey number
# @label string
# @uri string
# @icon_index integer, icon number
# setRefresh(timeout,URL) to add Refresh parameters to the object (optional)
# generate() to return the object content
# output() to display the object
# @timeout integer (seconds)
# @URL string
# setEncodingUTF8() to change encoding from default ISO-8859-1 to UTF-8 (optional)
# addIcon(index,icon) to add custom icons to the object (optional)
# @index integer, icon index
# @icon string, icon name or definition
# generate() to return the generated XML for the object
# output(flush) to display the object
# @flush boolean optional, output buffer to be flushed out or not.
#
# Specific to the object
# setDefaultIndex(index) to set the default selection in the list (optional)
# setStyle(style) to set the style of the list numbered/none/radio (optional)
# addEntry(name,url,selection,icon,dial) to add an element in the list to be displayed, at
# least one is needed.
# natsortbyname() to order the list
# @index index (1-30)
# setStyle(style) to set the style of the list (optional)
# @style enum (numbered/none/radio)
# setWrapList() to allow 2 lines items (optional)
# setScrollConstrain() to avoid the list to wrap
# setNumberLaunch() to allow number selection
# setTouchLaunch() to allow item direct selection (6873i only)
# setNoFontMono() to allow the override of the monotype font with a proportional font (6867i. 6869i and 6873i only)
# setBase(base) to configure the menuItem base URI
# @base string
# resetBase() to reset the menuItem base URI
# addEntry(name,url,selection,icon,dial,line,color,split,iconr1,iconr2,iconr3,iconr4) to add an element in the list to be displayed
# @name string or array(0=>Line1,1=>Line2,2=>Offset,3=>Char,4=>Mode)
# @url string
# @selection string (optional)
# @icon integer (optional)
# @dial string, phone number to dial (optional)
# @line integer, SIP line to use (optional)
# @color string, "red", "black", ... (optional)
# @split integer, position of the split between line 1 and line 2 (optional)
# @iconr1 integer (optional)
# @iconr2 integer (optional)
# @iconr3 integer (optional)
# @iconr4 integer (optional)
# setScrollUp(uri) to set the URI to be called when the user presses the Up arrow (optional)
# @uri string
# setScrollDown(uri) to set the URI to be called when the user presses the Down arrow (optional)
# @uri string
# setUnitScroll() to set the unitScroll tag to yes which changes the scrolling behavior on the 6739i (optional and 6739i only)
# natsortbyname() to order the list, must not be use in conjunction with setBase or resetBase
#
# Example 1
# require_once('AastraIPPhoneTextMenu.class.php');
@ -62,13 +113,21 @@
# $menu->output();
#
########################################################################################################
require_once('AastraIPPhone.class.php');
require_once('AastraIPPhoneTextMenuEntry.class.php');
class AastraIPPhoneTextMenu extends AastraIPPhone {
var $_defaultIndex="";
var $_style="";
var $_defaultIndex='';
var $_style='';
var $_wraplist='';
var $_maxitems='30';
var $_scrollConstrain='';
var $_numberLaunch='';
var $_touchLaunch='';
var $_scrollUp='';
var $_scrollDown='';
var $_unitScroll='';
var $_fontMono='';
function setDefaultIndex($defaultIndex)
{
@ -80,65 +139,231 @@ class AastraIPPhoneTextMenu extends AastraIPPhone {
$this->_style = $style;
}
function addEntry($name, $url, $selection=NULL, $icon=NULL, $dial=NULL)
function addEntry($name, $url, $selection=NULL, $icon=NULL, $dial=NULL, $line=NULL, $color='', $split=NULL, $iconRight1=NULL, $iconRight2=NULL, $iconRight3=NULL, $iconRight4=NULL)
{
$this->_entries[] = new AastraIPPhoneTextMenuEntry($name, $url, $selection, $icon, $dial);
if(!Aastra_is_icons_supported()) $icon=NULL;
$this->_entries[] = new AastraIPPhoneTextMenuEntry( $name,
$url,
$selection,
$icon,
$dial,
$line,
$color,
$split,
NULL,
$iconRight1,
$iconRight2,
$iconRight3,
$iconRight4
);
}
function setBase($base)
{
$this->_entries[] = new AastraIPPhoneTextMenuEntry(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, $base);
}
function resetBase()
{
$this->_entries[] = new AastraIPPhoneTextMenuEntry(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'AASTRA_RESETBASE');
}
function setWrapList()
{
$this->_wraplist = 'yes';
}
function setScrollConstrain()
{
$this->_scrollConstrain = 'yes';
}
function setUnitScroll()
{
$this->_unitScroll = 'yes';
}
function setNumberLaunch()
{
$this->_numberLaunch = 'yes';
}
function setTouchLaunch()
{
$this->_touchLaunch = 'yes';
}
function setNoFontMono()
{
$this->_fontMono = 'no';
}
function setScrollUp($uri)
{
$this->_scrollUp = $uri;
}
function setScrollDown($uri)
{
$this->_scrollDown = $uri;
}
function natsortByName()
{
$tmpary = array();
foreach ($this->_entries as $id => $entry) {
$tmpary[$id] = $entry->getName();
}
foreach ($this->_entries as $id => $entry) $tmpary[$id] = $entry->getName();
natsort($tmpary);
foreach ($tmpary as $id => $name) {
$newele[] = $this->_entries[$id];
}
foreach ($tmpary as $id => $name) $newele[] = $this->_entries[$id];
$this->_entries = $newele;
}
function render()
{
$out = "<AastraIPPhoneTextMenu ";
if ($this->_destroyOnExit=='yes') $out .= "destroyOnExit=\"yes\" ";
# Beginning of root tag
$out = "<AastraIPPhoneTextMenu";
# DestroyOnExit
if ($this->_destroyOnExit=='yes') $out .= " destroyOnExit=\"yes\"";
# CancelAction
if($this->_cancelAction != "")
{
$cancelAction = $this->escape($this->_cancelAction);
$out .= " cancelAction=\"{$cancelAction}\"";
}
if ($this->_defaultIndex!="") $out .= "defaultIndex=\"{$this->_defaultIndex}\"";
# DefaultIndex
if ($this->_defaultIndex!="") $out .= " defaultIndex=\"{$this->_defaultIndex}\"";
# Style
if ($this->_style!='') $out .= " style=\"{$this->_style}\"";
# Beep
if ($this->_beep=='yes') $out .= " Beep=\"yes\"";
if ($this->_lockin=='yes') $out .= " LockIn=\"yes\"";
if($this->_allowAnswer == 'yes') $out .= " allowAnswer=\"yes\"";
# Lockin
if($this->_lockin!='') {
$out .= " LockIn=\"{$this->_lockin}\"";
if($this->_lockin_uri!='') $out .= " GoodbyeLockInURI=\"".$this->escape($this->_lockin_uri)."\"";
}
# Call Protection
if($this->_callprotection!='') {
$out .= " CallProtection=\"{$this->_callprotection}\"";
}
# WrapList
if ($this->_wraplist=='yes') $out .= " wrapList=\"yes\"";
# AllowAnswer
if ($this->_allowAnswer == 'yes') $out .= " allowAnswer=\"yes\"";
# AllowDrop
if ($this->_allowDrop == 'yes') $out .= " allowDrop=\"yes\"";
# AllowXfer
if ($this->_allowXfer == 'yes') $out .= " allowXfer=\"yes\"";
# AllowConf
if ($this->_allowConf == 'yes') $out .= " allowConf=\"yes\"";
# Timeout
if ($this->_timeout!=0) $out .= " Timeout=\"{$this->_timeout}\"";
# Background color
if ($this->_background_color!='') $out .= " bgColor=\"{$this->_background_color}\"";
# Prevent list wrap
if ($this->_scrollConstrain == 'yes') $out .= " scrollConstrain=\"yes\"";
# Number selection
if ($this->_numberLaunch == 'yes') $out .= " numberLaunch=\"yes\"";
# Number selection
if ($this->_touchLaunch == 'yes') $out .= " touchLaunch=\"yes\"";
# Font Monotype
if ($this->_fontMono == 'no') $out .= " fontMono=\"no\"";
# Scrolls up/down
if($this->_scrollUp!='') $out .= " scrollUp=\"".$this->escape($this->_scrollUp)."\"";
if($this->_scrollDown!='') $out .= " scrollDown=\"".$this->escape($this->_scrollDown)."\"";
# Unit scroll (6739i)
if ($this->_unitScroll == 'yes') $out .= " unitScroll=\"yes\"";
# End of root tag
$out .= ">\n";
# Title
if ($this->_title!='')
{
$title = $this->escape($this->_title);
$out .= "<Title";
if ($this->_title_wrap=='yes') $out .= " wrap=\"yes\"";
if ($this->_title_color!='') $out .= " Color=\"{$this->_title_color}\"";
$out .= ">".$title."</Title>\n";
}
$index=0;
foreach ($this->_entries as $entry) {
if($index<15) $out .= $entry->render();
$index++;
}
foreach ($this->_softkeys as $softkey) $out .= $softkey->render();
$IconList=0;
foreach ($this->_icons as $icon)
# Top Title
if ($this->_toptitle!='')
{
if($IconList==0)
{
$out .= "<IconList>\n";
$IconList=1;
}
$out .= $icon->render();
$toptitle = $this->escape($this->_toptitle);
$out .= "<TopTitle";
if ($this->_toptitle_icon!='') $out .= " icon=\"{$this->_toptitle_icon}\"";
if ($this->_toptitle_color!='') $out .= " Color=\"{$this->_toptitle_color}\"";
$out .= ">".$toptitle."</TopTitle>\n";
}
if($IconList!=0) $out .= "</IconList>\n";
# Menu items
if (isset($this->_entries) && is_array($this->_entries))
{
$index=0;
$base=NULL;
$length=Aastra_size_display_line();
$is_softkeys=Aastra_is_softkeys_supported();
foreach ($this->_entries as $entry)
{
if($entry->getBase()!=NULL) $base=$entry->getBase();
else
{
if($base!=NULL)
{
if($index<$this->_maxitems) $out .= $entry->render($this->_style,$length,$is_softkeys,$base);
$base=NULL;
}
else if($index<$this->_maxitems) $out .= $entry->render($this->_style,$length,$is_softkeys);
$index++;
}
}
}
# Softkeys
if (isset($this->_softkeys) && is_array($this->_softkeys))
{
foreach ($this->_softkeys as $softkey) $out .= $softkey->render();
}
# Icons
if (isset($this->_icons) && is_array($this->_icons))
{
$IconList=False;
foreach ($this->_icons as $icon)
{
if(!$IconList)
{
$out .= "<IconList>\n";
$IconList=True;
}
$out .= $icon->render();
}
if($IconList) $out .= "</IconList>\n";
}
# End Tag
$out .= "</AastraIPPhoneTextMenu>\n";
# Return XML object
return($out);
}
}

View File

@ -1,8 +1,7 @@
<?php
################################################################################
# Aastra XML API Classes - AastraIPPhoneTextMenuEntry
# Copyright Aastra Telecom 2007
# Copyright Mitel Networks 2005-2015
#
# Internal class for AastraIPPhoneTextMenu object.
################################################################################
@ -13,14 +12,30 @@ class AastraIPPhoneTextMenuEntry extends AastraIPPhone {
var $_selection;
var $_icon;
var $_dial;
var $_line;
var $_base;
var $_split;
var $_color;
var $_iconRight1;
var $_iconRight2;
var $_iconRight3;
var $_iconRight4;
function AastraIPPhoneTextMenuEntry($name, $url, $selection, $icon, $dial)
function AastraIPPhoneTextMenuEntry($name, $url, $selection, $icon, $dial, $line, $color, $split, $base, $iconRight1=NULL, $iconRight2=NULL, $iconRight3=NULL, $iconRight4=NULL)
{
$this->_name=$name;
$this->_url=$url;
$this->_selection=$selection;
$this->_icon=$icon;
$this->_dial=$dial;
$this->_line=$line;
$this->_split=$split;
$this->_color=$color;
$this->_base=$base;
$this->_iconRight1=$iconRight1;
$this->_iconRight2=$iconRight2;
$this->_iconRight3=$iconRight3;
$this->_iconRight4=$iconRight4;
}
function getName()
@ -28,18 +43,126 @@ class AastraIPPhoneTextMenuEntry extends AastraIPPhone {
return($this->_name);
}
function render()
function getBase()
{
$name = $this->escape($this->_name);
return($this->_base);
}
function format_line($array_name,$style,$length,$is_softkeys)
{
# Retrieve parameters
$line1=$array_name[0];
$line2=$array_name[1];
$offset=$array_name[2];
$char=$array_name[3];
if($char==' ') $char=chr(0xa0);
$mode=$array_name[4];
if($mode=='') $mode='left';
# Adjust with the style if softkey phone
if($is_softkeys)
{
switch($style)
{
case 'none':
case 'radio':
$length--;
break;
default:
$length-=4;
break;
}
}
# Unbreakable space
$nbsp=chr(0xa0);
# Pad the the first line with regular spaces
switch($mode)
{
case 'center':
$line=str_pad($line1,$length-1-$offset,$char,STR_PAD_BOTH);
break;
case 'right':
$line=str_pad($line1,$length-1-$offset,$char,STR_PAD_LEFT);
break;
default:
$line=str_pad($line1,$length-1-$offset,$char,STR_PAD_RIGHT);
break;
}
# Crop the line to the correct length (-1 for wrap-space)
$line=substr($line,0,($length-1-$offset));
# Append a space so it can wrap to line two, and two non-break spaces to pad below the icon
if($line2!='')
{
$line.=' '.str_repeat($nbsp,$offset);
switch($mode)
{
case 'center':
if($char==chr(0xa0)) $line.=str_repeat($char,($length-$offset-strlen($line2))/2).$line2;
else $line.=str_pad($line2,$length-$offset-1,$char,STR_PAD_BOTH);
break;
case 'right':
$line.=str_repeat($char,$length-$offset-strlen($line2)+1).$line2;
break;
default:
$line.=$line2;
break;
}
}
# Return formatted prompt
return($line);
}
function render($style,$length,$is_softkeys,$base=NULL)
{
# Opening
$base = $this->escape($base);
$xml = '<MenuItem';
if($base!=NULL)
{
if($base!='AASTRA_RESETBASE') $xml .= " base=\"{$base}\"";
else $xml .= " base=\"\"";
}
if($this->_icon!=NULL) $xml .= " icon=\"{$this->_icon}\"";
if($this->_iconRight1!=NULL) $xml .= " iconr1=\"{$this->_iconRight1}\"";
if($this->_iconRight2!=NULL) $xml .= " iconr2=\"{$this->_iconRight2}\"";
if($this->_iconRight3!=NULL) $xml .= " iconr3=\"{$this->_iconRight3}\"";
if($this->_iconRight4!=NULL) $xml .= " iconr4=\"{$this->_iconRight4}\"";
$xml .= ">\n";
# Prompt
if(is_array($this->_name)) $name = $this->format_line($this->_name,$style,$length,$is_softkeys);
else $name = $this->_name;
$name = $this->escape($name);
$xml .= "<Prompt";
if($this->_split!=NULL) $xml .= " split=\"{$this->_split}\"";
if($this->_color!='') $xml .= " Color=\"{$this->_color}\"";
$xml .= ">{$name}</Prompt>\n";
# URI
$url = $this->escape($this->_url);
$xml .= "<URI>{$url}</URI>\n";
# Selection
$selection = $this->escape($this->_selection);
$icon=$this->_icon;
$xml = "<MenuItem";
if($icon!=NULL) $xml .= " icon=\"{$icon}\"";
$xml .= ">\n<Prompt>{$name}</Prompt>\n<URI>{$url}</URI>\n";
if($selection!=NULL) $xml .= "<Selection>{$selection}</Selection>\n";
if($this->_dial!=NULL) $xml .= "<Dial>{$this->_dial}</Dial>\n";
$xml .= "</MenuItem>\n";
# Dial
if($this->_dial!=NULL)
{
if($this->_line!=NULL) $xml .= "<Dial line=\"{$this->_line}\">{$this->_dial}</Dial>\n";
else $xml .= "<Dial>{$this->_dial}</Dial>\n";
}
# Close
$xml .= '</MenuItem>'."\n";
# Return generated vaue
return($xml);
}
}

View File

@ -1,8 +1,7 @@
<?
<?php
########################################################################################################
# Aastra XML API Classes - AastraIPPhoneTextScreen
# Copyright Aastra Telecom 2007
# Copyright Mitel Networks 2005-2015
#
# AastraIPPhoneTextScreen object.
#
@ -10,22 +9,63 @@
#
# Inherited from AastraIPPhone
# setTitle(Title) to setup the title of an object (optional)
# @title string
# setTitleWrap() to set the title to be wrapped on 2 lines (optional)
# setDestroyOnExit() to set DestroyonExit parameter to 'yes', 'no' by default (optional)
# setTopTitle(title,color,icon_index) to set the Top Title of the XML screen (6739i only)
# @title string
# @color string, "red", "blue", ... (optional)
# @icon_index integer, icon number
# setCancelAction(uri) to set the cancel parameter with the URI to be called on Cancel (optional)
# @uri string
# setDestroyOnExit() to set DestroyonExit parameter to 'yes', 'no' by default (optional)
# setBeep() to enable a notification beep with the object (optional)
# setLockIn() to set the Lock-in tag to 'yes' (optional)
# setAllowAnswer() to set the allowAnswer tag to 'yes' (optional)
# setLockIn(uri) to set the Lock-in tag to 'yes' and the GoodbyeLockInURI(optional)
# @uri string, GoodByeLockInURI
# setLockInCall() to set the Lock-in tag to 'call' (optional)
# setCallProtection(notif) to protect the XML object against incoming calls
# @notif to enable/disable (false by default) the display of an incoming call notification (optional)
# setAllowAnswer() to set the allowAnswer tag to 'yes' (optional only for non softkey phones)
# setAllowDrop() to set the allowDrop tag to 'yes' (optional only for non softkey phones)
# setAllowXfer() to set the allowXfer tag to 'yes' (optional only for non softkey phones)
# setAllowConf() to set the allowConf tag to 'yes' (optional only for non softkey phones)
# setTimeout(timeout) to define a specific timeout for the XML object (optional)
# addSoftkey(index,label,uri,iconindex) to add custom softkeys to the object (optional)
# addIcon(index,icon) to add custom icons to the object (optional)
# @timeout integer (seconds)
# setBackgroundColor(color) to change the XML object background color (optional)
# @color string, "red", "blue", ...
# addSoftkey(index,label,uri,icon_index) to add custom soktkeys to the object (optional)
# @index integer, softkey number
# @label string
# @uri string
# @icon_index integer, icon number
# setRefresh(timeout,URL) to add Refresh parameters to the object (optional)
# generate() to return the object content
# output() to display the object
# @timeout integer (seconds)
# @URL string
# setEncodingUTF8() to change encoding from default ISO-8859-1 to UTF-8 (optional)
# addIcon(index,icon) to add custom icons to the object (optional)
# @index integer, icon index
# @icon string, icon name or definition
# generate() to return the generated XML for the object
# output(flush) to display the object
# @flush boolean optional, output buffer to be flushed out or not.
#
# Specific to the object
# setText(text) to set the text to be displayed.
# setText(text,color) to set the text to be displayed.
# @text string
# @color string, "red", "blue"... (optional)
# setDoneAction(uri) to set the URI to be called when the user selects the default "Done" key (optional)
# @uri string
# setAllowDTMF() to allow DTMF passthrough on the object
# setScrollUp(uri) to set the URI to be called when the user presses the Up arrow (optional)
# @uri string
# setScrollDown(uri) to set the URI to be called when the user presses the Down arrow (optional)
# @uri string
# setScrollLeft(uri) to set the URI to be called when the user presses the Left arrow (optional)
# @uri string
# setScrollRight(uri) to set the URI to be called when the user presses the Right arrow (optional)
# @uri string
# setDial(number,line) to set the number to be dialed as well as the line to use when going off-hook or with the custom softkey Softkey::Dial2
# @number string
# @line integer (optional)
#
# Example
# require_once('AastraIPPhoneTextScreen.class.php');
@ -41,62 +81,195 @@
########################################################################################################
require_once('AastraIPPhone.class.php');
require_once('AastraIPPhoneTextScreenEntry.class.php');
class AastraIPPhoneTextScreen extends AastraIPPhone {
var $_text;
var $_doneAction="";
function setText($text)
{
$this->_text = $text;
}
var $_doneAction='';
var $_allowDTMF='';
var $_scrollUp='';
var $_scrollDown='';
var $_scrollLeft='';
var $_scrollRight='';
var $_dialNumber='';
var $_dialLine='';
function setDoneAction($uri)
{
$this->_doneAction = $uri;
}
function setScrollUp($uri)
{
$this->_scrollUp = $uri;
}
function setScrollDown($uri)
{
$this->_scrollDown = $uri;
}
function setScrollLeft($uri)
{
$this->_scrollLeft = $uri;
}
function setScrollRight($uri)
{
$this->_scrollRight = $uri;
}
function setAllowDTMF()
{
$this->_allowDTMF = 'yes';
}
function addEntry($text, $color='')
{
$this->_entries[] = new AastraIPPhoneTextScreenEntry($text, $color);
}
function setText($text,$color='')
{
$pieces=explode("\n",$text);
foreach($pieces as $key=>$value)
{
$this->_entries[] = new AastraIPPhoneTextScreenEntry($value, $color);
}
}
function setDial($dialNumber,$dialLine='')
{
$this->_dialNumber = $dialNumber;
$this->_dialLine = $dialLine;
}
function render()
{
$title = $this->escape($this->_title);
$text = $this->escape($this->_text);
$out = '';
$out .= "<AastraIPPhoneTextScreen";
# Beginning of root tag
$out = "<AastraIPPhoneTextScreen";
# DestroyOnExut
if($this->_destroyOnExit == 'yes') $out .= " destroyOnExit=\"yes\"";
# CancelAction
if($this->_cancelAction != "")
{
$cancelAction = $this->escape($this->_cancelAction);
$out .= " cancelAction=\"{$cancelAction}\"";
}
# DoneAction
if($this->_doneAction != "")
{
$doneAction = $this->escape($this->_doneAction);
$out .= " doneAction=\"{$doneAction}\"";
}
if($this->_beep=='yes') $out .= " Beep=\"yes\"";
if($this->_allowAnswer == 'yes') $out .= " allowAnswer=\"yes\"";
# Beep
if ($this->_beep=='yes') $out .= " Beep=\"yes\"";
# TimeOut
if ($this->_timeout!=0) $out .= " Timeout=\"{$this->_timeout}\"";
# Background color
if ($this->_background_color!='') $out .= " bgColor=\"{$this->_background_color}\"";
# Lockin
if($this->_lockin!='') {
$out .= " LockIn=\"{$this->_lockin}\"";
if($this->_lockin_uri!='') $out .= " GoodbyeLockInURI=\"".$this->escape($this->_lockin_uri)."\"";
}
# Call Protection
if($this->_callprotection!='') {
$out .= " CallProtection=\"{$this->_callprotection}\"";
}
# AllowAnswer
if ($this->_allowAnswer == 'yes') $out .= " allowAnswer=\"yes\"";
# AllowDrop
if ($this->_allowDrop == 'yes') $out .= " allowDrop=\"yes\"";
# AllowXfer
if ($this->_allowXfer == 'yes') $out .= " allowXfer=\"yes\"";
# AllowConf
if ($this->_allowConf == 'yes') $out .= " allowConf=\"yes\"";
# AllowDTMF
if ($this->_allowDTMF=='yes') $out .= " allowDTMF=\"yes\"";
# Scrolls up/down/left/right
if($this->_scrollUp!='') $out .= " scrollUp=\"".$this->escape($this->_scrollUp)."\"";
if($this->_scrollDown!='') $out .= " scrollDown=\"".$this->escape($this->_scrollDown)."\"";
if($this->_scrollLeft!='') $out .= " scrollLeft=\"".$this->escape($this->_scrollLeft)."\"";
if($this->_scrollRight!='') $out .= " scrollRight=\"".$this->escape($this->_scrollRight)."\"";
# End of root tag
$out .= ">\n";
# Title
if ($this->_title!='')
{
$title = $this->escape($this->_title);
$out .= "<Title";
if ($this->_title_wrap=='yes') $out .= " wrap=\"yes\"";
if ($this->_title_color!='') $out .= " Color=\"{$this->_title_color}\"";
$out .= ">".$title."</Title>\n";
}
$out .= "<Text>{$text}</Text>\n";
foreach ($this->_softkeys as $softkey) $out .= $softkey->render();
$IconList=0;
foreach ($this->_icons as $icon)
# Top Title
if ($this->_toptitle!='')
{
if($IconList==0)
{
$out .= "<IconList>\n";
$IconList=1;
}
$out .= $icon->render();
$toptitle = $this->escape($this->_toptitle);
$out .= "<TopTitle";
if ($this->_toptitle_icon!='') $out .= " icon=\"{$this->_toptitle_icon}\"";
if ($this->_toptitle_color!='') $out .= " Color=\"{$this->_toptitle_color}\"";
$out .= ">".$toptitle."</TopTitle>\n";
}
if($IconList!=0) $out .= "</IconList>\n";
# Text Items
if (isset($this->_entries) && is_array($this->_entries))
{
foreach ($this->_entries as $entry) $out .= $entry->render();
}
# Dial
if ($this->_dialNumber!='')
{
$dialNumber = $this->escape($this->_dialNumber);
$out .= "<Dial";
if ($this->_dialLine!='') $out .= " line=\"{$this->_dialLine}\"";
$out .= ">".$dialNumber."</Dial>\n";
}
# Softkeys
if (isset($this->_softkeys) && is_array($this->_softkeys))
{
foreach ($this->_softkeys as $softkey) $out .= $softkey->render();
}
# Icons
if (isset($this->_icons) && is_array($this->_icons))
{
$IconList=False;
foreach ($this->_icons as $icon)
{
if(!$IconList)
{
$out .= "<IconList>\n";
$IconList=True;
}
$out .= $icon->render();
}
if($IconList) $out .= "</IconList>\n";
}
# End tag
$out .= "</AastraIPPhoneTextScreen>\n";
# Return XML object
return $out;
}
}

View File

@ -0,0 +1,28 @@
<?php
################################################################################
# Aastra XML API Classes - AastraIPPhoneTextScreenEntry
# Copyright Mitel Networks 2005-2015
#
# Internal class for AastraIPPhoneTextScreen object.
################################################################################
class AastraIPPhoneTextScreenEntry extends AastraIPPhone {
var $_text;
var $_color='';
function AastraIPPhoneTextScreenEntry($text,$color)
{
$this->_text = $text;
$this->_color = $color;
}
function render()
{
$text = $this->escape($this->_text);
$xml = "<Text";
if ($this->_color!='') $xml .= " Color=\"{$this->_color}\"";
$xml .= ">{$text}</Text>\n";
return($xml);
}
}
?>

View File

@ -1,4 +1,4 @@
Copyright (c) 2007 Aastra Telecom US, Inc.
Copyright (c) 2005-2017 Mitel Networks.
All rights reserved.
Redistribution and use in source and binary forms, with or without
@ -9,10 +9,10 @@ are met:
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of Aastra Telecom US, Inc. may not be used to endorse or promote
3. The name of Mitel Networks may not be used to endorse or promote
products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY AASTRA TELECOM US, INC. ``AS IS'' AND ANY EXPRESS
THIS SOFTWARE IS PROVIDED BY MITEL NETWORKS ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL AASTRA TELECOM US, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,

View File

@ -1,67 +1,24 @@
<?php
##########################################################
###########################################################################
# Sample php applications using the Aastra XML API Classes
# Aastra SIP Phones Firmware 2.1.0 or better
# Copyright Aastra Telecom 2007
# Aastra 6739i Firmware 3.0.1 or better
# Copyright Mitel Networks 2005-2015
#
# @param type, type of XML object to display
# type=textmenu1 AastraIPPhoneTextMenu
# type=textmenu2 AastraIPPhoneTextMenu
# type=textmenu3 AastraIPPhoneTextMenu
# type=textscreen AastraIPPhoneTextScreen
# type=directory AastraIPPhoneDirectory
# type=inputscreen1 AastraIPPhoneInputScreen
# type=inputscreen2 AastraIPPhoneInputScreen
# type=inputscreen3 AastraIPPhoneInputScreen
# type=inputscreen4 AastraIPPhoneInputScreen
# type=status AastraIPPhoneStatus
# type=execute AastraIPPhoneExecute
# type=configuration AastraIPPhoneConfiguration
# type=imagescreen AastraIPPhoneImageScreen
# type=imagemenu AastraIPPhoneImageMenu
# type=formattedtextscreen AastraIPPhoneFormattedTextScreen
#
# If type is not set, the list of all the XML objects is displayed
#
##########################################################
###########################################################################
##########################################################
# Aastra_decode_HTTP_header
#
# Returns an array
# 'model' Phone Type
# 'mac' Phone MAC Address
# 'firmware' Phone firmware version
# 'ip' Phone Remote IP address
# 'language' Phone Language
# 'module'[x] Expension Modules
#
###########################################################################
# Includes
###########################################################################
require_once('AastraIPPhone.php');
function Aastra_decode_HTTP_header()
{
# User Agent
$user_agent=$_SERVER["HTTP_USER_AGENT"];
if(stristr($user_agent,"Aastra"))
{
$value=preg_split("/ MAC:/",$user_agent);
$fin=preg_split("/ /",$value[1]);
$value[1]=preg_replace("/\-/","",$fin[0]);
$value[2]=preg_replace("/V:/","",$fin[1]);
}
else
{
$value[0]="MSIE";
$value[1]="NA";
$value[2]="NA";
}
###########################################################################
# Main Code
###########################################################################
# Create array
$array=array('model'=>$value[0],'mac'=>$value[1],'firmware'=>$value[2]);
return($array);
}
# Test firmware version
#Aastra_test_phone_version('3.0.1',0);
##########################################################
# Retrieve type parameter
$type=$_GET['type'];
@ -85,19 +42,11 @@ switch($type)
$menu->addEntry('TextScreen', $XML_SERVER.'?type=textscreen');
$menu->addEntry('InputScreen1', $XML_SERVER.'?type=inputscreen1');
$menu->addEntry('InputScreen2', $XML_SERVER.'?type=inputscreen2');
$menu->addEntry('Status', $XML_SERVER.'?type=status');
$menu->addEntry('InputScreen3', $XML_SERVER.'?type=inputscreen3');
$menu->addEntry('Execute', $XML_SERVER.'?type=execute');
if($header['model']!="Aastra53i")
{
$menu->addEntry('ImageScreen', $XML_SERVER.'?type=imagescreen');
$menu->addEntry('ImageMenu', $XML_SERVER.'?type=imagemenu');
$menu->addEntry('InputScreen3', $XML_SERVER.'?type=inputscreen3');
$menu->addEntry('InputScreen4', $XML_SERVER.'?type=inputscreen4');
$menu->addEntry('InputScreen5', $XML_SERVER.'?type=inputscreen5');
$menu->addEntry('Directory', $XML_SERVER.'?type=directory');
}
$menu->addEntry('FTextScreen1', $XML_SERVER.'?type=formattedtextscreen1');
$menu->addEntry('FTextScreen2', $XML_SERVER.'?type=formattedtextscreen2');
$menu->addEntry('FormattedTextScreen', $XML_SERVER.'?type=formattedtextscreen');
$menu->addEntry('Status1', $XML_SERVER.'?type=status1');
$menu->addEntry('Status2', $XML_SERVER.'?type=status2');
$menu->natsortByName();
$menu->output();
break;
@ -105,11 +54,10 @@ switch($type)
case 'textmenu1':
require_once('AastraIPPhoneTextMenu.class.php');
$menu = new AastraIPPhoneTextMenu();
$menu->setTitle('Title this is a pretty long title');
$menu->setTitle('Title, which is a pretty long title');
$menu->setTitleWrap();
$menu->setDestroyOnExit();
$menu->setDeFaultIndex('3');
$menu->setStyle('radio');
$menu->addEntry('Choice 2', 'http://myserver.com/script.php?choice=2', 'Value=2','','12345');
$menu->addEntry('Choice 1', 'http://myserver.com/script.php?choice=1', 'Value=1');
$menu->addEntry('Choice 3', 'http://myserver.com/script.php?choice=3', 'Value=3');
@ -119,9 +67,7 @@ switch($type)
$menu->addEntry('Choice 7', 'http://myserver.com/script.php?choice=7', 'Value=7');
$menu->natsortByName();
$menu->addSoftkey('1', 'My Select', 'http://myserver.com/script.php?action=1');
$menu->addSoftkey('2', 'My Dial', 'SoftKey:Dial2');
$menu->addSoftkey('4', 'Back', $XML_SERVER);
$menu->addSoftkey('6', 'Exit', 'SoftKey:Exit');
$menu->addSoftkey('10', 'Done', 'SoftKey:Exit');
$menu->output();
break;
@ -130,33 +76,14 @@ switch($type)
$menu = new AastraIPPhoneTextMenu();
$menu->setTitle('Title');
$menu->setDestroyOnExit();
$menu->setDeFaultIndex('2');
$menu->setDefaultIndex('2');
$menu->addEntry('Choice 2', 'http://myserver.com/script.php?choice=2', 'Value=2','1');
$menu->addEntry('Choice 1', 'http://myserver.com/script.php?choice=1', 'Value=1','2');
$menu->addEntry('Choice 3', 'http://myserver.com/script.php?choice=3', 'Value=3','3');
$menu->natsortByName();
$menu->addSoftkey('1', 'My Select', 'http://myserver.com/script.php?action=1');
$menu->addSoftkey('4', 'Back', $XML_SERVER);
$menu->addSoftkey('6', 'Exit', 'SoftKey:Exit');
$menu->addIcon('1', 'Icon:PhoneOnHook');
$menu->addIcon('2', 'Icon:PhoneOffHook');
$menu->addIcon('3', 'Icon:PhoneRinging');
$menu->output();
break;
case 'textmenu3':
require_once('AastraIPPhoneTextMenu.class.php');
$menu = new AastraIPPhoneTextMenu();
$menu->setTitle('Title');
$menu->setDestroyOnExit();
$menu->addEntry('Choice 1', 'Dial:12345', 'Value=1', '', '6789');
$menu->addEntry('Choice 2', 'http://myserver.com/script.php?choice=2', 'Value=2','','12345');
$menu->addEntry('Choice 3', 'http://myserver.com/script.php?choice=3', 'Value=3');
$menu->addSoftkey('1', 'Select', 'SoftKey:Select');
$menu->addSoftkey('2', 'Dial', 'SoftKey:Dial');
$menu->addSoftkey('3', 'Dial2', 'SoftKey:Dial2');
$menu->addSoftkey('4', 'Back', $XML_SERVER);
$menu->addSoftkey('6', 'Exit', 'SoftKey:Exit');
$menu->addSoftkey('9', 'Back', $XML_SERVER);
$menu->addSoftkey('10', 'Exit', 'SoftKey:Exit');
$menu->output();
break;
@ -166,10 +93,8 @@ switch($type)
$text->setTitle('Title');
$text->setText('The screen object can be implemented similar to the firmware info screen.');
$text->setDestroyOnExit();
$text->addSoftkey('1', 'Mail', 'http://myserver.com/script.php?action=1','1');
$text->addSoftkey('4', 'Back', $XML_SERVER);
$text->addSoftkey('1', 'Mail', 'http://myserver.com/script.php?action=1');
$text->addSoftkey('6', 'Exit', 'SoftKey:Exit');
$text->addIcon('1', 'Icon:Envelope');
$text->output();
break;
@ -177,7 +102,7 @@ switch($type)
require_once('AastraIPPhoneInputScreen.class.php');
$input = new AastraIPPhoneInputScreen();
$input->setTitle('Title');
$input->setPrompt('Enter date');
$input->setPrompt('Enter your password');
$input->setParameter('param');
$input->setType('string');
$input->setURL('http://myserver.com/script.php?test=1');
@ -202,94 +127,31 @@ switch($type)
break;
case 'inputscreen3':
require_once('AastraIPPhoneInputScreen.class.php');
$input = new AastraIPPhoneInputScreen();
$input->setTitle('Title');
$input->setPrompt('Enter email address');
$input->setParameter('email');
$input->setType('string');
$input->setURL('http://myserver.com/script.php');
$input->addSoftkey('1', 'Backspace', 'SoftKey:BackSpace');
$input->addSoftkey('2', 'Symbols', 'SoftKey:SymbolList="@."');
$input->addSoftkey('5', 'Done', 'SoftKey:Submit');
$input->addSoftkey('6', 'Exit', 'SoftKey:Exit');
$input->setDestroyOnExit();
$input->output();
break;
case 'inputscreen4':
require_once('AastraIPPhoneInputScreen.class.php');
$input = new AastraIPPhoneInputScreen();
$input->setTitle('Restricted application');
$input->setDisplayMode('condensed');
$input->setURL($XML_SERVER);
$input->setDestroyOnExit();
$input->addSoftkey('5', 'Done', 'SoftKey:Submit');
$input->addSoftkey('6', 'Exit', 'SoftKey:Exit');
$input->addField();
$input->setFieldType('empty');
$input->addField('empty');
$input->addField('string');
$input->setFieldType('string');
$input->setFieldSelection('1');
$input->setFieldPrompt('Username:');
$input->setFieldParameter('user');
$input->addFieldSoftkey('3', 'ABC', 'SoftKey:ChangeMode');
$input->setFieldSelection('1');
$input->addField('number');
$input->setFieldPassword('yes');
$input->setFieldPrompt('Password:');
$input->setFieldParameter('password');
$input->setFieldSelection('2');
$input->addSoftkey('10', 'Exit', 'SoftKey:Exit');
$input->output();
break;
case 'inputscreen5':
require_once('AastraIPPhoneInputScreen.class.php');
$input = new AastraIPPhoneInputScreen();
$input->setTitle('Date and Time');
$input->setURL('http://myserver.com/script.php');
$input->setDestroyOnExit();
$input->addSoftkey('5', 'Done', 'SoftKey:Submit');
$input->addSoftkey('6', 'Exit', 'SoftKey:Exit');
$input->addField('dateUS');
$input->setFieldPrompt('Enter Date');
$input->setFieldParameter('date');
$input->addField('timeUS');
$input->setFieldPrompt('Enter Time');
$input->setFieldParameter('time');
$input->output();
break;
case 'directory':
require_once('AastraIPPhoneDirectory.class.php');
$directory = new AastraIPPhoneDirectory();
$directory->setTitle('Title');
$directory->setNext('http://myserver.com/script.php?page=2');
$directory->setPrevious('http://myserver.com/script.php?page=0');
$directory->setDestroyOnExit();
$directory->addEntry('John Doe', '200');
$directory->addEntry('Jane Doe', '201');
$directory->natsortByName();
$directory->addSoftkey('1', 'Label', 'http://myserver.com/script.php?action=1');
$directory->addSoftkey('4', 'Back', $XML_SERVER);
$directory->addSoftkey('6', 'Exit', 'SoftKey:Exit');
$directory->output();
break;
case 'status':
require_once('AastraIPPhoneStatus.class.php');
$status = new AastraIPPhoneStatus();
$status->setSession('Session');
$status->setBeep();
$status->addEntry('1','Message 1',"alert",5);
$status->addEntry('2','Message 2');
$status->output();
break;
case 'execute':
require_once('AastraIPPhoneExecute.class.php');
$execute = new AastraIPPhoneExecute();
$execute->setTriggerDestroyOnExit();
$execute->addEntry('http://myserver.com/script.php?choice=2');
$execute->addEntry('Command: Reset');
$execute->addEntry('Command: FastReboot');
$execute->addEntry('Led: softkey1=on');
$execute->addEntry('Dial:7001','no');
$execute->output();
@ -301,76 +163,44 @@ switch($type)
$configuration->addEntry('softkey1 label','Test');
$configuration->addEntry('softkey1 type','xml');
$configuration->setTriggerDestroyOnExit();
$configuration->setBeep();
$configuration->output();
break;
case 'formattedtextscreen1':
case 'formattedtextscreen':
require_once('AastraIPPhoneFormattedTextScreen.class.php');
$ftext = new AastraIPPhoneFormattedTextScreen();
$ftext->setDestroyOnExit();
if($header['model']!="Aastra53i") $ftext->addLine('Formatted Screen','double','center');
$ftext->setScrollStart('2');
$ftext->addLine('Formatted Screen','double','center','red');
$ftext->setScrollStart();
$ftext->addLine('Scrolled text1');
$ftext->addLine('Scrolled text2');
$ftext->addLine('Scrolled text3','double');
$ftext->addLine('Scrolled text3');
$ftext->addLine('Scrolled text4');
$ftext->addLine('Scrolled text5');
$ftext->setScrollEnd();
$ftext->addLine('Footer',NULL,'center');
$ftext->addSoftkey('1', 'Label', 'http://myserver.com/script.php?action=1','1');
$ftext->addSoftkey('4', 'Back', $XML_SERVER);
$ftext->addSoftkey('6', 'Exit', 'SoftKey:Exit');
$ftext->addIcon('1', 'Icon:Envelope');
$ftext->output();
break;
case 'formattedtextscreen2':
require_once('AastraIPPhoneFormattedTextScreen.class.php');
$ftext = new AastraIPPhoneFormattedTextScreen();
$ftext->setDestroyOnExit();
$ftext->addLine('Line 1');
$ftext->addLine('Line 2');
$ftext->addLine('Line 3');
$ftext->addLine('Line 4');
$ftext->addLine('Line 5');
$ftext->addLine('Line 6');
$ftext->addSoftkey('1', 'Softkey 1', 'SoftKey:Exit');
$ftext->addSoftkey('2', 'Softkey 2', 'SoftKey:Exit');
$ftext->addSoftkey('3', 'Softkey 3', 'SoftKey:Exit');
$ftext->addSoftkey('4', 'Softkey 4', 'SoftKey:Exit');
$ftext->addSoftkey('5', 'Softkey 5', 'SoftKey:Exit');
$ftext->addSoftkey('6', 'Softkey 6', 'SoftKey:Exit');
$ftext->output();
break;
case 'imagescreen':
require_once('AastraIPPhoneImageScreen.class.php');
$images = new AastraIPPhoneImageScreen();
$images->setDestroyOnExit();
$images->setSize(40,144);
$images->setImage('fffffffc02fffffffee4ffffbfffc05fffe7ff7a7ffffffffeffeebd7fffffea6bcfffffe796f3feff6fa289f0a86f4866fa20df42414595dd0134f8037ed1637f0e2522b2dd003b6eb936f05fffbd4f4107bba6eb0080e93715000010b754001281271408c640252081b1b22500013c5c66201368004e04467520dc11067152b82094d418e100247205805494780105002601530020931400020ac5c91088b0f2b08c21c07d0c2006009fdfe81f80efe0107fe0fb1c3ffff8ffc3fffef8f7febffbfcf87ffbff64');
$images->addSoftkey('1', 'Mail', 'http://myserver.com/script.php?action=1','1');
$images->addSoftkey('4', 'Back', $XML_SERVER);
$images->addSoftkey('6', 'Exit', 'SoftKey:Exit',2);
$images->addIcon('1', 'Icon:Envelope');
$images->output();
$ftext->addSoftkey('10', 'Exit', 'SoftKey:Exit');
$ftext->output();
break;
case 'imagemenu':
require_once('AastraIPPhoneImageMenu.class.php');
$imagem = new AastraIPPhoneImageMenu();
$imagem->setDestroyOnExit();
$imagem->setSize(40,144);
$imagem->setImage('fffffffc02fffffffee4ffffbfffc05fffe7ff7a7ffffffffeffeebd7fffffea6bcfffffe796f3feff6fa289f0a86f4866fa20df42414595dd0134f8037ed1637f0e2522b2dd003b6eb936f05fffbd4f4107bba6eb0080e93715000010b754001281271408c640252081b1b22500013c5c66201368004e04467520dc11067152b82094d418e100247205805494780105002601530020131400020a05c91088b002b08c21c0000c200000001fe800000000000000001c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020041000004008300000ff08500000000c900000000710000000000000001401400000140140000014014000001401400000140140000000000000007c0ff00000c30880000081088000008108800000c30700000062000000000003f000001e02000000330200000021000000003301e000001e0330000000021000003f033000002001e0000020000000000001e000c03fc33003c013021007c02101201f00330ff03f001e000039000003e039001e00103f003300101f8021003007c03303f003c01e000000c00001e001c03f033007802002100f002002103e000001203c401702003cc0290ff039c02902101fc02b000007c03f01a003c020039018c0ff02d03c402102703c400001203ec01e000026402b0000264029000026c029000027c01a0000338000000033800000003100000000300000000030003f00003fc03000003fc02000003fc020000030001f0000300000000030001e000030002b000030002900003fc02900003fc01a00003f00000000310030000031c01e000031f003000033f81e00003f383000001e081e000008c003000003c01e00000fc03000001f000000003d001a0000390039000039002d00003f002700000f8012000007c000000001c0000000004000000000000000000000000000');
$imagem->addURI('1','http://myserver.com?choice=1');
$imagem->addURI('2','http://myserver.com?Choice=2');
$imagem->addSoftkey('1', 'Label', 'http://myserver.com/script.php?action=1','1');
$imagem->addSoftkey('4', 'Back', $XML_SERVER);
$imagem->addSoftkey('6', 'Exit', 'SoftKey:Exit');
$imagem->addIcon('1', 'Icon:Envelope');
$imagem->addIcon('2', 'FFFF0000FFFF0000');
$imagem->output();
break;
case 'status1':
require_once('AastraIPPhoneStatus.class.php');
$status = new AastraIPPhoneStatus();
$status->setTriggerDestroyOnExit();
$status->setSession('Session');
$status->addEntry('1','Message 1');
$status->addEntry('2','Message 2');
$status->output();
break;
case 'status2':
require_once('AastraIPPhoneStatus.class.php');
$status = new AastraIPPhoneStatus();
$status->setSession('Session');
$status->setTriggerDestroyOnExit();
$status->addEntry('1','');
$status->addEntry('2','');
$status->output();
break;
}
?>

View File

@ -0,0 +1,24 @@
Copyright (c) 2005-2015 Mitel Networks
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of Aastra Telecom US, Inc. may not be used to endorse or promote
products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY MITEL NETWORKS ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL AASTRA TELECOM US, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Binary file not shown.

View File

@ -0,0 +1,787 @@
<?php
#############################################################################
# Image Server for the Picture Caller ID Feature
#
# Copyright Mitel Networks 2005-2015
#
# Configuration
# image server uri: http://<server>/<path-to-this-script>?
# see server.conf for various directory configuration
#
# Matching rules:
# Always look in the cache first (you need to delete a file in the cache
# if it's source in the picture library has changed)
# Try to find an exact match (input number matches file name) first, then
# translate the number and check again
# If multiple files with same number but different format exist in library,
# this is the precedence used:
# 1. PNG,
# 2. JPG,
# 3. GIF
#############################################################################
#############################################################################
# PHP customization for warnings
#############################################################################
error_reporting(E_ERROR | E_PARSE);
#############################################################################
# Private functions
#############################################################################
function getvar_safe($var_name,$default='',$method='GET')
{
eval('$return = (isset($_'.$method.'["'.$var_name.'"])) ? htmlentities(html_entity_decode(stripslashes((trim($_'.$method.'["'.$var_name.'"]))),ENT_QUOTES),ENT_QUOTES) : $default;');
return $return;
}
function decode_HTTP_header()
{
Global $TEST;
# Debug mode
if($TEST)
{
# Calculate fake mac address suffix based on client's source address
$fake_mac_suffix = strtoupper(substr(md5(getvar_safe('REMOTE_ADDR','','SERVER')),0,6));
$array=array( 'model'=>'Aastra57i',
'mac'=>'00085D'.$fake_mac_suffix,
'firmware'=>'2.5.3.26',
'ip'=>getvar_safe('REMOTE_ADDR','','SERVER'),
'language'=>'en',
'rp'=>False
);
return($array);
}
# User Agent
$user_agent=getvar_safe('HTTP_USER_AGENT','','SERVER');
if(stristr($user_agent,'Aastra'))
{
$value=preg_split('/ MAC:/',$user_agent);
$fin=preg_split('/ /',$value[1]);
$value[1]=preg_replace('/\-/','',$fin[0]);
$value[2]=preg_replace('/V:/','',$fin[1]);
}
else
{
$value[0]='MSIE';
$value[1]='NA';
$value[2]='NA';
}
# Modification for RP phones
$rp=False;
if(strstr($value[0],'RP'))
{
$rp=True;
$value[0]=preg_replace(array('/67/','/ RP/'),array('',''),$value[0]);
}
# Modules
$module[1]=getvar_safe('HTTP_X_AASTRA_EXPMOD1','','SERVER');
$module[2]=getvar_safe('HTTP_X_AASTRA_EXPMOD2','','SERVER');
$module[3]=getvar_safe('HTTP_X_AASTRA_EXPMOD3','','SERVER');
# Create array
$array=array('model'=>$value[0],'mac'=>$value[1],'firmware'=>$value[2],'ip'=>getvar_safe('REMOTE_ADDR','','SERVER'),'module'=>$module,'language'=>getvar_safe('HTTP_ACCEPT_LANGUAGE','','SERVER'),'rp'=>$rp);
return($array);
}
function is_square($header=NULL)
{
# True by default
$return=False;
# Get header info if needed
if(!$header) $header=decode_HTTP_header();
# Test the model
switch($header['model'])
{
case 'Aastra6867i':
case 'Aastra6869i':
case 'Aastra6873i':
$return=True;
break;
}
# Return Result
return($return);
}
function is_white($header=NULL)
{
# True by default
$return=False;
# Get header info if needed
if(!$header) $header=decode_HTTP_header();
# Test the model
switch($header['model'])
{
case 'Aastra6867i':
case 'Aastra6869i':
case 'Aastra6873i':
$return=True;
break;
}
# Return Result
return($return);
}
function readINIfile ($filename, $commentchar, $delim)
{
# Get file content with a shared lock to avoid race conditions
$array1 = array();
$handle = @fopen($filename, 'r');
if ($handle)
{
if (flock($handle, LOCK_SH))
{
while (!feof($handle)) $array1[] = fgets($handle);
flock($handle, LOCK_UN);
}
fclose($handle);
}
$section='';
$array2=NULL;
foreach($array1 as $filedata)
{
$dataline=trim($filedata);
$firstchar=substr($dataline, 0, 1);
if ($firstchar!=$commentchar && $dataline!='')
{
#It's an entry (not a comment and not a blank line)
if ($firstchar == '[' && substr($dataline, -1, 1) == ']')
{
#It's a section
$section = substr($dataline, 1, -1);
}
else
{
#It's a key...
$delimiter = strpos($dataline, $delim);
if ($delimiter > 0)
{
#...with a value
$key = strtolower(trim(substr($dataline, 0, $delimiter)));
$value = trim(substr($dataline, $delimiter + 1));
if (substr($value, 1, 1) == '"' && substr($value, -1, 1) == '"') { $value = substr($value, 1, -1); }
$array2[$section][$key] = stripcslashes($value);
}
else
{
#...without a value
$array2[$section][strtolower(trim($dataline))]='';
}
}
}
else
{
#It's a comment or blank line. Ignore.
}
}
# Return array with data
return $array2;
}
function getImageFromLibrary($library_path, $number)
{
# 1st check for a .png or .PNG image
$filename=$library_path.'/'.$number.'.png';
if(file_exists($filename)) return @imagecreatefrompng($filename);
$filename = $library_path.'/'.$number.'.PNG';
if(file_exists($filename)) return @imagecreatefrompng($filename);
# 2nd check for a .jpg or .JPG image
$filename = $library_path.'/'.$number.'.jpg';
if (file_exists($filename)) return @imagecreatefromjpeg($filename);
$filename = $library_path.'/'.$number.'.JPG';
if (file_exists($filename)) return @imagecreatefromjpeg($filename);
$filename = $library_path.'/'.$number.'.jpeg';
if (file_exists($filename)) return @imagecreatefromjpeg($filename);
$filename = $library_path.'/'.$number.'.JPEG';
if (file_exists($filename)) return @imagecreatefromjpeg($filename);
# 3rd check for a .gif or .GIF image
$filename = $library_path.'/'.$number.'.gif';
if (file_exists($filename)) return @imagecreatefromgif($filename);
$filename = $library_path.'/'.$number.'.GIF';
if (file_exists($filename)) return @imagecreatefromgif($filename);
# No match
return null;
}
function scaleImage($im, $blowup)
{
Global $SQUARE;
Global $WHITE;
# Image size depends on the target
if($SQUARE)
{
$target_width=200;
$target_height=200;
}
else
{
$target_width=150;
$target_height=200;
}
# Create emtpy output image. use true color to avoid color palette problems
$im_output = imagecreatetruecolor($target_width, $target_height);
# White background if needed
if($WHITE)
{
$white = imagecolorallocate($im_output, 255, 255, 255);
imagefill($im_output, 0, 0, $white);
}
# Get size of input image
$im_width=imagesx($im);
$im_height=imagesy($im);
# Check if image is smaller than requested size and if "blow up" of images is disabled
if(($im_width < $target_width) && ($im_height < $target_height) && !$blowup)
{
# Simply copy the image in the center of the output image. no scaling.
imagecopy($im_output, $im, (($target_width-$im_width)/2) ,(($target_width-$im_height)/2), 0, 0, $im_width, $im_height);
}
else
{
if($SQUARE)
{
# Check aspect ratio of source image
if ($im_width / $im_height <= 1)
{
# "Portrait" image. scale to 200 pixel height and center horizontally
$new_im_width = $im_width * ($target_height / $im_height);
imagecopyresized($im_output, $im, (($target_width-$new_im_width)/2), 0, 0, 0, $new_im_width, $target_height, $im_width, $im_height);
}
else
{
# "Landscape" image. scale to 200 pixel width and center vertically
$new_im_height = $im_height * ($target_width / $im_width);
imagecopyresized($im_output, $im, 0, (($target_width-$new_im_height)/2), 0, 0, $target_width, $new_im_height, $im_width, $im_height);
}
}
else
{
# Check aspect ratio of source image
if ($im_width / $im_height <= 0.75)
{
# "Portrait" image. scale to 200 pixel height and center horizontally
$new_im_width = $im_width * ($target_height / $im_height);
imagecopyresized($im_output, $im, (($target_width-$new_im_width)/2), 0, 0, 0, $new_im_width, $target_height, $im_width, $im_height);
}
else
{
# "Landscape" image. scale to 150 pixel width and center vertically
$new_im_height = $im_height * ($target_width / $im_width);
imagecopyresized($im_output, $im, 0, (($target_height-$new_im_height)/2), 0, 0, $target_width, $new_im_height, $im_width, $im_height);
}
}
}
# Return new image
return($im_output);
}
function customImage($im,$complement)
{
Global $SQUARE;
# Image size depends on the target
if($SQUARE)
{
$target_width=200;
$target_height=200;
}
else
{
$target_width=150;
$target_height=200;
}
# Define the font
if(strpos(strtolower(PHP_OS), 'win') === false) $font='fonts/DejaVuSans-Bold';
else $font=realpath('./fonts/').'\\DejaVuSans-Bold.ttf';
# Split complement
$array_complement=explode('|',$complement);
# Label is 0
$array_complement[0]=str_replace("\"",'',$array_complement[0]);
# Y position is 1
if(($array_complement[1]>0) and ($array_complement[1]<200)) $y=$array_complement[1];
else $y=100;
# Font Size is 4 (default 10)
if(($array_complement[4]>=8) and ($array_complement[4]<=24)) $size=$array_complement[4];
else $size=10;
# Alignment is 2
switch($array_complement[2])
{
case 'left':
$x=10;
break;
case 'right':
$array_text=imagettfbbox($size,0,$font,$array_complement[0]);
$width=$array_text[4]-$array_text[6];
$x=$target_width-10-$width;
break;
default:
$array_text=imagettfbbox($size,0,$font,$array_complement[0]);
$width=$array_text[4]-$array_text[6];
$x=intval(($target_width-$width)/2);
break;
}
# Color is 3
switch($array_complement[3])
{
case 'yellow':
$color=imagecolorallocate($im,0xFF,0xFF,0);
break;
case 'orange':
$color=imagecolorallocate($im,0xFF,0xA5,0);
break;
case 'pink':
$color=imagecolorallocate($im,0xFF,0xC0,0xCB);
break;
case 'purple':
$color=imagecolorallocate($im,0xA0,0x20,0xF0);
break;
case 'black':
$color=imagecolorallocate($im,0,0,0);
break;
case 'grey':
$color=imagecolorallocate($im,0xBE,0xBE,0xBE);
break;
case 'red':
$color=imagecolorallocate($im,0xFF,0,0);
break;
case 'brown':
$color=imagecolorallocate($im,0xA5,0x2A,0x2A);
break;
case 'tan':
$color=imagecolorallocate($im,0xD2,0xB4,0x8C);
break;
case 'magenta':
$color=imagecolorallocate($im,0xFF,0,0xFF);
break;
case 'blue':
$color=imagecolorallocate($im,0,0,0xFF);
break;
case 'green':
$color=imagecolorallocate($im,0,0xFF,0);
break;
default:
$color=imagecolorallocate($im,0xFF,0xFF,0xFF);
break;
}
# Display text
imagettftext($im,$size,0,$x,$y,$color,$font,$array_complement[0]);
# Return customized image
return($im);
}
function send404()
{
Global $DEFAULT_IMAGE;
$send=True;
# Default image
if($DEFAULT_IMAGE[0]!='')
{
if(check_number($DEFAULT_IMAGE[0],$DEFAULT_IMAGE[1])) $send=False;
}
# Send 404
if($send)
{
# Send an HTTP 404
header('HTTP/1.0 404 Not Found');
print('<html><body><h1>HTTP 404 - Image Not Found</h1></body></html>');
}
}
function check_number($number,$complement='')
{
Global $CACHE_DIR;
Global $PICTURES_DIR;
Global $BLOWUP;
# Not found by default
$return=False;
# Look in the cache directory
$filename=$CACHE_DIR.'/'.$number.'.png';
if(file_exists($filename))
{
# Retrieve image
$im=@imagecreatefrompng($filename);
# Modify image if needed
if($complement!='') $im=customImage($im,$complement);
# Send image in the HTTP response
header ('Content-type: image/png');
imagepng($im);
# Destroy image
imagedestroy($im);
# Found
$return=True;
}
# Not found
if(!$return)
{
# Look in the cache
$im=getImageFromLibrary($PICTURES_DIR,$number);
# Image found
if(!empty($im))
{
# Found
$return=True;
# Scale image to the right size
$im=scaleImage($im,$BLOWUP);
# Save image to cache directory. use same number in filename as in original file in the library.
$filename = $CACHE_DIR.'/'.$number.'.png';
@imagepng($im,$filename);
# Modify image if needed
if($complement!='') $im=customImage($im,$complement);
# Send image in the HTTP response
header ('Content-type: image/png');
imagepng($im);
# Destroy image
imagedestroy($im);
}
}
# Return result
return($return);
}
function remove_prefix($number,$dialplan,$type)
{
# Depending on type
switch($type)
{
# Local prefix
case 'local':
# Remove local prefixes
$local_prefixes_array=explode(',',$dialplan['local']);
# At least one prefix
if(is_array($local_prefixes_array))
{
# Check each prefix
foreach($local_prefixes_array as $prefix)
{
# Empty prefix skip
$prefix=trim($prefix);
if($prefix=='') continue;
# Number starts with prefix
if(strpos($number,$prefix)===0)
{
# Remove prefix
$number=str_replace($prefix,'',$number);
break;
}
# Number starts with "external prefix + prefix"
if(strpos($number,$external_prefix.$prefix)===0)
{
# Remove prefix
$number=str_replace($dialplan['outgoing'].$prefix,'',$number);
break;
}
}
}
break;
# External
case 'external':
# Remove external prefix
if(isset($dialplan['outgoing']))
{
# External prefix
if (strpos($number,$dialplan['outgoing'])===0)
{
# Remove prefix
$number=substr($number,strlen($dialplan['outgoing']));
}
}
break;
# International
case 'international':
# Remove external/international prefix
if(isset($dialplan['international']))
{
# External prefix
if(strpos($number,$dialplan['outgoing'].$dialplan['international'])===0)
{
# Remove prefix
$number=substr($number,strlen($dialplan['outgoing'].$dialplan['international']));
}
}
break;
}
# Return transformed number
return($number);
}
function transform_mapping($number,$dialplan,$array_mapping,$type)
{
# Not found yet
$found=False;
$complement='';
# Check if number is in mapping file.
if(count($array_mapping)>0)
{
# Local variables
$len_outgoing=strlen($dialplan['outgoing']);
$len_international=strlen($dialplan['international']);
# Process each entry
foreach($array_mapping as $keys=>$values)
{
# Get all entries
$array_keys=explode(',',$keys);
# Get number
$array_values=explode(',',$values,2);
$value=$array_values[0];
# Process all entries
foreach($array_keys as $key)
{
# Not a prefix
if(substr($key,0,1)!='p')
{
# Return mapped number as found in mapping file.
if($type=='1')
{
if (($number == $key) || ($number == $dialplan['outgoing'].$key) || ($number == $dialplan['outgoing'].$dialplan['international'].$key) || ($number == $dialplan['international'].$key))
{
$found=True;
$number=$value;
$complement=$array_values[1];
break;
}
}
}
else
{
# Return mapped number as found in mapping file.
if($type=='2')
{
# Remove the P
$compare=substr($key,1);
$array_pattern=array();
$array_pattern[]=$compare;
if(!in_array($dialplan['outgoing'].$compare,$array_pattern)) $array_pattern[]=$dialplan['outgoing'].$compare;
if(!in_array($dialplan['outgoing'].$dialplan['international'].$compare,$array_pattern)) $array_pattern[]=$dialplan['outgoing'].$dialplan['international'].$compare;
if(!in_array($dialplan['international'].$compare,$array_pattern))$array_pattern[]=$dialplan['international'].$compare;
# Return mapped number as found in mapping file.
if (check_pattern($number,$array_pattern))
{
$found=True;
$number=$value;
$complement=$array_values[1];
break;
}
}
}
# Break the loop if found
if($found) break;
}
}
}
# Return mapping number
return(array($number,$complement));
}
function check_pattern($number,$patterns)
{
# Not found by default
$found=False;
# Process each pattern
foreach($patterns as $pattern)
{
# Valid by default
$valid=True;
# Store lengths
$len_pattern=strlen($pattern);
$len_number=strlen($number);
# Check if unlimted string
if(strstr($pattern,'.'))
{
$explode=explode('.',$pattern);
$pattern=$explode[0].'.';
$test=True;
}
else $test=($len_pattern==$len_number);
# Do the test
if($test and $valid)
{
for($i=0;($i<$len_pattern) and $valid;$i++)
{
switch($pattern[$i])
{
case 'x':
if(($number[$i]<0) or ($number[$i]>9)) $valid=False;
break;
case 'z':
if(($number[$i]<1) or ($number[$i]>9)) $valid=False;
break;
case 'n':
if(($number[$i]<2) or ($number[$i]>9)) $valid=False;
break;
case '.':
$i=$len_pattern;
break;
default:
if($number[$i]!=$pattern[$i]) $valid=False;
break;
}
}
}
else $valid=False;
if($valid)
{
$found=True;
break;
}
}
# Return result;
return($found);
}
#############################################################################
# Body
#############################################################################
# Variables
$found=False;
# Script was called with query string ?number=xxxx
$number_original=preg_replace('/[^0-9]/','',$_GET['number']);
# Script was called with query string ?/xxxx.png or similar match xxxx.png pattern in the query string
if(empty($number_original))
{
if(preg_match('/([0-9*#]+)\.png/',$_SERVER['QUERY_STRING'],$matches)) $number_original = $matches[1];
}
# Retrieve image format and color
$SQUARE=is_square();
$WHITE=is_white();
# No number
if(empty($number_original))
{
# Send a 404 and exit
send404();
exit;
}
# Retrieve directory configuration
$array_config=readINIfile('pictureID.conf','#','=');
# Absolute or relative path to the cache directory. Must be writable by the Web server.
if($array_config['General']['cache']!='') $CACHE_DIR=$array_config['General']['cache'];
else $CACHE_DIR='cache';
# Absolute or relative path to the picture library directory. This is read-only.
if($array_config['General']['pictures']!='') $PICTURES_DIR=$array_config['General']['pictures'];
else $PICTURES_DIR='pictures';
# Rescale image smaller than expected size
$BLOWUP=False;
if($array_config['General']['blowup']=='1') $BLOWUP=True;
# Default image
$DEFAULT_IMAGE=array();
if($array_config['General']['default']!='') $DEFAULT_IMAGE=explode(',',$array_config['General']['default']);
# Check original number
if(!$found) $found=check_number($number_original);
# Remove local prefixes
if(!$found)
{
$number_transformed=remove_prefix($number_original,$array_config['Dialplan'],'local');
if($number_transformed!=$number_original) $found=check_number($number_transformed);
}
# Check basic mapping
if(!$found)
{
$array_number=transform_mapping($number_original,$array_config['Dialplan'],$array_config['Numbers'],'1');
if($array_number[0]!=$number_original) $found=check_number($array_number[0],$array_number[1]);
}
# Check advanced mapping
if(!$found)
{
$array_number=transform_mapping($number_original,$array_config['Dialplan'],$array_config['Numbers'],'2');
if($array_number[0]!=$number_original) $found=check_number($array_number[0],$array_number[1]);
}
# Remove external prefix
if(!$found)
{
$number_transformed=remove_prefix($number_original,$array_config['Dialplan'],'external');
if($number_transformed!=$number_original) $found=check_number($number_transformed);
}
# Remove international prefix
if(!$found)
{
$number_transformed=remove_prefix($number_original,$array_config['Dialplan'],'international');
if($number_transformed!=$number_original) $found=check_number($number_transformed);
}
# No number
if(!$found)
{
# Send a 404
send404();
}
# Clean exit
exit;
?>

View File

@ -0,0 +1,125 @@
#############################################################################
# pictureID.conf
#
# Configuration file for number translation map
#
# Copyright 2005-2015 Mitel Networks.
#
# Description
# This configuration file is used for the picture CallerID to map a number
# with a number that already has an existing picture or the name of a picture.
# Prefixes are processed in the order they are declared in the file, like for
# a regular dialplan.
#
#############################################################################
###############################################################################
# Global parameters
#
# [General]
# pictures Directory for the raw pictures
# Default is ./pictures
# Must be r for HTTP Server user
#
# cache Directory for the cached pictures
# Default is ./cache
# Must be r/w for HTTP Server user
#
# blowup Enable (1) or disable (0) image scaling smaller than 150x200 pixels.
# This may/will lead to grainy/pixelized images.
# Default is disable
#
# default Provides a default image when the number does not match
# any picture. A 404 is sent if no number is provided though.
# default=mapped_number or mappedname,LABEL|YPOSITION|ALIGNMENT|COLOR|FONTSIZE
# See the [Numbers] section for the format of the line
###############################################################################
[General]
pictures=
cache=
blowup=
default=
###############################################################################
# Dialing profile
#
# [Dialplan]
# country Country code
# If phone number starts with "+<country>", this will be
# removed
#
# long distance Long distance prefix
# This prefix will be added to the number in case +<country>
# has been stripped.
# Leave blank if not needed.
#
# international International prefix
# The "+" sign will be replaced with this prefix
#
# outgoing Outgoing prefix
# Prefix that needs to be appended for outgoing calls
# (all call but local calls), e.g. 0 or 9
#
# local List of local PBX number prefixes separated by a comma
# (in national format). Prefix will be removed, no outgoing
# prefix will be added.
# Examples: local=905760,978262
# --> 9057602222 will be replaced by 2222 and 9782623333 will
# be replaced by 3333.
###############################################################################
[Dialplan]
country=1
long distance=1
international=011
outgoing=
local=
#############################################################################
# Number mapping
#
# Line Format
# [Numbers]
# number and/or patterns comma separated=mapped_number or mappedname,LABEL|YPOSITION|ALIGNMENT|COLOR|FONTSIZE
# Simple number matching
# it can be used to map multiple phone numbers (cell, home , other) to a user
# Pattern matching
# it can be used to map open numbers
# Pattern format is P followed by
# any digit including * or #
# X digit between 0 and 9
# Z digit between 1 and 9
# N digit between 2 and 9
# . indicates an open length number, must be positioned at the end of the pattern
# The entries in the [Numbers] section are processed based on the order in
# the file, so it is recommended to put the open patterns at the end.
#
# Where
# LABEL is the label to be displayed on the picture
# YPOSITION is the vertical position of the label (between 1 and 200), default is 100
# ALIGNMENT is the horizontal alignment left|center|right, default is center
# COLOR is the label color yellow|orange|pink|purple|black|grey|red|brown|tan|magenta|blue|green|white (default is white)
# FONTSIZE is the font size in pixels (between 8 and 24) default is 10
#
# Example
# [Numbers]
# 0795551234=2299
# Will display the picture "2299" when 0795551234 is dialed or incoming
# P972XXXXXXX,P469XXXXXXX,P214XXXXXXX=default,"DALLAS, TX"|187|center|blue|10
# Will display the picture "default" with a centered blue label "Dallas, TX" font size 10 at vertical position 187 when 10 digits numbers starting with 972 or 469 or 214 are dialed or incoming
# P44.=UK
# Will display the picture "UK" when any number starting with 44 is dialed or is incoming
#############################################################################
[Numbers]
0000=logo,"Picture Caller ID"|175|center|blue|10
P613XXXXXXX,P416XXXXXXX,P905XXXXXXX,P289XXXXXXX,P306XXXXXXX,P403XXXXXXX,P418XXXXXXX,P438XXXXXXX,P450XXXXXXX,P506XXXXXXX,P514XXXXXXX,P519XXXXXXX,P600XXXXXXX,P604XXXXXXX,P613XXXXXXX,P647XXXXXXX,P705XXXXXXX,P778XXXXXXX,P780XXXXXXX,P807XXXXXXX,P819XXXXXXX,P867XXXXXXX,P902XXXXXXX,P1416XXXXXXX=CA
PNXXXXXXXXX,P1NXXXXXXXXX=US
P44.=UK
P41.=CH
P33.=FR
P32.=BE
P49.=DE
P39.=IT
P52.=MX
P46.=SWE
P34.=SP

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1,15 +0,0 @@
# SIP Lines
sip line1 auth name: $$AA_SIPAUTHNAME_AA$$
sip line1 password: $$AA_SIPSECRET_AA$$
sip line1 user name: $$AA_SIPUSERNAME_AA$$
sip line1 display name: $$AA_SIPCALLERID_AA$$
sip line1 screen name: $$AA_SIPCALLERID_AA$$
sip line1 proxy ip: $$AA_PROXY_SERVER_AA$$
sip line1 proxy port: 5060
sip line1 registrar ip: $$AA_REGISTRAR_SERVER_AA$$
sip line1 registrar port: 5060
sip line1 vmail: *98
sip line1 mode: 0
# Action URI
action uri startup:

View File

@ -1,15 +0,0 @@
# SIP Lines
sip line1 auth name: $$AA_SIPAUTHNAME_AA$$
sip line1 password: $$AA_SIPSECRET_AA$$
sip line1 user name: $$AA_SIPUSERNAME_AA$$
sip line1 display name: $$AA_SIPCALLERID_AA$$
sip line1 screen name: $$AA_SIPCALLERID_AA$$
sip line1 proxy ip: $$AA_PROXY_SERVER_AA$$
sip line1 proxy port: 5060
sip line1 registrar ip: $$AA_REGISTRAR_SERVER_AA$$
sip line1 registrar port: 5060
sip line1 vmail: *98
sip line1 mode: 0
# Action URI
action uri startup:

View File

@ -1,15 +0,0 @@
# SIP Lines
sip line1 auth name: $$AA_SIPAUTHNAME_AA$$
sip line1 password: $$AA_SIPSECRET_AA$$
sip line1 user name: $$AA_SIPUSERNAME_AA$$
sip line1 display name: $$AA_SIPCALLERID_AA$$
sip line1 screen name: $$AA_SIPCALLERID_AA$$
sip line1 proxy ip: $$AA_PROXY_SERVER_AA$$
sip line1 proxy port: 5060
sip line1 registrar ip: $$AA_REGISTRAR_SERVER_AA$$
sip line1 registrar port: 5060
sip line1 vmail: *98
sip line1 mode: 0
# Action URI
action uri startup:

View File

@ -1,15 +0,0 @@
# SIP Lines
sip line1 auth name: $$AA_SIPAUTHNAME_AA$$
sip line1 password: $$AA_SIPSECRET_AA$$
sip line1 user name: $$AA_SIPUSERNAME_AA$$
sip line1 display name: $$AA_SIPCALLERID_AA$$
sip line1 screen name: $$AA_SIPCALLERID_AA$$
sip line1 proxy ip: $$AA_PROXY_SERVER_AA$$
sip line1 proxy port: 5060
sip line1 registrar ip: $$AA_REGISTRAR_SERVER_AA$$
sip line1 registrar port: 5060
sip line1 vmail: *98
sip line1 mode: 0
# Action URI
action uri startup:

View File

@ -1,35 +0,0 @@
#!/bin/sh
# To put on /usr/local/sbin
echo ""
echo "--------------------------------------------------------------"
echo "Creating a default config file for Aastra phones"
echo "--------------------------------------------------------------"
echo ""
echo "Creating /tftpboot/aastra.cfg..."
echo ""
IFCONFIG=`which ifconfig 2>/dev/null||echo /sbin/ifconfig`
IPADDR=`$IFCONFIG eth0|gawk '/inet addr/{print $2}'|gawk -F: '{print $2}'`
cat > /tftpboot/aastra.cfg <<EOF
# Setup DHCP mode
dhcp: 1
# Setup TFTP server address
tftp server: $IPADDR
# Time server
time server disabled: 0
time server1: pool.ntp.org
# Startup URI
action uri startup: http://$IPADDR/xml/startup/startup.php
EOF
chmod 666 /tftpboot/aastra.cfg
echo "Created /tftpboot/aastra.cfg using $IPADDR for the proxy. If the"
echo "IP address of your Asterisk system changes run this script again and reboot."
echo "Reboot your Aastra phones by disconnectiong the power to the phone."
echo ""

View File

@ -1,450 +0,0 @@
<?php
#
# WVMail - Web based Voicemail for Asterisk (http://asterisk.org)
# (C) 2002 Siggi Langauf
#
# Backend access functions
#
###########################################################################
/**
* Get MySQL config from voicemail.conf
*
* @return array('user'=>'username', 'pass'=>'password', 'host'=>'hostname', 'name'=>'database name')
*
*/
function get_mysql_config() {
global $voicemailconf;
$lines = @file($voicemailconf);
$section = NULL;
foreach ($lines as $line){
$line = rtrim($line);
if (preg_match("/^\s*\[([a-z]*)\]\s*$/i", $line, $m)){
$section = $m[1];
continue;
}
if ($section == "general"
&& preg_match("/^(db[a-z]*)\s*=\s*([\w\W]*)$/",$line, $m)) {
if ($m[1] == "dbuser" ) {
$db['user'] = $m[2];
}
if ($m[1] == "dbpass" ) {
$db['pass'] = $m[2];
}
if ($m[1] == "dbhost" ) {
$db['host'] = $m[2];
}
if ($m[1] == "dbname" ) {
$db['name'] = $m[2];
}
}
if (isset($db) && count($db) == 4) {
break;
}
}
return $db;
}
/**
* Authenticate user
*
* @param $user is the user ID
* @param $password is the password given by user
*
* @return false if the password is wrong, otherwise:
* This users config string (typically: Realname, email)
*/
function verify_user($user, $password){
global $context, $voicemailconf, $backendtype;
if($backendtype == "mysql") {
$db=get_mysql_config();
$link = mysql_connect($db["host"], $db["user"], $db["pass"]) or die("DB connection failed ".mysql_error());
mysql_select_db($db["name"]) or die("DB selection failed ".mysql_error());
$query = "SELECT context,mailbox,PASSWORD
FROM users
WHERE context='".$context."'
AND mailbox='".$user."'
AND PASSWORD='".$password."'";
$result = mysql_query($query) or die("Query failed : " . mysql_error());
if(mysql_num_rows($result) != '1') {
return false;
} else {
mysql_free_result($result);
mysql_close($link);
return true;
}
} else {
$lines = @file($voicemailconf);
$section = NULL;
foreach ($lines as $line){
$line = rtrim($line);
if (preg_match("/^\s*\[([a-z]*)\]\s*$/i", $line, $m)){
$section = $m[1];
}
if ($section == $context
&& preg_match("/^([0-9]*)\s*=>?\s*([0-9]*)\s*,(.*)$/",$line, $m)) {
if ($m[1] == $user && $m[2] == $password){
return $m[3];
}
}
}
}
return false;
}
/**
* get list of mailboxes for given user
*/
function get_mailboxes($user){
global $boxbase, $dirMode;
$boxes = array();
$dir = "$boxbase/$user";
/* handle case where user exists but mailbox doesn't
app_voicemail creates them on 1st access, so should we */
if (!file_exists($dir)) {
umask("0000");
if(mkdir($dir, "2770")) {
if(mkdir("$dir/INBOX", "2770")) {
$boxes[] = "INBOX";
}
}
/* exit early, there won't be any other dir's */
return $boxes;
}
if ($handle = @opendir($dir)) {
while (false !== ($file = @readdir($handle))) {
if ($file{0}!= '.' && @is_dir("$boxbase/$user/$file")){
$boxes[] = $file;
}
}
}
return $boxes;
}
/**
* get message info for all messages in a given mailbox
*
* @param $user the user id
* @param $mailbox the mailbox
* @return an array of message info arrays
*/
function get_messages($user, $mailbox){
global $boxbase, $dirMode;
$messages = array();
$dir = "$boxbase/$user/$mailbox";
if ($handle = @opendir($dir)) {
/* This is the correct way to loop over the directory. */
while (false !== ($file = @readdir($handle))) {
if (preg_match("/^(msg(.*))\.txt$/",$file, $m)){
$info = array();
$info['txtfile'] = "$dir/$file";
$info['playname'] = "$dir/".$m[1];
$info['id'] = $m[2];
$info['folder'] = $mailbox;
if ($lines = @file($info['txtfile'])){
foreach ($lines as $line){
if (preg_match("/^([a-z]*)=(.*)$/", rtrim($line), $m)){
# this should give us the following info parameters:
# origmailbox, context, exten, priority, callerchan, callerid,
# origdate, origtime, duration
$info[$m[1]] = $m[2];
}
}
$messages[] = $info;
}
}
}
}
return $messages;
}
/**
* delete a given message
*
* @param $user the user id
* @param $mailbox the mailbox
* @param $message id of the message you want to delete
*
* @return true if deleted, false on errors
*/
function delete_message($user, $mailbox, $message){
global $boxbase;
$dir = "$boxbase/$user/$mailbox";
$deleted = false;
if ($handle = @opendir($dir)) {
while (false !== ($file = @readdir($handle))) {
if (preg_match("/^msg$message/",$file, $m)){
if(@unlink("$dir/$file")){
$deleted = true;
}
}
}
}
if($mailbox == "INBOX") {
update_mwi($user);
}
return $deleted;
}
/**
* play a file to given phone via the vmailbridge.agi script
*
* @param $extension is the extension to play to
* @param $file is the file to play (extension omitted, * playfile convention)
* @param $initiate if true (default), the voice connection is initiated
* (ie. the phone called) if it is not already open
* if set to false, the file is just enqueued while the call will have
* to be initiated manually.
* @return false if there is no voice connection, true otherwise
*/
function send_file($extension, $file, $initiate=true){
global $callspooldir, $vmbridgedir, $vmbridge_channel, $vmbridge_extension;
$status_file = $vmbridgedir."/$extension.current";
$request_file = $vmbridgedir."/$extension";
$talking = true; //assume connected phone
if (! @file_exists($status_file)){ //no phone connected, yet
if (!$initiate){
$talking = false;
}
else {//initiate call
list($usec, $sec) = explode(' ', microtime());
$t = (float)$sec + (float)$usec;
$callspool_file = "$callspooldir/$extension.$t.call";
$callrequest = 'Channel: ';
$callrequest.= str_replace('@extension@', $extension, $vmbridge_channel);
$callrequest.= "\nCallerid: $extension\n"
. "Context: default\n"
. "Extension: $vmbridge_extension\n"
. "Priority: 1\n";
umask("0000");
if (!$handle = @fopen($callspool_file, 'w')){
print("unable to open file $callspool_file");
exit;
}
fwrite($handle, $callrequest);
fclose($handle);
}
}
// write request to the request file read by vmbridge.agi
if (!$handle = @fopen($request_file, 'w')){
print("unable to open file $request_file");
exit(1);
}
fwrite($handle, $file);
fclose($handle);
return $talking;
}
/**
* close the vmailbridge (if any) to this extension
*
* @param $extension is the extension to close
*/
function close_bridge($extension){
global $vmbridgedir;
$status_file = $vmbridgedir."/$extension.current";
$request_file = $vmbridgedir."/$extension";
if (@file_exists($status_file)){ //bridge is open
// write request to the request file read by vmbridge.agi
if (!$handle = @fopen($request_file, 'w')){
print("unable to open $request_file");
exit(1);
}
fwrite($handle, "vm-goodbye");
fclose($handle);
}
}
/**
* update MWI
*
* @param $user
*/
function update_mwi($user) {
global $context, $updateMWI;
if(!$updateMWI) {
return true;
}
$call_context = "voicemail"; //not actually used
@system("../bin/ccm-mwi ".$call_context." ".$user."@".$context." ".count(get_messages($user, "INBOX")), $result);
return $result;
}
/**
* save to folder
*
* @param $user
* @param $message
* @param $srcFolder
* @param $dstFolder
*/
function save_to_folder($user, $message, $srcFolder, $dstFolder) {
global $MAXMSG, $boxbase, $dirMode;
$srcPath = $boxbase.'/'.$user.'/'.$srcFolder;
$dstPath = $boxbase.'/'.$user.'/'.$dstFolder;
umask("0000");
if(!@file_exists($dstPath)){
if(!@mkdir($dstPath, $dirMode)) {
return false;
}
}
for($i=0; $i <= $MAXMSG; $i++) {
$dstMessage = sprintf("msg%04d", $i);
if(!@file_exists($dstPath.'/'.$dstMessage.'.txt') ) {
break;
}
}
if($i >= $MAXMSG) {
return false; // folder is full
}
// copy files
foreach(array("wav","WAV","gsm","txt") as $extension) {
$src = $srcPath.'/msg'.$message.".".$extension;
$dst = $dstPath.'/'.$dstMessage.".".$extension;
if(@file_exists($src))if(!@copy($src, $dst)) {
return false;
}
}
return true;
}
/**
* move to folder
*
* @param $user
* @param $message
* @param $srcFolder
* @param $dstFolder
*/
function move_to_folder($user, $message, $srcFolder, $dstFolder)
{
global $MAXMSG, $boxbase, $dirMode;
$srcPath = $boxbase.'/'.$user.'/'.$srcFolder;
$dstPath = $boxbase.'/'.$user.'/'.$dstFolder;
umask("0000");
if(!@file_exists($dstPath))
{
if(!@mkdir($dstPath, $dirMode)) return false;
}
for($i=0; $i <= $MAXMSG; $i++)
{
$dstMessage = sprintf("msg%04d", $i);
if(!@file_exists($dstPath.'/'.$dstMessage.'.txt') ) break;
// folder is full
if($i >= $MAXMSG) return false;
}
// move files
foreach(array("wav","WAV","gsm","txt") as $extension)
{
$src = $srcPath.'/msg'.$message.".".$extension;
$dst = $dstPath.'/'.$dstMessage.".".$extension;
if(@file_exists($src))
{
if(!@copy($src, $dst)) return false;
else @unlink($src);
}
}
return true;
}
/**
* mark as read
*
* @param $user
* @param $message
* @param $srcFolder
* @param $dstFolder
*/
function mark_as_read($user, $message, $srcFolder, $dstFolder)
{
global $MAXMSG, $boxbase, $dirMode;
$srcPath = $boxbase.'/'.$user.'/'.$srcFolder;
$dstPath = $boxbase.'/'.$user.'/'.$dstFolder;
umask("0000");
if(!@file_exists($dstPath))
{
if(!@mkdir($dstPath, $dirMode)) return ("");
}
for($i=0; $i <= $MAXMSG; $i++)
{
$dstMessage = sprintf("msg%04d", $i);
$msg_id = sprintf("%04d", $i);
if(!@file_exists($dstPath.'/'.$dstMessage.'.txt') ) break;
// folder is full
if($i >= $MAXMSG) return ("");
}
// move files
foreach(array("wav","WAV","gsm","txt") as $extension)
{
$src = $srcPath.'/msg'.$message.".".$extension;
$dst = $dstPath.'/'.$dstMessage.".".$extension;
if(@file_exists($src))
{
if(!@copy($src, $dst)) return ("");
else @unlink($src);
}
}
return $msg_id;
}
?>

View File

@ -1,76 +0,0 @@
<?php
#
# XMLMail - Web based Voicemail for Asterisk (http://asterisk.org)
#
# Copyright 2003 Siggi Langauf
#
# Config options
#
###########################################################################
# Application Name
$appName = "Voice Mail";
# complete path to asterisk's voicemail.conf
$voicemailconf = '/etc/asterisk/voicemail.conf';
# backend type (mysql|text)
$backendtype = "text";
# asterisk's voicemail spool directory
$vboxspool = '/var/spool/asterisk/voicemail';
$context = 'default';
$boxbase = "$vboxspool/$context";
$MAXMSG = "99";
$fileMode = "0660";
$dirMode = "2770";
# CCM MWI integration
$mwiOnExt = "6901";
$mwiOffExt = "6902";
$updateMWI = false; // should we updated MWI from the html/xml frontends
##
## parameters for the "vmailbridge.agi" script
##
# spool directory. vmailbridge.agi will look here for commands
$vmbridgedir = '/var/spool/asterisk/vmbridge';
# vmailbridge_channel will be called by asterisk, if no vmailbridge.agi is
# connected for this extension, yet. The vmailbridge.agi script must be
# available via the given $vmailbridge_extension
$vmbridge_gateway = '171.16.96.63';
$vmbridge_channel = 'OH323/h323:@extension@@'.$vmbridge_gateway;
$vmbridge_extension = '5550000';
# Asterisk's spool directory for outgoing .calls
# The PHP user must have write permissions to this dir.
$callspooldir = '/var/spool/asterisk/outgoing';
# IP address of the web server
# If you use name based virtual hosts, you'll need the server name instead...
$this_server_IP = $_SERVER['SERVER_ADDR'];
# config URL for this service (will be displayed as a hint to user)
# also, your CCM does most likely not support HTTPS ;-)
$userconfig_URL = "http://172.16.96.63/CCMUSER/";
#$language = 'de';
$language = 'en';
# Possible folders - taken from asterisk/apps/app_voicemail.c:mbox
$folderNames = array(
"INBOX",
"Old",
"Work",
"Family",
"Friends",
"Cust1",
"Cust2",
"Cust3",
"Cust4",
"Cust5",
);
?>

View File

@ -1,303 +0,0 @@
<?php
#
# Startup.php
# Sample script for self configuration with Digium/Asterisk platform.
# Copyright Aastra Telecom 2007
#
#
# Includes
#
require_once('include/config.inc.php');
include_once('include/backend.inc.php');
#
# Aastra_decode_HTTP_header
#
# Returns an array
# 0 Phone Type
# 1 Phone MAC Address
# 2 Phone firmware version
# 3 IP address
#
function Aastra_decode_HTTP_header()
{
$user_agent=$_SERVER["HTTP_USER_AGENT"];
if(stristr($user_agent,"Aastra"))
{
$value=preg_split("/ MAC:/",$user_agent);
$fin=preg_split("/ /",$value[1]);
$value[1]=preg_replace("/\-/","",$fin[0]);
$value[2]=preg_replace("/V:/","",$fin[1]);
}
else
{
$value[0]="MSIE";
$value[1]="NA";
$value[2]="NA";
}
$value[3]=$_SERVER["REMOTE_ADDR"];
return($value);
}
#
# lookup_config_file(extension)
#
# Returns 1 if extension already in use
#
function lookup_config_file($extension)
{
$config="startup.cfg";
# Init return
$return=0;
# Read config file
$array = @parse_ini_file($config, true);
# Test MAC address
if($array[$extension]['mac']!="") $return=1;
return($return);
}
#
# update_config_file(extension,mac,ip,model)
#
# Update the config file with the new extension
#
function update_config_file($extension,$mac,$ip,$model)
{
$config="startup.cfg";
# Read config file
$array = @parse_ini_file($config, true);
if($array==NULL) $array=array();
# Update value
$array[$extension]['mac']=$mac;
$array[$extension]['ip']=$ip;
$array[$extension]['model']=$model;
# Update config file
reset($array);
$handle = @fopen($config, "w");
if($handle)
{
while ($v = current($array))
{
fputs($handle,"[".key($array)."]"."\n");
fputs($handle,"mac=".$v['mac']."\n");
fputs($handle,"ip=".$v['ip']."\n");
fputs($handle,"model=".$v['model']."\n\n");
next($array);
}
fclose($handle);
}
}
#
# create_mac(extension,mac,username,secret,callerid,model,version)
#
# Creates the MAC.cfg file for the user.
#
function create_mac($mac,$extension,$username,$secret,$callerid,$model,$version)
{
Global $AA_PROXY_SERVER,$AA_REGISTRAR_SERVER;
$value=preg_split("/ /",$callerid);
$result=$value[0]." ".$value[1];
$result=preg_replace("/</","(",$result);
$result=preg_replace("/>/",")",$result);
# Prepare replace strings
$search=array('/\$\$AA_SIPAUTHNAME_AA\$\$/','/\$\$AA_SIPSECRET_AA\$\$/','/\$\$AA_SIPUSERNAME_AA\$\$/','/\$\$AA_SIPCALLERID_AA\$\$/','/\$\$AA_PROXY_SERVER_AA\$\$/','/\$\$AA_REGISTRAR_SERVER_AA\$\$/');
$replace=array($username,$secret,$extension,$result,$AA_PROXY_SERVER,$AA_REGISTRAR_SERVER);
$read = @fopen($model.".cfg", "r");
if($read)
{
$write = @fopen("/tftpboot/".$mac.".cfg", "w");
if($write)
{
# Create file header
while($line=fgets($read,200))
{
$line = preg_replace($search, $replace, $line);
fputs($write,$line);
}
fputs($write,"\n");
fclose($write);
}
fclose($read);
}
}
##########################################
# GLOBAL VARIABLES
$XML_SERVER = "http://".$_SERVER['SERVER_ADDR'].$_SERVER['SCRIPT_NAME'];
$AA_PROXY_SERVER = $_SERVER['SERVER_ADDR'];
$AA_REGISTRAR_SERVER = $_SERVER['SERVER_ADDR'];
$location = "/etc/asterisk/";
##########################################
# Retrieve parameters
$extension=$_GET["extension"];
$password=$_GET["password"];
$action=$_GET["action"];
$step=$_GET["step"];
# Set content type
header("Content-Type: text/xml");
if($action=="countdown")
{
# Display Reboot message
$output = "<AastraIPPhoneTextScreen destroyOnExit=\"yes\">\n";
$output .= "<Title>Reboot needed</Title>\n";
$output .= "<Text>Your phone will reboot in ".$step." seconds.</Text>\n";
$step--;
$output .= "</AastraIPPhoneTextScreen>\n";
header("Content-Type: text/xml");
header("Content-Length: ".strlen($output));
if($step==0) header("Refresh: 1; url=".$XML_SERVER."?action=reboot");
else header("Refresh: 1; url=".$XML_SERVER."?action=countdown&step=".$step);
echo $output;
exit;
}
if($action=="reboot")
{
$output = "<AastraIPPhoneExecute>\n";
$output .= "<ExecuteItem URI=\"Command: Reset\"/>\n";
$output .= "</AastraIPPhoneExecute>\n";
header("Content-Length: ".strlen($output));
echo $output;
exit;
}
# Input Extension
if ($extension=="")
{
$output = "<AastraIPPhoneInputScreen type=\"number\" LockIn=\"yes\">\n";
$output .= "<Title>Initial startup</Title>\n";
$output .= "<Prompt>Enter Extension</Prompt>\n";
$output .= "<URL>$XML_SERVER</URL>\n";
$output .= "<Parameter>extension</Parameter>\n";
$output .= "<Default></Default>\n";
$output .= "</AastraIPPhoneInputScreen>\n";
header("Content-Length: ".strlen($output));
echo $output;
exit;
}
# Input Password
if ($password=="")
{
$output = "<AastraIPPhoneInputScreen type=\"number\" password=\"yes\" LockIn=\"yes\" destroyOnExit=\"yes\">\n";
$output .= "<Title>Initial startup</Title>\n";
$output .= "<Prompt>Enter Password</Prompt>\n";
$output .= "<URL>$XML_SERVER?extension=$extension</URL>\n";
$output .= "<Parameter>password</Parameter>\n";
$output .= "<Default></Default>\n";
$output .= "</AastraIPPhoneInputScreen>\n";
header("Content-Length: ".strlen($output));
echo $output;
exit;
}
# IF authentication failed
if (!$userinfo = verify_user($extension, $password))
{
# Display error
$output = "<AastraIPPhoneTextScreen LockIn=\"yes\" destroyOnExit=\"yes\">\n";
$output .= "<Title>Authentication failed</Title>\n";
$output .= "<Text>Wrong user and password.</Text>\n";
$output .= "</AastraIPPhoneTextScreen>\n";
header("Content-Type: text/xml");
header("Content-Length: ".strlen($output));
echo $output;
exit;
}
# IF already configured
if(lookup_config_file($extension)==1)
{
# Display error
$output = "<AastraIPPhoneTextScreen LockIn=\"yes\" destroyOnExit=\"yes\">\n";
$output .= "<Title>Error</Title>\n";
$output .= "<Text>Extension already in use.</Text>\n";
$output .= "</AastraIPPhoneTextScreen>\n";
header("Content-Type: text/xml");
header("Content-Length: ".strlen($output));
echo $output;
exit;
}
# Get all the user data
$sip_array = parse_ini_file($location."sip_additional.conf", true);
# If user not found
if ($sip_array[$extension]==NULL)
{
# Display error
$output = "<AastraIPPhoneTextScreen LockIn=\"yes\" destroyOnExit=\"yes\">\n";
$output .= "<Title>Internal error</Title>\n";
$output .= "<Text>Extension is not provisioned.</Text>\n";
$output .= "</AastraIPPhoneTextScreen>\n";
header("Content-Type: text/xml");
header("Content-Length: ".strlen($output));
echo $output;
exit;
}
else
{
# Collect data
$username=$sip_array[$extension]['username'];
$secret=$sip_array[$extension]['secret'];
$callerid=$sip_array[$extension]['callerid'];
}
# Get MAC address and type of phone
$value=Aastra_decode_HTTP_header();
# Create mac.cfg
create_mac($value[1],$extension,$username,$secret,$callerid,$value[0],$value[2]);
# Update config file
update_config_file($extension,$value[1],$value[3],$value[0]);
# Create Reboot screen
$output = "<AastraIPPhoneTextScreen destroyOnExit=\"yes\">\n";
switch($value[0])
{
case "Aastra53i":
$output = "<AastraIPPhoneTextScreen>\n";
$output .= "<Title>REBOOT</Title>\n";
$output .= "<Text>Reboot</Text>\n";
$output .= "</AastraIPPhoneTextScreen>\n";
header("Refresh: 1; url=".$XML_SERVER."?action=reboot");
break;
default:
$output = "<AastraIPPhoneTextScreen>\n";
$output .= "<Title>Reboot needed</Title>\n";
$output .= "<Text>Your phone will reboot in 5 seconds.</Text>\n";
$output .= "</AastraIPPhoneTextScreen>\n";
header("Refresh: 1; url=".$XML_SERVER."?action=countdown&step=4");
break;
}
# Display XML Object
header("Content-Type: text/xml");
header("Content-Length: ".strlen($output));
echo $output;
exit;
?>

View File

@ -1,4 +1,4 @@
Copyright (c) 2007 Aastra Telecom US, Inc.
Copyright (c) 2005-2015 Mitel Networks.
All rights reserved.
Redistribution and use in source and binary forms, with or without

100
xml-xampp/area/area.php Normal file
View File

@ -0,0 +1,100 @@
<?php
#############################################################################
# North America area code finder
# Aastra SIP Phones R1.4.2 or better
#
# php source code
# Copyright 2005-2015 Mitel Networks
#############################################################################
#############################################################################
# PHP customization for includes and warnings
#############################################################################
$os = strtolower(PHP_OS);
if(strpos($os, 'win') === false) ini_set('include_path',ini_get('include_path').':include:../include');
else ini_set('include_path',ini_get('include_path').';include;..\include');
error_reporting(E_ERROR | E_PARSE);
#############################################################################
# Includes
#############################################################################
require_once('AastraCommon.php');
require_once('AastraIPPhoneTextScreen.class.php');
require_once('AastraIPPhoneInputScreen.class.php');
#############################################################################
# Beginning of the active code
#############################################################################
# Retrieve parameters
$area=Aastra_getvar_safe('area');
# Trace
Aastra_trace_call('area','area='.$area);
# Test User Agent
Aastra_test_phone_version('1.4.2.',0);
# Get language
$language=Aastra_get_language();
# Global compatibility
$nb_softkeys=Aastra_number_physical_softkeys_supported();
$is_toptitle_supported=Aastra_is_top_title_supported();
# Test parameter
if($area)
{
# Load area codes
$array=Aastra_readINIfile('area_codes.txt','#','=');
$object = new AastraIPPhoneTextScreen();
$object->setDestroyOnExit();
$object->setTitle(sprintf(Aastra_get_label('Area code %s',$language),$area));
if($array[''][$area]!='') $object->setText($array[''][$area]);
else $object->setText(sprintf(Aastra_get_label('Area code %s not found.',$language),$area));
# Softkeys
if($nb_softkeys>0)
{
$object->addSoftkey($nb_softkeys-1,Aastra_get_label('Back',$language), $XML_SERVER);
$object->addSoftkey($nb_softkeys,Aastra_get_label('Exit',$language), 'SoftKey:Exit');
}
$object->setCancelAction($XML_SERVER);
}
else
{
# Input area code
$object=new AastraIPPhoneInputScreen();
if($is_toptitle_supported) $object->setTopTitle(Aastra_get_label('Area code finder',$language));
else $object->setTitle(Aastra_get_label('Area code finder',$language));
$object->setPrompt(Aastra_get_label('Enter area code',$language));
$object->setParameter('area');
$object->setType('number');
$object->setURL($XML_SERVER);
$object->setDestroyOnExit();
# Softkeys
if($nb_softkeys>0)
{
if($nb_softkeys==4)
{
$object->addSoftkey('1',Aastra_get_label('Backspace',$language),'SoftKey:BackSpace');
$object->addSoftkey('3',Aastra_get_label('Lookup',$language),'SoftKey:Submit');
$object->addSoftkey('4',Aastra_get_label('Exit',$language),'SoftKey:Exit');
}
else if($nb_softkeys==6)
{
$object->addSoftkey('1',Aastra_get_label('Backspace',$language),'SoftKey:BackSpace');
$object->addSoftkey('5',Aastra_get_label('Lookup',$language),'SoftKey:Submit');
$object->addSoftkey('6',Aastra_get_label('Exit',$language),'SoftKey:Exit');
}
else
{
$object->addSoftkey('10',Aastra_get_label('Exit',$language),'SoftKey:Exit');
}
}
}
# Display object
$object->output();
exit;
?>

View File

@ -0,0 +1,308 @@
201=USA New Jersey Bayonne, Cliffside Park, Englewood, Fair Lawn, Hackensack, Hoboken, Jersey City, Leonia, Little Ferry, Lyndhurst, Paramus, Park Ridge, Ramsey, Rutherford, Union City
202=USA Washington, D.C.
203=USA Connecticut Bridgeport, Danbury, Greenwich, Meriden, New Haven, Norwalk, Stamford, Waterbury
204=Canada Manitoba
205=USA Alabama Ashville, Bexar, Birmingham, Butler, Centreville, Clanton, Columbiana, Eutaw, Hamilton, Jasper, Lincoln, Oneonta, Pell City, Tuscaloosa
206=USA Washington Bainbridge Isl., Mercer Isl., Newhalem, Sea-Tac Airport, Seattle, Vashon Isl.
207=USA Maine
208=USA Idaho
209=USA California Galt, Ione, Livingston, Lodi, Los Banos, Manteca, Merced, Modesto, Oakdale, Patterson, Ripon, Stockton, Tracy, Tuolomne Meadows, Turlock, Yosemite N.P.
210=USA Texas Alamo Heights, Elmendorf, Lackland AFB, Leon Springs, San Antonio, Shavano Park, Universal City, Wetmore
212=USA New York New York City (Manhattan only)
213=USA California core of downtown Los Angeles business district, including Chinatown, Echo Park, Westlake, most of Koreatown
214=USA Texas Addison, Allen, Carrollton, Celina, Dallas, Duncanville, Ennis, Farmers Branch, Frisco, Garland, Grand Prairie, Irving, Italy, Kaufman, Lavon, Lewisville, McKinney, Mesquite, Midlothian, Plano, Renner, Richardson, Seagoville, Terrell, Waxahatchie.
215=USA Pennsylvania Ambler, Bristol, Churchville, Doylestown, Hatboro, Kulpsville, Langhorne, New Hope, Philadelphia, Quakertown, Warrington, Willow Grove
216=USA Ohio Beachwood, Cleveland, Euclid, Independence, Lakewood, Shaker Heights
217=USA Illinois Beardstown, Carlinville, Carrollton, Carthage, Champaign, Charleston, Clinton, Danville, Decatur, Effingham, Hoopeston, Jacksonville, Lincoln, Litchfield, Lomax, Mattoon, Pana, Paxton, Rantoul, Springfield
218=USA Minnesota Bemidji, Brainerd, Duluth, East Grand Forks, Elbow Lake, Moorhead
219=USA Indiana Brook, Cedar Lake, Chesterton, Crown Point, Demotte, Dyer, East Chicago, Francesville, Gary, Goodland, Hammond, Hanna, Hebron, Highland, Hobart, Kentland, Kouts, La Crosse, La Porte, Lake of the Four Seasons, Lake Station, Lake Village, Lowell,Medaryville, Merrillville, Michigan City, Monon, Morocco, Mount Ayr, Portage, Remington, Rensselaer, Reynolds, Rolling Prairie, Roselawn, St. John, San Pierre, Union Mills, Valparaiso, Wanatah, Westville, Wheatfield, Wheeler, Whiting, Wolcott
224=USA Illinois Arlington Heights, Barrington, Deerfield, Des Plaines, Dundee, Elgin, Elk Grove Village, Evanston, Highland Park, Lake Forest, Libertyville, Northbrook, Palatine, Roselle, Schaumburg, Skokie, Waukegan
225=USA Louisiana Albany, Baton Rouge, Donaldsonville, Gonzales, Greensburg, New Roads, Plaquemine, Vacherie
227=USA Maryland Aspen Hill, Bethesda, Bowie, Brunswick, College Park, Cumberland, Frederick, Gaithersburg, Golden Beach, Greenbelt, Hagerstown, Hyattsville, Laurel, Lexington Park, Montgomery Village, New Carrollton, Potomac, Rockville, St. Charles, St. Marys City, Silver Spring, Wheaton, suburbs of D.C
228=USA Mississippi Bay St. Louis, Biloxi, Gulfport, Hurley, Moss Point, Ocean Springs, Pascagoula, Pass Christian, Pearlington, extreme southern tip of MS
229=USA Georgia Adel, Albany, Americus, Bainbridge, Blakely, Brooklyn, Cairo, Camilla, Chattahoochee, Cordele, Dawson (Terrell Co.), Fitzgerald, Georgetown, Moultrie, Quitman, Sylvester, Thomasville, Tifton, Valdosta
231=USA Michigan Acme, Amble, Big Rapids, Cadillac, Casnovia, Cheboygan, Coral, Fruitport, Grant, Howard City, Ludington, Mackinaw City, Manistee, Muskegon, Newaygo, Petoskey, Ravenna, Traverse City
234=USA Ohio Akron, Aurora, Brunswick, Canton, East Liverpool, Kent, Medina, Millersburg, New Philadelphia, Northfield, Warren, Wooster, Youngstown
239=USA Florida Bonita Springs, Cape Coral, Everglades, Flamingo, Fort Myers, Fort Myers Beach, Immokalee, Lehigh Acres, Marco Island, Monroe Station, Naples, North Cape Coral, North Fort Myers, North Naples, Pine Island, Sanibel/Captiva Islands, Collier, Lee, and (mainland portion of) Monroe Counties
240=USA Maryland Aspen Hill, Bethesda, Bowie, Brunswick, College Park, Cumberland, Frederick, Gaithersburg, Golden Beach, Greenbelt, Hagerstown, Hyattsville, Laurel, Lexington Park, Montgomery Village, New Carrollton, Potomac, Rockville, St. Charles, St. Marys City, Silver Spring, Wheaton, suburbs of D.C
248=USA Michigan Birmingham, Farmington Hills, Ferndale, Holly, Leonard, (part of) LivoniaP450,P506, Novi, Pontiac, Rochester, Southfield, Troy, Waterford, West Bloomfield, Whitmore Lake, Oakland County
250=Canada British Columbia 150 Mile House, Campbell River, Cortes Island, Courtenay, Cranbrook, Ft. St. John, Gold Bridge, Kamloops, Kelowna, Lantzville, Lasqueti Island, Lillooet, Lytton, Manning Park, Merritt, Nanaimo, Penticton, Port Alberni, Prince George, Prince Rupert, Princeton, Shalalth, Vernon, Victoria
251=USA Alabama Atmore, Bay Minette, Beatrice, Brewton, Castleberry, Coffeeville, Evergreen, Finchburg, Gilbertown, Gosport, Grove Hill, Jackson, Melvin, Mobile, Monroeville, Peterman, Pine Apple, Tillmans Corner
252=USA North Carolina Cape Hatteras, Elizabeth City, Greenville, Henderson, Kill Devil Hills, Kinston, Morehead City, New Bern, Rocky Mount, Washington, Wilson
253=USA Washington Auburn, Federal Way, Gig Harbor, Kent, Puyallup, Tacoma
254=USA Texas Breckenridge, Cameron, Cross Plains, Florence, Glen Rose, Hamilton, Hillsboro, Killeen, Marlin, Mexia, Sidney, Stephenville, Temple, Waco
256=USA Alabama Albertville, Alexander City, Anniston, Arab, Athens, Boaz, Cullman, Dadeville, Decatur, Florence, Ft. Payne, Gadsden, Guntersville, Huntsville, Piedmont, Rockford, Russellville, Sylacauga, Talladega, Wedowee
260=USA Indiana Albion, Andrews, Angola, Arcola, Ashley, Auburn, Avilla, Berne, Bippus, Bluffton, Bryant, Butler, Churubusco, Columbia City, Corunna, Craigville, Cromwell, Decatur, Etna, Fort Wayne, Fremont, Garrett, Geneva (Adams Co.), Hamilton, Harlan, Howe, Huntertown, Huntington, Kendallville, Kimmell, Lagrange, Lagro, Larwill, Laud, Leo, Liberty Center, Ligonier, Linn Grove, Markle, Mongo, Monroe, Monroeville, New Haven, North Manchester, Orland, Ossian, Pennville, Petroleum, Pleasant Lake, Pleasant Mills, Poe Hoagland, Pokagon, Portland, Preble, Reservoir, Roanoke, Saint Joe, Salamonia, Shipshewana, Sidney, Silver Lake, South Milford, South Whitley, Spencerville, Tocsin, Topeka, Tri-Lakes area, Uniondale, Urbana, Wabash, Warren, Waterloo, Wawaka, West Wabash, Wolcottville, Woodburn, Zanesville
262=USA Wisconsin Brookfield, Burlington, Delavan, Elm Grove, Hartland, Kenosha, Lake Geneva, Menomonee Falls, New Berlin, Racine, Thiensville, Waukesha, West Bend, Whitewater
267=USA Pennsylvania Ambler, Bristol, Churchville, Doylestown, Hatboro, Kulpsville, Langhorne, New Hope, Philadelphia, Quakertown, Warrington, Willow Grove
269=USA Michigan Allegan, Athens, Augusta, Banfield, Bangor, Baroda, Battle Creek, Bellevue, Benton Harbor, Berrien Springs, Bloomingdale, Bridgman, Buchanan, Burr Oak, Cassopolis, Centreville, Climax, Coloma, Colon, Constantine, Covert, Decatur, Delton, Dowagiac, Eau Claire, Edwardsburg, Fennville, Fulton, Galesburg, Galien, Ganges, Glenn, Gobles, Grand Junction, Hamilton, Hartford, Hastings, Hickory Corners, Hopkins, Kalamazoo, Lacey, Lacota, Lawrence, Lawton, Marcellus, Marshall, Martin, Mattawan, Mendon, Middleville, New Buffalo, Niles, Olivet, Otsego, Paw Paw, Pine Lake, Plainwell, Pullman, Richland, St Joseph, Saugatuck, Sawyer, Schoolcraft, Scotts, Sister Lakes, South Haven, Sturgis, Three Oaks, Three Rivers, Union, Vandalia, Vicksburg, Watervliet, Wayland, White Pigeon, Woodland
270=USA Kentucky Bowling Green, Burkesville, Campbellsville, Elizabethtown, Franklin, Glasgow, Hopkinsville, Jamestown, Lebanon, Madisonville, Mayfield, Murray, Owensboro, Paducah, Princeton, Russellville
276=USA Virginia Abingdon, Austinville, Axton, Bassett, Bland, Bluefield, Boissevain, Bristol, Collinsville, Galax, Hillsville, Laurel Fork, Marion, Martinsville, Max Meadows, Meadows of Dan, Ridgeway, Rocky Gap, Stuart, Sylvatus, Woolwine, Wytheville
281=USA Texas Aldine, Alief, Alvin, Bammel, Barker, Baytown, Channelview, Cleveland, (part of) Houston, Humble, Katy, Kemah, League City, Richmond, Rosenberg, Spring, Sugar Land, Tomball
289=Canada Ontario Ajax, Ancaster, Beeton, Bradford, Brampton, Burlington, Caledon, Castleton, Cobourg, Cooksville, Dundas, Ft. Erie, Freelton, Georgetown, Hamilton, Keswick, Malton, Milton, Mississauga, Newmarket, Niagara Falls, Oakville, Oshawa, Port Credit, Port Perry, Richmond Hill, St. Catharines, Selkirk, Streetsville, Thornhill, Unionville, Welland, suburbs of Toronto
301=USA Maryland Aspen Hill, Bethesda, Bowie, Brunswick, College Park, Cumberland, Frederick, Gaithersburg, Golden Beach, Greenbelt, Hagerstown, Hyattsville, Laurel, Lexington Park, Montgomery Village, New Carrollton, Potomac, Rockville, St. Charles, St. Marys City, Silver Spring, Wheaton, suburbs of D.C
302=USA Delaware
303=USA Colorado Arvada, Aurora, Boulder, Brighton, Broomfield, Castle Rock, Deer Trail, Denver, Englewood, Evergreen, Fort Lupton, Georgetown, Golden, Grant, Greeley, Kiowa, Lafayette, Lakewood, Larkspur, Littleton, Longmont, Nederland, Parker, Roggen, Westminster.
304=USA West Virginia
305=USA Florida Coral Gables, Hialeah, Homestead, Key Biscayne, Key Largo, Key West, Marathon, Miami, Perrine
306=Canada Saskatchewan
307=USA Wyoming
308=USA Nebraska Central City, Grand Island, Kearney, Merriman, North Platte, Scottsbluff
309=USA Illinois Bloomington, Canton, Farmer City, Geneseo, Havana, Kewanee, Lacon, Moline, Monmouth, Normal, Pekin, Peoria, Quad Cities, Rock Island
310=USA California Agoura Hills, (part of) Beverly Hills, Brentwood, Culver City, (part of) Inglewood, LAX Airport, Lennox, Malibu, Marina Del Rey, Pacific Palisades, Playa Del Rey, Santa Monica, Topanga, UCLA, Venice, (part of) West Hollywood, West L.A., Westlake Village, southwestern L.A. County
312=USA Illinois Chicago (downtown area only)
313=USA Michigan Dearborn, Detroit, Grosse Pointe, Wayne
314=USA Missouri Bridgeton, Creve Coeur, FergusoP514n, Florissant, Hazelwood, Kirkwood, Ladue, Mehlville, Oakville, Overland, Riverview, St. Louis, Sappington, Spanish Lake, Webster Green
315=USA New York Auburn, Geneva, Little Falls, Ontario, Oswego, Penn Yan, Potsdam, Rome, Romulus, Syracuse, Utica, Watertown
316=USA Kansas Andale, Andover, Augusta, Bentley, Benton, Cheney, Colwich, Derby, Douglass, El Dorado, Garden Plain, Goddard, Halstead, Kechi, Leon, Mount Hope, Mulvane, Newton, Rose Hill, Sedgwick, Towanda, Valley Center, Whitewater, Wichita
317=USA Indiana Brownsburg, Carmel, Fishers, Franklin, Greenfield, Greenwood, Indianapolis, Noblesville, Shelbyville, Sheridan
318=USA Louisiana Alexandria, Bastrop, Bossier City, Bunkie, Calcasieu, Ferriday, Grambling, Haughton, Many, Marksville, Monroe, Natchitoches, Oakdale, Ruston, Shreveport, Tallulah, Winnfield, Winnsboro
319=USA Iowa Allison, Anamosa, Aplington, Argyle, Belle Plaine, Birmingham, Brandon, Brighton, Burlington, Cantril, Cedar Falls, Cedar Rapids, Center Point, Central City, Clarksville, Clutier, Coggon, Conesville, Denver, Dike, Dunkerton, Elberon, Ely, Fairbank, Farmington, Fort Madison, Frederika, Grandview, Grundy Center, Guernsey, Hartwick, Hazleton, Independence, Iowa City, Jesup, Keokuk, Keosauqua, Keswick, Keystone, La Porte City, Lisbon, Lockridge, Lone Tree, Martelle, Mechanicsville, Monticello, Morley, Mt. Pleasant, Mt. Sterling, Mt. Vernon, Nichols, North English, Oelwein, Olin, Onslow, Packwood, Parkersburg, Plainfield, Prairieburg, Primrose, Quasqueton, Readlyn, Reinbeck, Richland, Rowley, Solon, South English, Springville, Stanwood, Stockport, Traer, Tripoli, Troy Mills, Urbana, Victor, Vinton, Walker, Washington, Waterloo, Waverly, Wellman, West Branch, West Chester, West Liberty, Winthrop
320=USA Minnesota Alexandria, Little Falls, St. Cloud, Wheaton
321=USA Florida Cape Canaveral, Cocoa Beach, Grant, Melbourne, Merritt Island, Palm Bay, Port St. John, Titusville, Altamonte Springs, Apopka, Geneva, Kenansville, Kissimmee, Orlando, Sanford, Winter Garden, Winter Park, Yeehaw Jct.
323=USA California doughnut around the core of downtown Los Angeles, including Bell, Cudahy, Huntington Park, Hyde Park, Silver Lake, Vernon, Watts, most of Hollywood, Montebello, and South Gate, and parts of Alhambra, Beverly Hills, Commerce, Inglewood, Los Angeles, Monterey Park, Pasadena, West Hollywood, and other communities
325=USA Texas Abilene, Albany, Baird, Bend, Big Lake, Big Valley, Brady, Brownwood, Coleman, Colorado City, Comanche, Goldthwaite, Junction, Llano, Mason, Ozona, Putnam, San Angelo, San Saba, Snyder, Stamford, Sterling City, Sweetwater
330=USA Ohio Akron, Aurora, Brunswick, Canton, East Liverpool, Kent, Medina, Millersburg, New Philadelphia, Northfield, Warren, Wooster, Youngstown.
334=USA Alabama Andalusia, Auburn, Camden, Daleville, Demopolis, Dixons Mills, Dothan, Eclectic, Enterprise, Eufaula, Forest Home, Fort Deposit, Georgiana, Gordonsville, Greensboro, Greenville, Holtville, Kowaliga, Lafayette, Lanett, Linden, McKenzie, Maplesville, Marion, Montgomery, Nanafalia, Notasulga, Opelika, Opp, Phenix City, Pine Hill, Prattville, Red Level, Roanoke, Rock Mills, Selma, Shawmut, Sweet Water, Tallassee, Thomasville, Troy, Tuskegee, Valley, Vredenburgh, West Point, Wetumpka, Wing
336=USA North Carolina Asheboro, Burlington, Greensboro, High Point, Jefferson, Lexington, Mt. Airy, Roxboro, Wilkesboro, Winston-Salem, Yanceyville
337=USA Louisiana Abbeville, Baldwin, Crowley, De Ridder, Eunice, Franklin, Jeanerette, Jennings, Kaplan, Lafayette, Lake Charles, Leesville, New Iberia, Opelousas, Sulphur, Ville Platte
339=USA Massachusetts Arlington, Braintree, Burlington, Canton, Chelsea, Cohasset, Dedham, Duxbury, Kingston, Lexington, Lynn, Malden, Medford, Needham, Randolph, Reading, Revere, Rockland, Saugus, Stoughton, Wakefield, Waltham, Wellesley, Weymouth, suburbs on all sides of Boston.
340=U.S. Virgin Islands
347=USA New York New York City (Bronx, Brooklyn, Queens, Staten Island). incl. Far Rockaway, Flushing, Jamaica, Long Island City
351=USA Massachusetts Andover, Athol, Barre, Beverly, Billerica, Chelmsford, Concord, Danvers, Fitchburg, Gloucester, Haverhill, Lawrence, Leominster, Lowell, Maynard, Methuen, New Salem, Peabody, Salem, Sudbury, Wilmington (351 overlays 978)
352=USA Florida Beverly Hills, Bronson, Brooksville, Clermont, Cross City, Dade City, Eustis, Gainesville, Inverness, Keystone Heights, Lady Lake, Leesburg, Mount Dora, Ocala, Spring Hill, Tavares
360=USA Washington Aberdeen, Bellingham, Bremerton, Camas, Friday Harbor, Lacey, Langley, Longview, Marysville, Mount Vernon, Olympia, Orchards, Port Angeles, Port Townsend, Poulsbo, Shelton, Silverdale, Vancouver, Olympic NP, Mt. Rainier
361=USA Texas Alice, Beeville, Charco, Corpus Christi, Cuero, Edna, Flatonia, Goliad, Hebbronville, Kingsville, Palacios, Port Aransas, Victoria, Waelder, Yoakum, Yorktown
385=USA Utah northern section: Bountiful, Clearfield, Farmington, Kaysville, Morgan, Ogden, American Fork, Goshen, Lehi, Orem, Payson, Pleasant Grove, Provo, Spanish Fork, Spanish Fork Canyon, Springville
386=USA Florida western area: Alachua, Branford, Dowling Park, Florida Sheriffs Boys Ranch, Fort White, High Springs, Jasper, Jennings, Lake Butler, Lake City, Live Oak, Luraville, Mayo, Raiford, Wellborn, White Springs southern area: Bostwick, Bunnell, Crescent City, Daytona Beach, De Leon Springs, DeBary, Deland, (part of) Deltona, Flagler Beach, Florahome, Interlachen, Marineland, New Smyrna Beach, Oak Hill, Orange City, Palatka, Palm Coast, Pierson, Pomona Park, Welaka
401=USA Rhode Island
402=USA Nebraska Columbus, Hastings, Lincoln, Omaha, South Sioux City, Valentine
403=Canada Alberta Airdrie, Banff, Calgary, Drumheller, Head-Smashed-In, Lethbridge, Medicine Hat, Ponoka, Red Deer, Stettler, Hwy. 12
404=USA Georgia Atlanta, College Park, Decatur, East Point, Forest Park, Sandy Springs
405=USA Oklahoma Anadarko, Bethany, Bridgeport, Chickasha, Colony, Edmond, Guthrie, Hennessey, Holdenville, Midwest City, Moore, Norman, Oklahoma City, Pauls Valley, Shawnee, Stillwater, Weleetka, Yale
406=USA Montana
407=USA Florida Altamonte Springs, Apopka, Geneva, Kenansville, Kissimmee, Orlando, Sanford, Winter Garden, Winter Park, Yeehaw Jct.
408=USA California Cupertino, Gilroy, Los Gatos, Milpitas, San Jos<6F>, Santa Clara, Saratoga, Sunnyvale
409=USA Texas Anahuac, Beaumont, Bronson, China, Colmesneil, Double Bayou, Galveston, Hankamer, Hemphill, Hitchcock, Jasper, Kountze, La Marque, Lumberton, Milam, Nederland, Nome, Pineland, Port Arthur, Port Neches, Santa Fe, Sour Lake, Texas City, Wallisville, Warren, Westbury, Wildwood, Woodville
410=USA Maryland Aberdeen, Annapolis, Baltimore, Berlin, Cambridge, Catonsville, Chestertown, Columbia, Crisfield, Dundalk, Easton, Edgewood, Essex, Glen Burnie, Havre de Grace, Joppatowne, Laurel, Perry Hall, Pocomoke City, Prince Frederick, Reisterstown, Salisbury, Solomons, Taneytown, Towson, Westminster
412=USA Pennsylvania Bethel Park, Carnegie, Coraopolis, Monroeville, Pittsburgh, Wilkinsburg
413=USA Massachusetts Adams, Amherst, Greenfield, Holyoke, Northampton, Pittsfield, Springfield, Ware, Westfield
414=USA Wisconsin Brown Deer, Fox Point, Franklin, Glendale, Greenfield, Milwaukee, Muskego, Oak Creek, Shorewood, Wauwatosa, West Allis, Whitefish Bay
415=USA California Brisbane, part of Daly City, Larkspur, Mill Valley, Novato, Point Reyes, San Francisco, San Rafael, Sausalito, almost all of Marin and San Francisco Counties plus a small part of northeast San Mateo County
416=Canada Ontario Toronto (incl. East York, Etobicoke, North York, Scarborough, York)
417=USA Missouri Alton, Branson, Hermitage, Houston, Joplin, Lebanon, Neosho, Nevada, Springfield, West Plains
418=Canada Quebec Alma, Baie-Comeau, Batiscan, Charlesbourg, Chibougamou, Chicoutimi, Fermont, Gaspe, Havre-St.-Pierre, Jonquiere, Levis, Loretteville, Lotbiniere, Quebec, Rimouski, Riviere-du-Loup, St.-Augustin, St.-Gedeon, St.-Georges, St.-Tite, Schefferville, Sept-Iles, Stratford, Thetford Mines
419=USA Ohio Bowling Green, Defiance, Findlay, Holland, Lima, Mansfield, Maumee, Sandusky, Sylvania, Toledo.
423=USA Tennessee Athens, Blountville, Bluff City, Bristol, Bulls Gap, Charleston, Chattanooga, Cleveland, Clinchport, Coker Creek, Cumberland Gap, Dayton, Deer Lodge, Englewood, Etowah, Fork Ridge, Greeneville, Huntsville, Jellico, Johnson City, Kingsport, La Follette, Madisonville, Midway, Morristown, New Tazewell, Newport, Niota, Oakdale, Oneida, Petros, Pikeville, Riceville, Robbins, Rogersville, Sneedville, Soddy Daisy, Sunbright, Surgoinsville, Sweetwater, Tellico Plains, Vonore, Wartburg, West Sweetwater
424=USA California Avalon (Santa Catalina Island), Carson, Compton, Dominguez Hills, El Segundo, Gardena, Hawthorne, Hermosa Beach, Lomita, (a small part of) Long Beach, Lynwood, Manhattan Beach, Rancho Palos Verdes, Redondo Beach, San Pedro, Torrance
425=USA Washington Bellevue, Bothell, Everett, Issaquah, Kirkland, Lynnwood, Redmond, Renton, Silver Lake, Snoqualmie Pass
430=USA Texas Athens, Carthage, Centerville, Corsicana, Denison, Greenville, Henderson, Jacksonville, Kilgore, Longview, Marshall, Mt. Pleasant, Palestine, Paris, Rusk, Sherman, Texarkana, Tyler
432=USA Texas Ackerly, Alpine, Andrews, Big Bend N.P., Big Spring, Comstock, East Hobbs, Ft. Davis, Ft. Stockton, Garden City, Iraan, Kermit, Langtry, Marfa, Midland, Monahans, Odessa, Orla, Pecos, Presidio, Rankin, Sanderson, Seminole, Sheffield, Terlingua, Toyah, Valentine, Van Horn
434=USA Virginia Alberta, Allwood, Alta Vista, Amherst, Appomattox, Arvonia, Bachelors Hall, Barnesville, Beechwood, Big Island, Blackridge, Blackstone, Boydton, Brodnax, Brookneal, Buckingham, Burkeville, Capron, Charlotte Court House, Charlottesville, Chase City, Chatham, Clarksville, Clover, Concord, Crewe, Crozet, Danville, Dillwyn, Drakes Branch, Emporia, Eppes Fork, Farmville, Fork Union, Gladstone, Gladys, Gretna, Halifax, Hampden-Sydney, Hurt, Jarratt, Kenbridge, Keysville, La Crosse, Lawrenceville, Lovingston, Lynchburg, Oronoco, Palmyra, Pamplin, Piney River, Prospect, Renan, Rustburg, Sandy Level, Schuyler, Scottsville, South Boston, South Brunswick, Stanardsville, Stony Creek, Sweet Briar, Turbeville, Victoria, Virgilina, Volens, Whitmell
435=USA Utah Brigham City, Cedar City, Heber City, Helper, Logan, Moab, Nephi, Park City, Price, St. George, Tooele, Vernal.
438=Canada Quebec Dorval, Ile-Bizard, Ile des Soeurs, Ile-Perrot, Lachine, Montreal, Pointe-Claire
440=USA Ohio Ashtabula, Bedford, Berea, Chagrin Falls, Elyria, Lorain, Mayfield Hts., Mentor, North Olmsted, (most of) Parma, Strongsville, Vermilion
443=USA Maryland Aberdeen, Annapolis, Baltimore, Berlin, Cambridge, Catonsville, Chestertown, Columbia, Crisfield, Dundalk, Easton, Edgewood, Essex, Glen Burnie, Havre de Grace, Joppatowne, Laurel, Perry Hall, Pocomoke City, Prince Frederick, Reisterstown, Salisbury, Solomons, Taneytown, Towson, Westminster
450=Canada Quebec Berthierville, Boucherville, Brossard, Brownsburg, Chateauguay, Chomedey, Eastman, Granby, Joliette, Kahnawake, Lachute, Laval, Lawrenceville, Le Gardeur, Longueuil, Mansonville, Mirabel, St.-Eustache, St.-Hugues, St.-Hyacinthe, St.-Jean, St.-Jean-de-Matha, St.-Jerome, St.-Lambert, Ste.-Adele, Ste.-Catherine, Ste.-Therese, Salaberry-de-Valleyfield, Sorel, Terrebonne, Valcourt, Vaudreuil
469=USA Texas Addison, Allen, Carrollton, Celina, Dallas, Duncanville, Ennis, Farmers Branch, Frisco, Garland, Grand Prairie, Irving, Italy, Kaufman, Lavon, Lewisville, McKinney, Mesquite, Midlothian, Plano, Renner, Richardson, Seagoville, Terrell, Waxahatchie.
470=USA Georgia Atlanta, College Park, Decatur, East Point, Forest Park, Sandy Springs
470=USA Georgia Alpharetta, Barnesville, Canton, Carrollton, Cartersville, Cedartown, Chamblee, Covington, Dunwoody, Gainesville, Griffin, Jackson, Marietta, Monroe, Newnan, Norcross, Peachtree City, Roswell, Smyrna, Tucker, Winder, surrounds, but does not include, Atlanta.
478=USA Georgia Dublin, Eastman, Forsyth, Fort Valley, Hardwick, Macon, Milledgeville, Millen, Perry, Sandersville, Swainsboro, Warner Robbins, Wrightsville
479=USA Arkansas Atkins, Aurora, Belleville, Bentonville, Bluffton, Boles, Centerville, Clarksville, Danville, Dover, Eureka Springs, Fayetteville, Ft. Smith, Forum, Hector, Hindsville, Huntsville, Kingston, Mena, Rogers, Russellville, St. Paul, Salus, Siloam Springs, Springdale, Van Buren
480=USA Arizona Apache Jct., Carefree, Cave Creek, Chandler, Fountain Hills, Gilbert, Guadalupe, Higley, Mesa, Paradise Valley, Queen Creek, Salt River, Scottsdale, Sun Lakes, most of Tempe, east/northeast Phoenix area
484=USA Pennsylvania Allentown, Ardmore, Bala Cynwyd, Bethlehem, Bryn Mawr, Chester, Collegeville, Conshohocken, Easton, King of Prussia, Norristown, Paoli, Reading, Wayne, West Chester
501=USA Arkansas Bald Knob, Bauxite, Beebe, Benton, Bismarck, Bradford, Cabot, Casa, Cleveland, Clinton, Conway, Coy, Crystal Springs, Donaldson, England, Fairfield Bay, Ferndale, Greers Ferry, Griffithville, Heber Springs, Hot Springs, Jacksonville, Jessieville, Kensett, Little Rock, Lonoke, McRae, Malvern, Morrilton, Nimrod, Palarm, Pangburn, Perry, Pinnacle, Pleasant Plains, Redfield, Scotland, Searcy, Shirley, South Fourche, Springlake, Wrightsville
502=USA Kentucky Bardstown, Fort Knox, Frankfort, Georgetown, Lawrenceburg, Louisville, Owenton
503=USA Oregon Beaverton, Dallas, Gresham, Hillsboro, Lake Oswego, Milwaukie, Neskowin, Oregon City, Portland, Salem, Tigard, Tualatin, Astoria, Bay City, Beaver, Cannon Beach, Cloverdale, Garibaldi, Jewell, Knappa, Nehalem, Pacific City, Rockaway, Seaside, Tillamook, Warrenton
504=USA Louisiana Bertrandville, Chalmette, Delacroix, Ironton, Jesuit Bend, Kenner, Lafitte, Lake Catherine, Metairie, Myrtle Grove, New Orleans, St. Bernard, Yscloskey
505=USA New Mexico
506=Canada New Brunswick
507=USA Minnesota Canby, Fairmont, Faribault, Gaylord, Kellogg, Luverne, Mankato, New Ulm, Northfield, Redwood Falls, Rochester, Winona
508=USA Massachusetts Attleboro, Brockton, Cape Cod, Fall River, Falmouth, Framingham, Hyannis, Marlborough, Martha's Vineyard, Nantucket, Natick, New Bedford, North Easton, Plymouth, Southbridge, Taunton, Walpole, Wayland, Worcester
509=USA Washington Easton, Ellensburg, Kennewick, Pasco, Pullman, Richland, Spokane, Stevenson, Walla Walla, Wenatchee, Winthrop, Yakima
510=USA California Alameda, Berkeley, Castro Valley, Crockett, El Cerrito, El Sobrante, Fremont, Hayward, Newark, Oakland, Richmond, San Leandro, Union City, bayside East Bay
512=USA Texas Austin, Bastrop, Georgetown, Jollyville, Lampasas, Lockhart, Manchaca, Pflugerville, Rockdale, Round Rock, San Marcos, Smithville, Webberville
513=USA Ohio Cherry Grove, Cincinnati, Fairhaven, Fayetteville, Glendale, Groesbeck, Hamilton, Loveland, Madison Place, Mason, Middletown, Montgomery, Northside, Norwood, Oxford, Price Hill, Rossmoyne, Utopia
514=Canada Quebec Dorval, Ile-Bizard, Ile des Soeurs, Ile-Perrot, Lachine, Montreal, Pointe-Claire
515=USA Iowa Adel, Alden, Algona, Altoona, Ames, Buckeye, Clarion, Colfax, Corwith, Dallas Center, De Soto, Des Moines, Dexter, Dows, Earlham, Elkhart, Ft. Dodge, Indianola, Jefferson, Lakota, McCallsburg, Maxwell, Minburn, Nevada, Norwalk, Perry, Pleasantville, Redfield, Rippey, Runnells, Stuart, Webster City, Winterset
516=USA New York Long Island (Nassau County): Albertson, Baldwin, Bayville, Bethpage, Elmont, Farmingdale, Floral Park, Franklin Square, Garden City, Great Neck, Hempstead, Hicksville, Jericho, Levittown, Locust Grove, Long Beach, Lynbrook, Manhasset, Massapequa, Mineola, Oceanside, Oyster Bay, Plainview, Port Washington, Roslyn, Sea Cliff, Syosset, Uniondale, Valley Stream, Westbury, Williston Park, Woodbury, exactly covers Nassau County
517=USA Michigan Adrian, Albion, Burlington, Charlotte, Coldwater, Corunna, Hillsdale, Howell, Jackson, Lansing, Owosso, St. Johns, Tecumseh
518=USA New York Albany, Colonie, Glens Falls, Gloversville, Schenectady, Troy
519=Canada Ontario Brantford, Chatham, Galt, Guelph, Hespeler, Kitchener, London, Orangeville, Owen Sound, Sarnia, Stratford, Windsor, Woodstock
520=USA Arizona Ajo, Benson, Bisbee, Blackwater, Bowie, Casa Blanca, Casa Grande, Cascabel, Coolidge, Douglas, Elfrida, Eloy, Florence, Hayden, Kitt Peak, Komatke, Lone Butte, Maricopa, Maricopa Village, Nogales, Patagonia, Pearce, Portal, Sacaton, San Manuel, San Simon, Santa Rosa, Sasabe, Sells, Sierra Vista, Stotonic, Sunizona, Superior, Tombstone, Tucson, West San Simon, Whitlow, Willcox, Saguaro N.P., Organ Pipe Cactus N.M.
530=USA California Auburn, Cameron Park, Chico, Corning, Davis, Grass Valley, Hoopa, Markleeville, Marysville, Orland, Oroville, Palermo, Paradise, Placerville, Red Bluff, Redding, South Lake Tahoe, Susanville, Thermalito, Truckee, Willow Creek, Willows, Woodland, Yreka, Yuba City
540=USA Virginia Brokenburg, Calverton, Catoctin, Craigsville, Criglersville, Culpeper, Dahlgren, Elkton, Fredericksburg, Front Royal, Gordonsville, Greenwood, Grottoes, Harrisonburg, Hot Springs, King George, Louisa, McClung, Madison, Middleburg, Mineral, Mount Gilead, Mountain Grove, New Hope, Raphine, Shenandoah, Spotsylvania, Stafford, Stanley, Staunton, The Plains, Warrenton, Waynesboro, Weyers Cave, Williamsville, Winchester
541=USA Oregon Albany, Ashland, Bend, Coos Bay, Corvallis, Crater Lake, Eugene, Florence, Grants Pass, Hermiston, Klamath Falls, La Grande, Lebanon, Lincoln City, Medford, Newport, Ontario, Pendleton, Roseburg, Springfield, The Dalles, Wolf Creek
551=USA New Jersey Bayonne, Cliffside Park, Englewood, Fair Lawn, Hackensack, Hoboken, Jersey City, Leonia, Little Ferry, Lyndhurst, Paramus, Park Ridge, Ramsey, Rutherford, Union City
559=USA California USA California Avenal, Chowchilla, Clovis, Coalinga, Corcoran, Dinuba, Ducor, Exeter, Fresno, Hanford, Kerman, Kettleman City, Kingsburg, Lemoore, Lindsay, Madera, Mendota, Mono Hot Springs, Orange Cove, Orosi, Parlier, Porterville, Reedley, Selma, Tulare, Visalia, Woodlake, Woodville, Kings Canyon N.P., Sequoia N.P.
561=USA Florida Belle Glade, Boca Raton, Boynton Beach, Delray Beach, Jupiter, Lake Harbor, Pahokee, West Palm Beach, Palm Beach County and a small portion of Martin County
562=USA California Artesia, Bellflower, Cerritos, Downey, La Habra, La Mirada, Lakewood, (most of) Long Beach, Los Alamitos, Norwalk, Paramount, Pico Rivera, Rossmoor, Seal Beach, Signal Hill, Whittier
563=USA Iowa Alpha, Arlington, Atalissa, Baldwin, Bernard, Bettendorf, Cascade, Center Junction, Clarence, Clinton, Cresco, Davenport, Decorah, Dubuque, Fredericksburg, Hawkeye, Hopkinton, Lamont, Lawler, Lime Springs, Manchester, Maqoketa, Maynard, Moscow, Muscatine, North Chester, Oran, Oxford Junction, Protivin, Quad Cities, Randalia, Rochester, Ryan, Sumner, Tipton, Worthington, Wyoming
567=USA Ohio Bowling Green, Defiance, Findlay, Holland, Lima, Mansfield, Maumee, Sandusky, Sylvania, Toledo.
570=USA Pennsylvania Bloomsburg, Hazleton, Lewisburg, Lock Haven, Milton, Muncy, Pittston, Pottsville, Scranton, Selinsburg, Stroudburg, Sunbury, Wilkes-Barre, Williamsport
571=USA Virginia Alexandria, Arlington, Centreville, Engleside, Fairfax, Falls Church, Herndon, Leesburg, Lorton, McLean, Manassas, Occoquan, Vienna
573=USA Missouri Cape Girardeau, Columbia, Fredericktown, Jefferson City, New Madrid, Poplar Bluff, Rolla, Sikeston
574=USA Indiana Akron, Argos, Atwood, Bourbon, Bremen, Bristol, Buffalo, Burket, Burnettsville, Burrows, Camden, Claypool, Culver, Deer Creek, Dunlap, Elkhart, Flora, Fulton, Galveston, Goshen, Hamlet, Idaville, Kewanna, Knox, Lapaz, Leesburg, Logansport, Lucerne, Macy, Mentone, Middlebury, Milford, Millersburg, Millwood, Monterey, Monticello, Nappanee, New Carlisle, New Paris, North Judson, North Liberty, North Webster, Osceola, Pierceton, Plymouth, Rochester, Royal Center, South Bend, Star City, Syracuse, Tippecanoe, Twelve Mile, Wakarusa, Walkerton, Walton, Warsaw, Winamac, Wyatt, Yeoman
580=USA Oklahoma Ada, Altus, Apache, Ardmore, Clinton, Duncan, Durant, Enid, Guymon, Hugo, Idabel, Konawa, Lawton, Ponca City, Rush Springs, Weatherford
585=USA New York Albion, Batavia, Belmont, Brighton, Canandaigua, Dansville, Gates, Geneseo, Greece, Hall, Irondequoit, Medina, Rochester, Warsaw, Webster, Wellsville, Wyoming, all or most of Allegany, Genesee, Livingston, Monroe, Ontario, Orleans, and Wyoming Counties, plus parts of Steuben and Yates Counties
586=USA Michigan Armada, Center Line, Eastpointe, Mt. Clemens, New Baltimore, New Haven, Richmond, Romeo, Roseville, Utica, Warren, Washington, Macomb County
600=Canada Special-purpose
601=USA Mississippi Brookhaven, Carthage, Hattiesburg, Jackson, Laurel, Lucedale, McComb, McNeill, Meridian, Natchez, Picayune, Vicksburg, Wiggins
602=USA Arizona Central Phoenix
603=USA New Hampshire
604=Canada British Columbia Agassiz, Black Point, Boston Bar, Britannia Beach, Chilliwack, D'Arcy, Gibsons, Hemlock Valley, Hope, Pemberton, Pender Harbour, Port Mellon, Powell River, Rosedale, Sardis, Sechelt, Squamish, Vananda, Westview, Whistler, Yale, Yarrow
605=USA South Dakota
606=USA Kentucky Albany, Ashland, Brooksville, Corbin, Flemingsburg, Hazard, Irvine, Liberty, London, McKee, Maysville, Middlesboro, Monticello, Morehead, Mt. Olivet, Mt. Vernon, Owingsville, Pikeville, Somerset, South Williamson, Stanford, Stanton, Williamsburg
607=USA New York Binghamton, Corning, Cortland, Elmira, Hornell, Ithaca, Oneonta, Roscoe
608=USA Wisconsin Alma, Beloit, Janesville, La Crosse, Madison, Middleton, Monroe, Montello, Platteville, Portage, Richland Center, Tomah, Westfield
609=USA New Jersey Atlantic City, Barnegat, Browns Mills, (part of) Buena Vista, Burlington, Cape May, Cranbury, Hightstown, Lambertville, Lawrenceville, (most of) Medford, Pennington, Princeton, Trenton, Willingboro, (part of) Winslow
610=USA Pennsylvania Allentown, Ardmore, Bala Cynwyd, Bethlehem, Bryn Mawr, Chester, Collegeville, Conshohocken, Easton, King of Prussia, Norristown, Paoli, Reading, Wayne, West Chester
612=USA Minnesota Ft. Snelling, Lauderdale, Minneapolis, Richfield, St. Anthony, M/SP Airport
613=Canada Ontario Belleville, Brighton, Brockville, Cardiff, Cornwall, Kingston, Marmora, Orleans, Ottawa, Petawawa, Rolphton, Trenton, Whitney
614=USA Ohio Canal Winchester, Columbus, Gahanna, Grove City, Harrisburg, Hilliard, Jersey, Lockbourne, New Albany, Plain City, Reynoldsburg, West Jefferson, Westerville, Worthington
615=USA Tennessee Carthage, Dickson, Gallatin, Franklin, Lafayette, Lebanon, Murfreesboro, Nashville, Portland, Red Boiling Springs, Smithville, Springfield
616=USA Michigan Ada, Allendale, Alto, Belding, Borculo, Byron Center, Caledonia, Casnovia, Cedar Springs, Clarksville, Conklin, Coopersville, Dorr, Drenthe, Dutton, Freeport, Grand Haven, Grand Rapids, Grattan, Greenville, Holland, Hudsonville, Ionia, Jamestown, Kent City, Lake Odessa, Lowell, Marne, Moline, Orleans, Rockford, Sand Lake (Kent Co.), Saranac, Sparta, Trufant, Wyoming, Zeeland
617=USA Massachusetts Belmont, Boston (including Brighton, Dorchester, Hyde Park, Jamaica Plain, and Roxbury), Brookline, Cambridge, Chelsea, Everett, Milton, Newton, Quincy, Somerville, Watertown, Winthrop
618=USA Illinois Alton, Belleview, Belleville, Benton, Carbondale, Carmi, Centralia, Chester, Collinsville, Du Quoin, East St. Louis, Fairfield, Granite City, Harrisburg, Highland, Jerseyville, Marlon, Metropolis, Mt. Carmel, Mt. Vernon, Newton, Robinson, Salem, Vandalia
619=USA California most of San Diego (Note: parts of San Diego are in 760 and 858), Alpine (San Diego County), Boulevard, Campo, Chula Vista, Coronado, Descanso, Dulzura, El Cajon, Imperial Beach, Jacumba, Jamul, Lakeside, (most of) Lemon Grove, (most of) National City, Pine Valley, San Ysidro, Santee, Spring Valley
620=USA Kansas Albert, Allen, Americus, Arkansas City, Atlanta, Beaumont, Belle Plaine, Bronson, Burdett, Burlington, Burns, Burrton, Bushton, Canton, Cassoday, Cimarron, Claflin, Clearwater, Coffeyville, Colony, Conway, Conway Springs, Cottonwood Falls, Council Grove, Devon, Dighton, Dodge City, Dunlap, Durham, Emporia, Fort Scott, Fulton, Galatia, Galva, Garden City, Geneseo, Great Bend, Hanston, Haven, Healy, Hesston, Hillsboro, Hoisington, Hutchinson, Independence, Iola, Jetmore, Kincaid, Larned, Latham, Lebo, Lehigh, Leoti, Leroy, Liberal, Lincolnville, Little River, Lyons, McPherson, Mapleton, Marienthal, Marion, Milberger, Murdock, Neosho Falls, Norwich, Olmitz, Parsons, Peabody, Pittsburg, Potwin, Pretty Prairie, Reading, Riverdale, Rock, Rosalia, Rozel, Scott City, Tribune, Udall, Ulysses, Walton, Wellington, Windom, Winfield
623=USA Arizona Avondale, Black Canyon City, Buckeye, Circle City, El Mirage, Glendale, New River, Peoria, Sun City, Sun City West, Surprise, Tolleson, Tonopah, Wintersburg, west/northwest Phoenix area
626=USA California Alhambra, Altadena, Arcadia, Azusa, Baldwin Park, Covina, El Monte, Glendora, La Puente, Monrovia, Monterey Park, Pasadena, Rosemead, San Gabriel, San Gabriel Valley
630=USA Illinois Aurora, Bartlett, Batavia, Downers Grove, Elmhurst, Geneva, Glen Ellyn, Hinsdale, Itasca, Lemont, Lisle, Lombard, Naperville, Plano, Roselle, West Chicago, Yorkville
631=USA New York Long Island (Suffolk County): Amityville, Bay Shore, Brentwood, Brookhaven, Centereach, Cold Spring Harbor, Commack, Deer Park, Fishers Island, The Hamptons, Hauppauge, Holbrook, Huntington Station, Islip, Lindenhurst, Montauk, Oakdale, Patchogue, Port Jefferson, Riverhead, Rocky Point, Sayville, Smithtown, Stony Brook, West Babylon, exactly covers Suffolk County
636=USA Missouri Ballwin, Chesterfield, Crystal City, De Soto, Fenton, Festus, Foley, Herculaneum, High Hill, Hillsboro, Holstein, Imperial, Jonesburg, Manchester, Maxville, O'Fallon, Portage des Sioux, St. Charles, Troy, Truxton, Union, Valley Park, Warrenton, Washington, West Alton, Winfield
641=USA Iowa Adair, Bagley, Britt, Buffalo Center, Centerville, Charles City, Clear Lake, Colo, Corning, Creston, Fairfield, Forest City, Garner, Greenfield, Grinnell, Guthrie Center, Hubbard, Iowa Falls, Jamaica, Kanawha, Knoxville, Liberty Center, Linden, Lorimor, Macksburg, Marshalltown, Martensdale, Mason City, Menlo, Milo, Mingo, Monroe, New Hampton, Newton, Osceola, Oskaloosa, Otley, Ottumwa, Pella, Peru, Prairie City, Rowan, St. Charles, St. Marys, Truro, Yale, Zearing
646=USA New York New York City (Manhattan only)
647=Canada Ontario Toronto (incl. East York, Etobicoke, North York, Scarborough, York)
650=USA California Belmont, Burlingame, Colma, (much of) Daly City, Los Altos, Menlo Park, Millbrae, Mountain View, Pacifica, Palo Alto, Redwood City, San Bruno, San Carlos, San Francisco Airport (SFO), San Mateo, The Peninsula
651=USA Minnesota Arden Hills, Castle Rock, Columbus, Eagan, Falcon Heights, Farmington, Harris, Lake City, Lino Lakes, Mendota, New Brighton, Red Wing, Rosemount, Roseville, St. Paul, Shoreview, Stark, Vermillion, Wabasha
660=USA Missouri Alexandria, Booneville, Butler, Clinton, Kahoka, Kirksville, Marshall, Maryville, Moberly, Oregon, Paris, Sedalia, Warsaw
661=USA California Arvin, Bakersfield, California Hot Springs, Castaic, Cuyama, Delano, Earlimart, Frazier Park, Gorman, Lancaster, northern Los Angeles County, McFarland, McKittrick, Mojave, Newhall, Oildale, Palmdale, Rosamond, Santa Clarita, Shafter, Taft, Tehachapi, Valyermo, Wasco
662=USA Mississippi Columbus, Corinth, Greenville, Greenwood, Grenada, Oxford, Tupelo, Yazoo City
667=USA Maryland Aberdeen, Annapolis, Baltimore, Berlin, Cambridge, Catonsville, Chestertown, Columbia, Crisfield, Dundalk, Easton, Edgewood, Essex, Glen Burnie, Havre de Grace, Joppatowne, Laurel, Perry Hall, Pocomoke City, Prince Frederick, Reisterstown, Salisbury, Solomons, Taneytown, Towson, Westminster
670=Commonwealth of the Northern Mariana Islands
671=Guam
678=USA Georgia Alpharetta, Barnesville, Canton, Carrollton, Cartersville, Cedartown, Chamblee, Covington, Dunwoody, Gainesville, Griffin, Jackson, Marietta, Monroe, Newnan, Norcross, Peachtree City, Roswell, Smyrna, Tucker, Winder, surrounds, but does not include, Atlanta, College Park, Decatur, East Point, Forest Park, Sandy Springs
679=USA Michigan Dearborn, Detroit, Grosse Pointe, Wayne
682=USA Texas Arlington, Cleburne, Euless, Fort Worth, Granbury, Grapevine, North Richland Hills, Rhome, Roanoke, Saginaw, Weatherford
684=American Samoa
701=USA North Dakota
702=USA Nevada Boulder City, Cal-Nev-Ari, Henderson, Indian Springs AFB, Las Vegas, Laughlin, Mesquite, Moapa, North Las Vegas, almost all of Clark County
703=USA Virginia Alexandria, Arlington, Centreville, Engleside, Fairfax, Falls Church, Herndon, Leesburg, Lorton, McLean, Manassas, Occoquan, Vienna
704=USA North Carolina Albemarle, Charlotte, Concord, Gastonia, Kannapolis, Lincolnton, Monroe, Shelby, Statesville, Wadesboro
705=Canada Ontario Algonquin Park, Alliston, Barrie, Collingwood, Hastings, Lindsay, Millbrook, North Bay, Orillia, Peterborough, Sault Sainte Marie, Sudbury, Sunderland, Timmins, Warkworth, Wilberforce
706=USA Georgia northern/eastern area: Athens, Augusta, Big Canoe, Braselton, Calhoun, Carnesville, Cave Spring, Cleveland, Commerce, Cornelia, Dahlonega, Dalton, Dawsonton, Dawsonville (Dawson Co.), Eatonton, Elberton, Ellijay, Fairmount, Gibson, Hephzibah, Jasper, Jefferson, La Fayette, Madison, Martinez, Maysville, Monticello, Nicholson, Pendergrass, Ranger, Rome, Rutledge, Sparta, Summerville, Thomson, Toccoa, Watkinsville, Waynesboro, Wintersville, Wrens southwestern area:Columbus, Cusseta, Franklin, Gay, Geneva, Greenville, Hamilton, Hogansville, La Grange, Manchester, North West Point, Pine Mountain, Talbotton, Thomaston, Warm Springs, Waverly Hall, West Point, Woodbury, Woodland south central area: Yatesville
707=USA California Annapolis, Arcata, Asti, Benicia, Bodega Bay, Boyes Hot Springs, Calistoga, Clearlake, Cotati, Crescent City, Dixon, Eureka, Fairfield, Ferndale, Fort Bragg, Geyserville, Gualala, Guerneville, Healdsburg, Hopland, Lakeport, Middletown, Napa, Orick, Petaluma, Petrolia, Rohnert Park, St. Helena, Santa Rosa, Sonoma, Suisun City, Tomales, Ukiah, Vacaville, Vallejo, Willits, Yorkville, Yountville, The Wine Country and north coast
708=USA Illinois Blue Island, Chicago Heights, Cicero, La Grange, La Grange Park, Lansing, Maywood, Oak Lawn, Oak Park, Orland Park, Palos Park, River Grove, Riverdale, Summit, Tinley Park
709=Canada Newfoundland and Labrador
712=USA Iowa Atlantic, Bedford, Carroll, Cherokee, Clarinda, Council Bluffs, Denison, Emmetsburg, Estherville, Glenwood, Harlan, Pocahontas, Red Oak, Rockwell City, Shenandoah, Sioux Center, Sioux City, Spencer, Storm Lake, western
713=USA Texas Bellaire, (most of) Houston, Pasadena, Southside Place, West University Place
714=USA California northern Orange County: Anaheim, Brea, Buena Park, (part of) Costa Mesa, Cypress, Fountain Valley, Fullerton, Huntington Beach, La Palma, Orange, Placentia, (most of) Santa Ana, Silverado, Stanton, Villa Park, Westminster, Yorba Linda
715=USA Wisconsin Black River Falls, Clintonville, Coloma, Eau Claire, Elk Mound, Marinette, Rhinelander, Schofield, Stevens Point, Superior, Wausau, Wisconsin Rapids
716=USA New York Buffalo, Dunkirk, Fredonia, Jamestown, Lancaster, Lockport, Niagara Falls, Olean, Salamanca, Tonawanda, exactly coterminous with Cattaraugus, Chautauqua, Erie, and Niagara Counties, plus the Tonawanda and Oil Springs Indian Reservations.
717=USA Pennsylvania Camp Hill, Carlisle, Chambersburg, Gettysburg, Harrisburg, Lancaster, Lebanon, Lewistown, Mechanicsburg, Shippensburg, York
718=USA New York New York City (Bronx, Brooklyn, Queens, Staten Island). incl. Far Rockaway, Flushing, Jamaica, Long Island City
719=USA Colorado Agate, Alamosa, Bethune, Burlington, Canon City, Colorado Springs, Creede, Del Norte, Fairplay, Flagler, Florence, La Junta, Lamar, Leadville, Limon, Monte Vista, Pueblo, Salida, Trinidad, Walsenburg, Woodland Park
720=USA Colorado Arvada, Aurora, Boulder, Brighton, Broomfield, Castle Rock, Deer Trail, Denver, Englewood, Evergreen, Fort Lupton, Georgetown, Golden, Grant, Greeley, Kiowa, Lafayette, Lakewood, Larkspur, Littleton, Longmont, Nederland, Parker, Roggen, Westminster. (720 overlays 303.)
724=USA Pennsylvania Aliquippa, Butler, Connellsville, Greenville, Indiana, Kittanning, Latrobe, New Castle, Rochester, Sharon, Uniontown, Washington, surrounds but does not include Pittsburgh
727=USA Florida Aripeka, Clearwater, Dunedin, Hudson, Largo, New Port Richey, Palm Harbor, Pinellas Park, St. Petersburg, Tarpon Springs, Tierra Verde
731=USA Tennessee Bolivar, Brownsville, Dyersburg, Henning, Humboldt, Jackson, Lexington, McKenzie, Martin, Milan, Paris, Ripley, Savannah, Stanton, Union City, Whiteville, Counties: Benton, Carroll, Chester, Crockett, Decatur, Dyer, Gibson, Hardeman, Hardin, Haywood, Henderson, Henry, Lake, Lauderdale, McNairy, Madison, Obion, Weakley
732=USA New Jersey Asbury Park, Bound Brook, Crestwood Village, Freehold, Holmdel, Keyport, Lakewood, Long Branch, Metuchen, Monmouth Jct., New Brunswick, Perth Amboy, Point Pleasant, Rahway, Red Bank, South River, Toms River, Woodbridge
734=USA Michigan Ann Arbor, (part of) Livonia, Monroe, Ypsilanti, Detroit Metro Airport (DTW)
740=USA Ohio Ashville, Athens, Bainbridge, Baltimore, Carroll, Chillicothe, Condit, Delaware, Jelloway, Johnstown, Knockemstiff, Lancaster, London, Marietta, Marion, Mt. Sterling, Mt. Vernon, Nevada, Newark, Pleasant View, Portsmouth, Rathbone, St. Clairsville, Steubenville, Sunbury, Uhrichsville, Washington Court House, Zanesville
754=USA Florida Coral Springs, Davie, Deerfield Beach, Ft. Lauderdale, Hollywood, Margate, Miramar, Oakland Park, Pompano Beach, Tamarac (754 will overlay 954)
757=USA Virginia Chesapeake, Chincoteague, Courtland, Great Bridge, Hampton, Newport News, Norfolk, Portsmouth, Suffolk, Virginia Beach, Williamsburg/Jamestown
760=USA California Adelanto, Apple Valley, Barstow, Bishop, Blythe, Borrego, Brawley, Bridgeport, Calexico, California City, Carlsbad, Cathedral City, China Lake, Coachella, El Centro, Encinitas, Escondido, Fairview, Fallbrook, Ft. Irwin, Hesperia, Indio, Inyokern, Julian, La Quinta, Lake Isabella, Lee Vining, Mammoth Lake, Mono Lake, Mt. Palomar, Needles, Oceanside, Onyx, Pala, Palm Springs, Pauma Valley, Pendleton, Phelan, Pinon Hills, Ramona, Ridgecrest, San Marcos, Twentynine Palms, Victorville, Valley Center, Vista, Warner Springs, Winterhaven, Wrightwood, Yucca Valley, Death Valley N.P., Joshua Tree N.P., includes a small part of San Diego itself
763=USA Minnesota Anoka, Blaine, Brooklyn Center, Brookylyn Park, Buffalo, Cambridge, Champlin, Circle Pines, Columbia Heights, Coon Rapids, Elk River, Fridley, Golden Valley, Ham Lake, Lexington, Maple Grove, Medina, Mounds View, New Hope, Plymouth, Princeton, Robbinsdale, northwestern suburbs of Minneapolis
765=USA Indiana Alexandria, Anderson, Brookville, Connersville, Crawfordsville, Delphi, Frankfort, Geneva (Shelby County), Greencastle, Hartford City, Kokomo, Lafayette, Lebanon, Marion, Martinsville, Mexico, Muncie, New Castle, Peru, Richmond, Roann, Rushville, Winchester
770=USA Georgia Alpharetta, Barnesville, Canton, Carrollton, Cartersville, Cedartown, Chamblee, Covington, Dunwoody, Gainesville, Griffin, Jackson, Marietta, Monroe, Newnan, Norcross, Peachtree City, Roswell, Smyrna, Tucker, Winder, surrounds, but does not include, Atlanta. (678 and 470 overlay 404 and 770.)
772=USA Florida Fort Pierce, Gifford, Hobe Sound, Indiantown, Jensen Beach, Port St. Lucie, Sebastian, Stuart, Vero Beach, Indian River and St. Lucie Counties and most of Martin County
773=USA Illinois Chicago (outside downtown, includes O'Hare and Midway Airports)
774=USA Massachusetts Attleboro, Brockton, Cape Cod, Fall River, Falmouth, Framingham, Hyannis, Marlborough, Martha's Vineyard, Nantucket, Natick, New Bedford, North Easton, Plymouth, Southbridge, Taunton, Walpole, Wayland, Worcester
775=USA Nevada Alamo, Battle Mountain, Carson City, Devil's Hole, Elko, Ely, Hawthorne, Mercury, Pahrump, Reno, Sparks, Spring Creek, Tonopah, Winnemucca
778=Canada British Columbia Abbotsford, Aldergrove, Bowen Island, Cloverdale, Fort Langley, Haney, Ladner, Langley, Mission, New Westminster, Newton, North Vancouver, Pitt Meadows, Port Coquitlam, Port Moody, Richmond, Vancouver, West Vancouver, Whalley, White Rock, Whonnock
780=Canada Alberta Camrose, Edmonton, Edson, Ft. McMurray, Grande Prairie, Jasper, Lloydminster, Slave Lake, Vegreville, Wainwright, Wetaskiwin, Hwy. 13
781=USA Massachusetts Arlington, Braintree, Burlington, Canton, Chelsea, Cohasset, Dedham, Duxbury, Kingston, Lexington, Lynn, Malden, Medford, Needham, Randolph, Reading, Revere, Rockland, Saugus, Stoughton, Wakefield, Waltham, Wellesley, Weymouth, suburbs on all sides of Boston.
785=USA Kansas Abilene, Colby, Ellsworth, Garnet, Hays, Junction City, La Crosse, Lawrence, Lyndon, Manhattan, Ness City, Oakley, Oskaloosa, Ottawa, Purcell, Russell, Salina, Sharon Springs, Topeka, Troy
786=USA Florida Coral Gables, Hialeah, Homestead, Key Biscayne, Key Largo, Key West, Marathon, Miami, Perrine
787=Puerto Rico
801=USA Utah Alta, Holladay, Kearns, Magna, Midvale, Murray, Salt Lake City
802=USA Vermont
803=USA South Carolina Aiken, Atkins, Batesburg, Branchville, Camden, Chester, Columbia, Edgefield, Estill, Hampton, Holly Hill, Kershaw, Lancaster, Lexington, Lynchburg, Manning, Newberry, North Augusta, Orangeburg, Rock Hill, Sumter, Whitmire, York, central area
804=USA Virginia Amelia Court House, Ashland, Beaverdam, Bethia, Bowling Green, Callao, Cartersville, Charles City, Chester, Colonial Beach, Cumberland, Dawn, Deltaville, Dinwiddie, Disputanta, Doswell, Enon, Farnham, Fife, Gloucester, Goochland, Gum Tree, Hague, Hanover, Hayes, Heathsville, Hopewell, Irvington, Kilmarnock, King and Queen, King William, Lively, McKenney, Manakin, Mathews, Mechanicsville, Midlothian, Montpelier, Montross, Old Church, Petersburg, Port Royal, Powhatan, Providence Forge, Reedville, Richmond, Rockville, Sandston, Tappahannock, Varina, Warsaw, Waverly, West Point
805=USA California Arroyo Grande, Atascadero, Bradley, Camarillo, Cambria, Cape San Martin, Cholame, Fillmore, Goleta, Grover Beach, Guadalupe, Lompoc, Los Osos, Moorpark, Morro Bay, Ojai, Oxnard, Paso Robles, Pismo Beach, Point Mugu, San Luis Obispo, San Simeon, Santa Barbara, Santa Maria, Simi Valley, Thousand Oaks, Ventura
806=Amarillo, Borger, Bovina, Dalhart, Denver City, Guthrie, Hereford, Jayton, Lamesa, Lubbock, Memphis, Paducah, Pampa, Plainview, Post
807=Canada Ontario Atikokan, Dryden, Ft. Frances, Ft. Severn, Hornepayne, Kenora, Marathon, Nakina, Nipigon, Thunder Bay, White River
808=USA Hawaii
810=USA Michigan Algonac, Almont, Avoca, Brighton, Brown City, Byron, Capac, Clio, Columbiaville, Croswell, Davison, Deckerville, Dryden, Emmett, Fenton, Flint, Flushing, Goodells, Goodrich, Grand Blanc, Hadley, Hartland, Imlay City, Jeddo, Lapeer, Lennon, Lexington, Linden, Marine City, Memphis, Metamora, Montrose, Mt. Clemens, Mt. Morris, New Lothrop, North Branch, Otisville, Port Huron, Port Sanilac, Rankin, Roseville, St. Clair, Sandusky, Smiths Creek, Snover, Swartz Creek, Yale
812=USA Indiana Bedford, Bloomington, Boonville, Brazil, Charlestown, Columbus, Edinburgh, Evansville, Greensburg, Jasper, Madison, Morgantown, Mt. Vernon, New Albany, Scottsburg, Sellersburg, Seymour, Tell City, Terre Haute, Vincennes, Washington
813=USA Florida Brandon, Land O' Lakes, Oldsmar, Plant City, Ruskin, Sun City, Tampa, Wesley Chapel, Wimauma, Zephyrhills
814=USA Pennsylvania Altoona, Bedford, Bellefonte, Clarion, Clearfield, Erie, Huntingdon, Johnstown, Meadville, Oil City, Punxsutawney, State College, Warren
815=USA Illinois Crystal Lake, De Kalb, Dixon, Freeport, Harvard, Joliet, Kankakee, Lockport, McHenry, Oglesby, Peru, Pontiac, Princeton, Rochelle, Rock Falls, Rockford, Sterling, Watseka, Woodstock
816=USA Missouri Blue Springs, Harrisonville, Independence, Kansas City, Richmond, St. Joseph, Warrensburg
817=USA Texas Arlington, Cleburne, Euless, Fort Worth, Granbury, Grapevine, North Richland Hills, Rhome, Roanoke, Saginaw, Weatherford
818=USA California Agoura, Arleta, Burbank, Calabasas, Canoga Park, Chatsworth, Encino, USA California Glendale, Granada Hills, La Canada, La Crescenta, Mission Hills, Montrose, North Hollywood, Northridge, Pacoima, Reseda, San Fernando, Sepulveda, Sherman Oaks, Studio City, Sun Valley, Sylmar, Tarzana, Van Nuys, Woodland Hills, most of the San Fernando Valley
819=Canada Quebec Asbestos, Drummondville, Gatineau, Hull, Inukjuak, Ivujivik, Kangiqsualujjuaq, Kangiqsujuaq, Kuujjuaq (Ft. Chimo), Kuujuarapik, La Tuque, Lac-Megantic, Magog, Matagami, Radisson, Rouyn-Noranda, Shawinigan, Sherbrooke, Trois-Rivieres, Val-d'Or, Victoriaville
828=USA North Carolina Asheville, Boone, Brevard, Forest City, Granite Falls, Hendersonville, Hickory, Lenoir, Morganton, Newton
830=USA Texas Boerne, Carrizo Springs, Del Rio, Eagle Pass, Floresville, Fredericksburg, Gonzales, Kenedy, Kerrville, Luling, Marble Falls, New Braunfels, Seguin, Somerset, surrounds, but does not include, San Antonio
831=USA California Aptos, Ben Lomond, Big Basin, Big Sur, Boulder Creek, Bryson, Carmel, Castroville, Greenfield, Hollister, King City, Marina, Monterey, Pebble Beach, Salinas, San Ardo, San Juan Bautista, Santa Cruz, Scotts Valley, Seaside, Soledad, Watsonville
832=USA Texas Aldine, Alief, Alvin, Bammel, Barker, Baytown, Channelview, Cleveland, (part of) Houston, Humble, Katy, Kemah, League City, Richmond, Rosenberg, Spring, Sugar Land, Tomball, Bellaire, (most of) Houston, Pasadena, Southside Place, West University Place
843=USA South Carolina Beaufort, Bethune, Charleston, Chesterfield, Conway, Darlington, Florence, Georgetown, Harleysville, Hartsville, Hilton Head Island, Lodge, Mt. Pleasant, Myrtle Beach, Olanta, Ridgeland, St. George, Summerville, Turbeville, Walterboro, coastal areas
845=USA New York Brewster, Callicoon, Carmel, Dunraven, Kingston, Middletown, Monticello, Nanuet, New City, Newburgh, Nyack, Pearl River, Poughkeepsie, Saugerties, Tappan, West Point
847=USA Illinois Arlington Heights, Barrington, Deerfield, Des Plaines, Dundee, Elgin, Elk Grove Village, Evanston, Highland Park, Lake Forest, Libertyville, Northbrook, Palatine, Roselle, Schaumburg, Skokie, Waukegan
848=USA New Jersey Asbury Park, Bound Brook, Crestwood Village, Freehold, Holmdel, Keyport, Lakewood, Long Branch, Metuchen, Monmouth Jct., New Brunswick, Perth Amboy, Point Pleasant, Rahway, Red Bank, South River, Toms River, Woodbridge
850=USA Florida Crestview, De Funiak Springs, Ft. Walton Beach, Madison, Marianna, Milton, Panama City, Pensacola, Perry, Quincy, Tallahassee
856=USA New Jersey Bridgeton, (part of) Buena Vista, Camden, Cherry Hill, Dennis, Glassboro, Haddonfield, (most of) Maurice River, (part of) Medford, Monroe, Vineland, (most of) Waterford, (part of) Winslow
857=USA Massachusetts Belmont, Boston (including Brighton, Dorchester, Hyde Park, Jamaica Plain, and Roxbury), Brookline, Cambridge, Chelsea, Everett, Milton, Newton, Quincy, Somerville, Watertown, Winthrop
858=USA California Del Mar, La Jolla, Poway, Rancho Bernardo, Rancho Santa Fe, Solana Beach, near northern suburbs of San Diego (including a small part of San Diego itself)
859=USA Kentucky Berea, Carlisle, Cincinnati Airport, Covington, Cynthiana, Danville, Falmouth, Harrodsburg, Lexington, Mt. Sterling, Paris, Richmond, Springfield, Versailles, Warsaw, Williamstown, Willisburg, Winchester
860=USA Connecticut Bristol, Groton, Hartford, Manchester, New Britain, New London, Norwich, Torrington, Vernon, Willimantic, Windsor
862=USA New Jersey Belleville, Bloomfield, Boonton, Butler, Caldwell, Dover, Hawthorne, Livingston, Madison, Millburn, Morristown, Newark, Newton, Nutley, Orange, Passaic, Paterson, Succasunna, Verona, Wayne, Whippany
863=USA Florida Arcadia, Avon Park, Bartow, Clewiston, Frostproof, Haines City, La Belle, Lake Wales, Lakeland, Moore Haven, Okeechobee, Sebring, Wauchula, Winter Haven
864=USA South Carolina Anderson, Clemson, Gaffney, Greenville, Greenwood, Greer, Laurens, Saluda, Seneca, Spartanburg, Union, northwestern area
865=USA Tennessee Ball Play, Bean Station, Bent Creek, Chestnut Hill, Claxton, Clinton, Concord, Dandridge, Gatlinburg, Greenback, Halls Cross Roads, Harriman, Jefferson City, Kingston, Knoxville, Lake City, Lenoir City, Loudon, Maryville, Mascot, Maynardville, Norris, Oak Ridge, Oliver Springs, Powell, Rockwood, Rutledge, Sevierville, Sharps Chapel, Solway, Tate Springs, Washburn, White Pine, Great Smoky Mountains N.P.
867=Canada Yukon Territory, Northwest Territory, Canada Nunavut
870=USA Arkansas Arkadelphia, Ashdown, Augusta, Batesville, Berryville, Blytheville, Camden, De Queen, De Valls Bluff, Des Arc, Dumas, El Dorado, Forrest City, Helena, Hope, Jasper, Jonesboro, Magnolia, Marshall, Monticello, Mount Ida, Mountain View, Newport, Pine Bluff, Prescott, Sheridan, Stuttgart, Texarkana, Trumann, Warren, West Memphis, Wynne
878=USA Pennsylvania Bethel Park, Carnegie, Coraopolis, Monroeville, Pittsburgh, Wilkinsburg
878=USA Pennsylvania Aliquippa, Butler, Connellsville, Greenville, Indiana, Kittanning, Latrobe, New Castle, Rochester, Sharon, Uniontown, Washington, surrounds but does not include Pittsburgh
901=USA Tennessee Covington, Memphis, Somerville, West Whiteville, Counties: Shelby, Tipton, and Fayette
902=Canada Nova Scotia, Prince Edward Island
903=USA Texas Athens, Carthage, Centerville, Corsicana, Denison, Greenville, Henderson, Jacksonville, Kilgore, Longview, Marshall, Mt. Pleasant, Palestine, Paris, Rusk, Sherman, Texarkana, Tyler,
904=USA Florida Baldwin, Callahan, East Palatka, Fernandina Beach, Green Cove Springs, Hastings, Hilliard, Jacksonville, Jacksonville Beach, Julington, Kingsley Lake, Lawtey, Macclenny, Maxville, Middleburg, Olustee, Orange Mills, Orange Park, Ormond Beach, Palm Valley, Ponte Vedra Beach, Port Orange, St. Augustine, St. Johns, Sanderson, Starke, Taylor, Yulee,
905=Canada Ontario Ajax, Ancaster, Beeton, Bradford, Brampton, Burlington, Caledon, Castleton, Cobourg, Cooksville, Dundas, Ft. Erie, Freelton, Georgetown, Hamilton, Keswick, Malton, Milton, Mississauga, Newmarket, Niagara Falls, Oakville, Oshawa, Port Credit, Port Perry, Richmond Hill, St. Catharines, Selkirk, Streetsville, Thornhill, Unionville, Welland, suburbs of Toronto,
906=USA Michigan Iron Mtn., Isle Royale, Marquette, Menominee, Sault Ste. Marie
907=USA Alaska
908=USA New Jersey Bedminster, Bernardsville, Clinton, Cranford, Elizabeth, Hackettstown, Linden, Plainfield, Somerville, Summit, Union, Washington, Westfield,
909=USA California Anza, Banning, Beaumont, Big Bear Lake, Calimesa, Canyon Lake, Chino, Chino Hills, Claremont, Colton, Corona, Crestline, Devore, Diamond Bar, Fontana, Hemet, Highland, Idyllwild, La Verne, Lake Elsinore, Lakeland Village, Mira Loma, Montclair, Moreno Valley, Murietta, Norco, Ontario, Perris, Pomona, Rancho Cucamonga, Redlands, Rialto, Riverside, Rowland Heights, San Bernardino, San Dimas, San Jacinto, Sun City, Temecula, Upland, Valle Vista, Walnut, Yucaipa ,
910=USA North Carolina Dunn, Fayetteville, Jacksonville, Laurinburg, Lumberton, Rockingham, Wilmington,
912=USA Georgia Brunswick, Douglas, Hinesville, Jesup, St. Marys, Savannah, Statesboro, Sylvania, Vidalia, Waycross,
913=USA Kansas Atchison, Bush City, Edgerton, Kansas City, Leavenworth, Lenexa, Mound City, Olathe, Osawatomie, Overland Park, Shawnee, Tonganoxie, Winchester,
914=USA New York Bedford, Chappaqua, Croton Falls, Dobbs Ferry, Harrison, Larchmont, Mamaroneck, Mt. Vernon, New Rochelle, Peekskill, Purchase, Rye, Scarsdale, Tarrytown, Tuckahoe, White Plains, Yonkers, exactly covers Westchester County,
915=USA Texas El Paso, Fabens, Guadalupe Mountains N.P., Milehigh, Sierra Blanca,
916=USA California El Dorado Hills, Fair Oaks, Lincoln, Roseville, Sacramento, Walnut Grove, West Sacramento,
917=USA New York New York City,
918=USA Oklahoma Bartlesville, Broken Arrow, McAlester, Muskogee, Tahlequah, Tulsa,
919=USA North Carolina Chapel Hill, Durham, Goldsboro, Raleigh, Sanford, Smithfield,
920=USA Wisconsin Appleton, Berlin, Cedar Grove, Columbus, De Pere, Fond du Lac, Fort Atkinson, Green Bay, Jefferson, Manitowoc, Neenah, New London, Oconto, Oneida, Oshkosh, Princeton, Sheboygan, Sturgeon Bay, Watertown,
925=USA California Antioch, Concord, Danville, Livermore, Martinez, Moraga, Orinda, Pittsburg, Pleasanton, San Ramon, Walnut Creek, inland East Bay,
928=USA Arizona Aguila, Alpine, Arizona Village, Ash Fork, Bagdad, Black Mesa, Blue Ridge, Bonita, Bouse, Bullhead City, Bullhead City North, Cameron, Camp Verde, Castle Rock, Chinle, Chino Valley, Cibola, Clifton, Coconino Plateau, Colorado City, Cottonwood, Dennehotso, Dilcon, Duncan, Eagar, East Kingman, Ehrenberg, Flagstaff, Ft. Apache, Ft. Defiance, Fredonia, Ganado, Gila Bend, Globe, Golden Valley, Grand Canyon, Greasewood, Green Haven, Greer, Harquahala Valley, Hawley Lake, Heber, Holbrook, Humboldt, Hyder, Joseph City, Kaibito, Kayenta, Keams Canyon, Kingman, Kykotsmovi Village, Lake Havasu City, Lake Mohave Ranchos, Lake Pleasant, Le Chee, Leupp, Littlefield, Lukachukai, Many Farms, Marble Canyon, McNary, Meadview, Mesquite Creek, Miami, Mohave Valley, Mormon Lake, Munds Park, Page, Parker, Parker Dam, Payson, Peach Springs, Pima, Pinedale, Pinetop, Pinon Cottonwood, Polacca, Poston, Prescott, Quartzsite, Red Valley, Rock Point, Roosevelt Lake, Rough Rock, Safford, Saint Johns, Salome, San Carlos, Sanders, Sedona, Seligman, Shonto, Show Low, Snowflake, Somerton, Springerville, Supai, Teec Nos Pos, Tonto Basin, Toyei, Tsaile, Tuba City, Wellton, Whiteriver, Wickenburg, Wide Ruins, Wikieup, Williams, Window Rock, Winslow, Yarnell, Yarnell, Young, Yucca, Yuma, Grand Canyon N.P., Petrified Forest N.P., Canyon de Chelly N.M.,
931=USA Tennessee Celina, Clarksville, Columbia, Cookeville, Crossville, Land Between the Lakes, McEwen, McMinnville, Manchester, Shelbyville, Sparta,
936=USA Texas Alto, Anderson, Austonio, Batson, Broaddus, Center, Chester, Coldspring, Conroe, Corrigan, Crockett, Cushing, Cut and Shoot, Dayton, Devers, Etoile, Evergreen, Garrison, Goodrich, Grapeland, Hardin, Hilltop Lakes, Hull, Huntsville, Iola, Joaquin, Liberty, Livingston, Lufkin, Madisonville, Montgomery, Nacogdoches, Navasota, Normangee, North Zulch, Onalaska, Plantersville, Prairie View, Raywood, Reklaw, Ruby, San Augustine, Saratoga, Segno, Shepherd, Shiro, Tenaha, Timpson, Waller, Washington, Willis, Zavalla,
937=USA Ohio Bardwell, Beavercreek, Bellefontaine, Blanchester, Camden, Centerville, Dayton, Fairborn, Greenfield, Higginsport, Hillsboro, Miamisburg, Springfield, Wilmington, Xenia,
939=Puerto Rico
940=USA Texas Aspermont, Benjamin, Childress, Crowell, Decatur, Denton, Gainesville, Graham, Haskell, Mineral Wells, Wichita Falls,
941=USA Florida Boca Grande, Bradenton, Cape Haze, Englewood, Myakka, North Port, Palmetto, Port Charlotte, Punta Gorda, Sarasota, Venice, Charlotte, Manatee, and Sarasota Counties,
947=USA Michigan Birmingham, Farmington Hills, Ferndale, Holly, Leonard, (part of) Livonia, Novi, Pontiac, Rochester, Southfield, Troy, Waterford, West Bloomfield, Whitmore Lake, Oakland County,
949=USA California southern Orange County: Aliso Viejo, Corona del Mar, (part of) Costa Mesa, El Toro, (most of) Irvine, Laguna Beach, Laguna Niguel, Mission Viejo, (most of) Newport Beach, Rancho Santa Margarita, San Clemente, San Juan Capistrano, (most of) Tustin,
952=USA Minnesota Apple Valley, Belle Plaine, Bloomington, Burnsville, Chaska, Eden Prairie, Edina, Hopkins, Lakeville, Minnetonka, New Germany, New Prague, Norwood, St. Louis Park, Savage, Shakopee, Young America, southwestern suburbs of Minneapolis,
954=USA Florida Coral Springs, Davie, Deerfield Beach, Ft. Lauderdale, Hollywood, Margate, Miramar, Oakland Park, Pompano Beach, Tamarac (754 will overlay 954),
956=USA Texas Alamo, Brownsville, Donna, Edcouch, Edinburg, El Sauz, Elsa, Encinal, Falcon, Falcon Heights, Harlingen, La Feria, La Grulla, La Joya, Laredo, Lopeno, Los Fresnos, McAllen, Mercedes, Mission, Pharr, Port Isael, Raymondville, Rio Grande City, Rio Hondo, Roma, San Benito, San Isidro, San Juan, San Ygnacio, South Padre Island, Sullivan City, Weslaco, Zapata,
970=USA Colorado Aspen, Berthoud, Carbondale, Clifton, Cortez, Craig, Dillon, Durango, Estes Park, Fort Collins, Fort Morgan, Frisco, Grand Junction, Greeley, Gunnison, Lake City, Loveland, Montrose, Pagosa Springs, Rifle, Seibert, Silverton, Steamboat Springs, Sterling, Telluride, Vail, Vona, Wiggins, Winter Park, Yuma, Mesa Verde N.P., Rocky Mountain N.P.,
971=USA Oregon Beaverton, Dallas, Gresham, Hillsboro, Lake Oswego, Milwaukie, Neskowin, Oregon City, Portland, Salem, Tigard, Tualatin, Astoria, Bay City, Beaver, Cannon Beach, Cloverdale, Garibaldi, Jewell, Knappa, Nehalem, Pacific City, Rockaway, Seaside, Tillamook, Warrenton,
972=USA Texas Addison, Allen, Carrollton, Celina, Dallas, Duncanville, Ennis, Farmers Branch, Frisco, Garland, Grand Prairie, Irving, Italy, Kaufman, Lavon, Lewisville, McKinney, Mesquite, Midlothian, Plano, Renner, Richardson, Seagoville, Terrell, Waxahatchie.
973=USA New Jersey Belleville, Bloomfield, Boonton, Butler, Caldwell, Dover, Hawthorne, Livingston, Madison, Millburn, Morristown, Newark, Newton, Nutley, Orange, Passaic, Paterson, Succasunna, Verona, Wayne, Whippany,
978=USA Massachusetts Andover, Athol, Barre, Beverly, Billerica, Chelmsford, Concord, Danvers, Fitchburg, Gloucester, Haverhill, Lawrence, Leominster, Lowell, Maynard, Methuen, New Salem, Peabody, Salem, Sudbury, Wilmington (351 overlays 978),
979=USA Texas Angleton, Bay City, Beasley, Bellville, Borden, Brazoria, Brenham, Bryan/College Station, Caldwell, Calvert, Clute, Damon, Deanville, Dime Box, Eagle Lake, East Bernard, El Campo, Franklin, Freeport, Garwood, Giddings, Hearne, Hempstead, High Hill, Kurten, La Grange, Lake Jackson, Lexington, Louise, Markham, Matagorda, Moravia, Needville, New Ulm, Northrup, Plum, Schulenburg, Sealy, Snook, Tunis, Wallis, Weimar, West Columbia, Wharton,
980=USA North Carolina Albemarle, Charlotte, Concord, Gastonia, Kannapolis, Lincolnton, Monroe, Shelby, Statesville, Wadesboro,
985=USA Louisiana north shore: Amite City, Angie, Bogalusa, Bush, Covington, Folsom, Franklinton, Hammond, Independence, Kentwood, Lacombe, Madisonville, Mandeville, Mount Hermon, Pearl River, Pine, Pontchatoula West of New Orleans: Chackbay, Edgard, Galliano, Garyville, Gibson, Golden Meadow, Grand Isle, Houma, Labadieville, Laplace, Larose, Leeville, Lockport, Luling, Montegut, Morgan City, Napoleonville, Norco, Paradis, Patterson, Pierre Part, Raceland, Reserve, Thibodaux,
989=USA Michigan Alma, Alpena, Atlanta, Bad Axe, Bay City, Caro, Gaylord, Ithaca, Midland, Mt. Pleasant, Rogers City, Roscommon, Saginaw, Stanton

186
xml-xampp/area/ip.php Normal file
View File

@ -0,0 +1,186 @@
<?php
#############################################################################
# IP address geolocation
# Aastra SIP Phones R1.4.2 or better
#
# php source code
#
# Usage
# script.php?ip=IP
# IP is the IP address to lookup or SELF to lookup for current public IP.
#
# Copyright 2005-2015 Mitel Networks
#############################################################################
#############################################################################
# PHP customization for includes and warnings
#############################################################################
$os = strtolower(PHP_OS);
if(strpos($os, 'win') === false) ini_set('include_path',ini_get('include_path').':include:../include');
else ini_set('include_path',ini_get('include_path').';include;..\include');
error_reporting(E_ERROR | E_PARSE);
#############################################################################
# Includes
#############################################################################
require_once('AastraCommon.php');
#############################################################################
# Beginning of the active code
#############################################################################
# Retrieve parameters
$ip=Aastra_getvar_safe('ip');
# Trace
Aastra_trace_call('ip','ip='.$ip);
# Test User Agent
Aastra_test_phone_version('1.4.2.',0);
# Get language
$language=Aastra_get_language();
# Global compatibility
$nb_softkeys=Aastra_number_physical_softkeys_supported();
$is_toptitle_supported=Aastra_is_top_title_supported();
# Test parameter
if($ip)
{
# So far so good
$error=0;
# user input
if($ip!='SELF') $lookup=$ip;
else
{
# Retrieve public IP address
$lookup=Aastra_getvar_safe('REMOTE_ADDR','','SERVER');
}
# Perform geolocation
$return=Aastra_get_geolocation($lookup);
# Check return
if(!$return[0]) $error=1;
# Display result
if($error==0)
{
if(Aastra_is_formattedtextscreen_supported())
{
# As a Formatted Text Screen
require_once('AastraIPPhoneFormattedTextScreen.class.php');
$object = new AastraIPPhoneFormattedTextScreen();
$object->setDestroyOnExit();
$size=Aastra_size_formattedtextscreen();
if($is_toptitle_supported) $object->setTopTitle(Aastra_get_label('IP Geolocation',$language));
if($size>5) $font='double';
else $font=NULL;
$object->addLine($lookup,$font,'center');
if($size>5) $object->addLine('',$font);
$object->setScrollStart($size-1);
$line=$return[1]['city'];
if($return[1]['region']!='') $line.=', '.$return[1]['region'];
$object->addLine($line,$font,'right');
$object->addLine($return[1]['country_name'],$font,'right');
$line=Aastra_get_label('Lat.=',$language).$return[1]['latitude'];
$object->addLine($line,$font,'right');
$line=Aastra_get_label('Long.=',$language).$return[1]['longitude'];
$object->addLine($line,$font,'right');
$line=Aastra_get_label('Powered by geoPlugin',$language);
if($size>5)
{
$object->setScrollEnd();
$object->addLine($line,'','center');
}
else
{
$object->addLine($line,'','center');
$object->setScrollEnd();
}
}
else
{
# As a Text Screen
require_once('AastraIPPhoneTextScreen.class.php');
$object = new AastraIPPhoneTextScreen();
$object->setDestroyOnExit();
$object->setTitle($lookup);
$text=Aastra_get_label('City=',$language).$return[1]['city'];
if($return[1]['region']!='') $text.=', '.$return[1]['region'];
$text.='. ';
$text.=Aastra_get_label('Country=',$language).$return[1]['country_name'].'. ';
$text.=Aastra_get_label('Latitude=',$language).$return[1]['latitude'].'. ';
$text.=Aastra_get_label('Longitude=',$language).$return[1]['longitude'].'. ';
$object->setText($text);
}
# Softkeys
if($nb_softkeys>0)
{
if($ip!='SELF') $object->addSoftkey('1', Aastra_get_label('New lookup',$language), $XML_SERVER);
$object->addSoftkey($nb_softkeys, Aastra_get_label('Exit',$language), 'SoftKey:Exit');
}
if($ip!='SELF') $object->setCancelAction($XML_SERVER);
}
else
{
# Display error
require_once('AastraIPPhoneTextScreen.class.php');
$object = new AastraIPPhoneTextScreen();
$object->setDestroyOnExit();
if($is_toptitle_supported) $object->setTopTitle($lookup);
else $object->setTitle($lookup);
$object->setText(Aastra_get_label('Geolocation failed.',$language));
# Softkeys
if($nb_softkeys>0)
{
if($ip!='SELF') $object->addSoftkey($nb_softkeys,Aastra_get_label('Close',$language),$XML_SERVER);
else $object->addSoftkey($nb_softkeys,Aastra_get_label('Exit',$language),'SoftKey:Exit');
}
if($ip!='SELF') $object->setCancelAction($XML_SERVER);
}
}
else
{
# Input IP address
require_once('AastraIPPhoneInputScreen.class.php');
$object = new AastraIPPhoneInputScreen();
if($is_toptitle_supported) $object->setTopTitle(Aastra_get_label('IP Geolocation',$language));
else $object->setTitle(Aastra_get_label('IP Geolocation',$language));
$object->setPrompt(Aastra_get_label('Enter IP address',$language));
$object->setParameter('ip');
$object->setType('IP');
$object->setURL($XML_SERVER);
$object->setDestroyOnExit();
# Softkeys
if($nb_softkeys>0)
{
if($nb_softkeys==4)
{
$object->addSoftkey('1',Aastra_get_label('Backspace',$language),'SoftKey:BackSpace');
$object->addSoftkey('2',Aastra_get_label('.',$language),'SoftKey:Dot');
$object->addSoftkey('3',Aastra_get_label('Submit',$language),'SoftKey:Submit');
$object->addSoftkey('4',Aastra_get_label('Exit',$language),'SoftKey:Exit');
}
else if($nb_softkeys==6)
{
$object->addSoftkey('1',Aastra_get_label('Backspace',$language),'SoftKey:BackSpace');
$object->addSoftkey('2',Aastra_get_label('.',$language),'SoftKey:Dot');
$object->addSoftkey('5',Aastra_get_label('Submit',$language),'SoftKey:Submit');
$object->addSoftkey('6',Aastra_get_label('Exit',$language),'SoftKey:Exit');
}
else if($nb_softkeys==10)
{
$object->addSoftkey('10',Aastra_get_label('Exit',$language),'SoftKey:Exit');
}
}
}
# Display object
$object->output();
exit;
?>

423
xml-xampp/clock/clock.ini Normal file
View File

@ -0,0 +1,423 @@
[0]
name=Afghanistan-Kabul
index=113
[1]
name=Algeria-Algiers
index=14
[2]
name=Argentina-Buenos Aires
index=51
[3]
name=Australia-Adelaide
index=5
[4]
name=Australia-Brisbane
index=47
[5]
name=Australia-Canberra
index=57
[6]
name=Australia-Darwin
index=72
[7]
name=Australia-Melbourne
index=152
[8]
name=Australia-Perth
index=196
[9]
name=Australia-Sydney
index=240
[10]
name=Austria-Vienna
index=259
[11]
name=Bahamas-Nassau
index=173
[12]
name=Bangladesh-Dhaka
index=73
[13]
name=Belarus-Minsk
index=285
[14]
name=Belgium-Brussels
index=48
[15]
name=Bolivia-La Paz
index=124
[16]
name=Brazil-Brasilia
index=45
[17]
name=Brazil-Rio de Janeiro
index=213
[18]
name=Brazil-S<>o Paulo
index=233
[19]
name=Bulgaria-Sofia
index=238
[20]
name=Canada-Edmonton
index=80
[21]
name=Canada-Halifax
index=286
[22]
name=Canada-Montreal
index=165
[23]
name=Canada-Ottawa
index=188
[24]
name=Canada-St. John's
index=175
[25]
name=Canada-Toronto
index=250
[26]
name=Canada-Vancouver
index=256
[27]
name=Canada-Winnipeg
index=265
[28]
name=Chile-Santiago
index=232
[29]
name=China-Beijing
index=33
[30]
name=China-Hong Kong
index=102
[31]
name=China-Shanghai
index=237
[32]
name=Colombia-Bogota
index=41
[33]
name=Croatia-Zagreb
index=281
[34]
name=Cuba-Havana
index=99
[35]
name=Czech Republic-Prague
index=204
[36]
name=Denmark-Copenhagen
index=69
[37]
name=Dominican Republic-Santo Domingo
index=230
[38]
name=Egypt-Cairo
index=53
[39]
name=El Salvador-San Salvador
index=228
[40]
name=Estonia-Tallinn
index=242
[41]
name=Ethiopia-Addis Ababa
index=7
[42]
name=Fiji-Suva
index=82
[43]
name=Finland-Helsinki
index=101
[44]
name=France-Paris
index=195
[45]
name=Germany-Berlin
index=37
[46]
name=Germany-Frankfurt
index=83
[47]
name=Greece-Athens
index=26
[48]
name=Guatemala-Guatemala
index=94
[49]
name=Honduras-Tegucigalpa
index=245
[50]
name=Hungary-Budapest
index=50
[51]
name=Iceland-Reykjavik
index=211
[52]
name=India-Kolkata
index=54
[53]
name=India-Mumbai
index=44
[54]
name=India-New Delhi
index=176
[55]
name=Indonesia-Jakarta
index=108
[56]
name=Iran-Tehran
index=246
[57]
name=Iraq-Baghdad
index=27
[58]
name=Ireland-Dublin
index=78
[59]
name=Israel-Jerusalem
index=110
[60]
name=Italy-Rome
index=215
[61]
name=Jamaica-Kingston
index=120
[62]
name=Japan-Tokyo
index=248
[63]
name=Jordan-Amman
index=11
[64]
name=Kenya-Nairobi
index=170
[65]
name=Kiribati-Kiritimati
index=274
[66]
name=Kuwait-Kuwait City
index=123
[67]
name=Lebanon-Beirut
index=34
[68]
name=Madagascar-Antananarivo
index=20
[69]
name=Malaysia-Kuala Lumpur
index=122
[70]
name=Mexico-Mexico City
index=155
[71]
name=Morocco-Casablanca
index=60
[72]
name=Myanmar-Yangon
index=208
[73]
name=Nepal-Kathmandu
index=117
[74]
name=Netherlands-Amsterdam
index=16
[75]
name=New Zealand-Auckland
index=22
[76]
name=New Zealand-Chatham Island
index=63
[77]
name=Nicaragua-Managua
index=143
[78]
name=Nigeria-Lagos
index=125
[79]
name=Norway-Oslo
index=187
[80]
name=Pakistan-Islamabad
index=106
[81]
name=Pakistan-Karachi
index=757
[82]
name=Pakistan-Lahore
index=756
[83]
name=Paraguay-Asuncion
index=21
[84]
name=Peru-Lima-Lima
index=131
[85]
name=Philippines-Manila
index=145
[86]
name=Poland-Warsaw
index=262
[87]
name=Portugal-Lisbon
index=133
[88]
name=Puerto Rico-San Juan
index=226
[89]
name=Romania-Bucharest
index=49
[90]
name=Russia-Anadyr
index=17
[91]
name=Russia-Kamchatka
index=114
[92]
name=Russia-Moscow
index=166
[93]
name=Russia-Vladivostok
index=261
[94]
name=Saudi Arabia-Riyadh
index=214
[95]
name=Serbia-Belgrade
index=35
[96]
name=Singapore-Singapore
index=236
[97]
name=South Africa-Cape Town
index=56
[98]
name=South Africa-Johannesburg
index=111
[99]
name=South Korea-Seoul
index=235
[100]
name=Spain-Barcelona
index=31
[101]
name=Spain-Madrid
index=141
[102]
name=Sudan-Khartoum
index=118
[103]
name=Sweden-Stockholm
index=239
[104]
name=Switzerland-Geneva
index=87
[105]
name=Switzerland-Z<>rich
index=268
[106]
name=Taiwan-Taipei
index=241
[107]
name=Thailand-Bangkok
index=28
[108]
name=Turkey-Ankara
index=19
[109]
name=Turkey-Istanbul
index=107
[110]
name=U.K.-London
index=136
[111]
name=USA-Anchorage
index=18
[112]
name=USA-Atlanta
index=25
[113]
name=USA-Boston
index=43
[114]
name=USA-Chicago
index=64
[115]
name=USA-Denver
index=75
[116]
name=USA-Detroit
index=77
[117]
name=USA-Honolulu
index=103
[118]
name=USA-Houston
index=104
[119]
name=USA-Indianapolis
index=105
[120]
name=USA-Los Angeles
index=137
[121]
name=USA-Miami
index=156
[122]
name=USA-Minneapolis
index=159
[123]
name=USA-Montgomery
index=407
[124]
name=USA-New Orleans
index=178
[125]
name=USA-New York
index=179
[126]
name=USA-Philadelphia
index=198
[127]
name=USA-Phoenix
index=197
[128]
name=USA-Seattle
index=234
[129]
name=USA-St. Paul
index=219
[130]
name=USA-San Francisco
index=224
[131]
name=USA-Washington DC
index=263
[132]
name=Ukraine-Kyiv
index=367
[133]
name=Ukraine-Odesa
index=366
[134]
name=United Arab Emirates-Dubai
index=776
[135]
name=Uruguay-Montevideo
index=163
[136]
name=Uzbekistan-Tashkent
index=244
[137]
name=Venezuela-Caracas
index=58
[138]
name=Vietnam-Hanoi
index=95
[139]
name=Yemen-Aden
index=6
[140]
name=Zimbabwe-Harare
index=96

Some files were not shown because too many files have changed in this diff Show More