Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
8273ee8749
|
|||
071529b1e8
|
|||
fe1dabf59a
|
|||
fc521a47e0
|
|||
8fc8fc9b51
|
|||
13254581af
|
BIN
58015045-00-XML-API.pdf
Normal file
@ -1,371 +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="regular">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="double|regular" />
|
||||
</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="inputLanguage" use="optional" default="English">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:pattern value="English|French|Spanish|German|Italian|Fran<61>ais|Espa<70>ol|Deutsch|Italiano" />
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
<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:complexType>
|
||||
</xs:element>
|
||||
|
||||
|
||||
|
||||
</xs:schema>
|
53
README.txt
@ -1,20 +1,25 @@
|
||||
AASTRA TELECOM INC.
|
||||
October 2007
|
||||
MITEL
|
||||
July 2017
|
||||
|
||||
|
||||
-PA-001008-00-01-XML-API.pdf - Aastra IP Phone XML API document. For use with IP Phone SIP Release 2.1.1
|
||||
-58015045-00-XML-API.pdf - Mitel IP Phone XML API document. For use with Mitel SIP Phones Release 5.0.0
|
||||
|
||||
-AastraXMLSchema 2.1.1.xsd - XML Schema which can be used to validate XML development.
|
||||
For use with IP Phone SIP Release 2.1.1
|
||||
-XMLSchema.xsd - XML Schema which can be used to validate XML development.
|
||||
|
||||
-php_classes 2.1.1.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.1.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.1.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
|
||||
@ -22,4 +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.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
|
27475
XML-API.txt
598
XMLSchema.xsd
Normal 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>
|
@ -1,194 +0,0 @@
|
||||
<?
|
||||
#####################################################################
|
||||
# Asterisk Call Forward for Aastra SIP Phones R2.1.1 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&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 "Aastra51i":
|
||||
case "Aastra53i":
|
||||
break;
|
||||
default:
|
||||
$output .= "<ExecuteItem URI=\"".$Server."?user=".$user."&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&action=set&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 "Aastra51i":
|
||||
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&user=$user&key=$key</URI>\n";
|
||||
$output .= "</MenuItem>\n";
|
||||
}
|
||||
$output .= "<MenuItem>\n";
|
||||
$output .= "<Prompt>Change</Prompt>\n";
|
||||
$output .= "<URI>$Server/cfwd.php?action=change&user=$user&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&user=$user&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&user=$user&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;
|
||||
?>
|
@ -1,176 +0,0 @@
|
||||
<?
|
||||
#####################################################################
|
||||
# Asterisk Directory for Aastra SIP Phones R2.1.1 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 'Aastra51i':
|
||||
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;
|
||||
?>
|
||||
|
@ -1,151 +0,0 @@
|
||||
<?
|
||||
#####################################################################
|
||||
# Asterisk DND for Aastra SIP Phones R2.1.1 or better
|
||||
#
|
||||
# php source code
|
||||
# Provided by Aastra Telecom Ltd 2007
|
||||
#
|
||||
# @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&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 "Aastra51i":
|
||||
case "Aastra53i":
|
||||
break;
|
||||
|
||||
default:
|
||||
if($action=='change') $output .= "<ExecuteItem URI=\"".$Server."?action=display&status=".$dnd."\"/>\n";
|
||||
break;
|
||||
}
|
||||
$output .= "</AastraIPPhoneExecute>\n";
|
||||
break;
|
||||
}
|
||||
|
||||
header("Content-Length: ".strlen($output));
|
||||
echo $output;
|
||||
?>
|
@ -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
|
||||
|
@ -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();
|
||||
|
||||
?>
|
@ -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];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
?>
|
@ -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;
|
||||
}
|
||||
}
|
||||
?>
|
@ -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
|
@ -1,37 +0,0 @@
|
||||
<?
|
||||
#############################################################################
|
||||
# Asterisk Register - Update DND and CFWD status
|
||||
#
|
||||
# Aastra SIP Phones 2.1.1 or better
|
||||
#
|
||||
# Copyright 2007 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&user=".$user."&key=".$dndkey."\"/>\n";
|
||||
$output .= "<ExecuteItem URI=\"".$Server."cfwd.php?action=check&user=".$user."&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
@ -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.
|
34
csv_directory/config/directory.conf
Normal 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=
|
23
csv_directory/config/server.conf
Normal 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=
|
1018
csv_directory/directory/directory.php
Normal file
899
csv_directory/directory/directory.txt
Normal 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
|
559
csv_directory/directory/speed.php
Normal 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
@ -0,0 +1 @@
|
||||
../php_classes
|
5574
csv_directory/language.ini
Normal file
24
ldap_directory/License.txt
Normal 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.
|
59
ldap_directory/config/ldap_directory.conf
Normal 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
|
15
ldap_directory/config/server.conf
Normal 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=
|
478
ldap_directory/directory/directory.php
Normal 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
@ -0,0 +1 @@
|
||||
../php_classes
|
5574
ldap_directory/language.ini
Normal file
1433
php_classes/AastraCommon.php
Normal file
@ -1,28 +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');
|
||||
|
||||
@ -32,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();
|
||||
@ -50,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)
|
||||
@ -88,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)
|
||||
@ -103,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('<', '>', '&'),
|
||||
$string
|
||||
));
|
||||
return(str_replace(
|
||||
array('&', '<', '>', '"', "'"),
|
||||
array('&', '<', '>', '"', '''),
|
||||
$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;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
2051
php_classes/AastraIPPhone.php
Normal file
213
php_classes/AastraIPPhoneCallLog.class.php
Normal 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);
|
||||
}
|
||||
}
|
||||
?>
|
83
php_classes/AastraIPPhoneCallLogEntry.class.php
Normal 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);
|
||||
}
|
||||
}
|
||||
?>
|
@ -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);
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
@ -1,9 +1,8 @@
|
||||
<?php
|
||||
|
||||
################################################################################
|
||||
# Aastra XML API Classes - AastraIPPhoneConfigurationEntry
|
||||
# Firmware 2.0 or better
|
||||
# Copyright Aastra Telecom 2007
|
||||
# Copyright Mitel Networks 2005-2015
|
||||
#
|
||||
# Internal class for AastraIPPhoneConfiguration object.
|
||||
################################################################################
|
||||
@ -11,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)
|
||||
@ -28,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);
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
@ -1,124 +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->_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;
|
||||
}
|
||||
}
|
||||
?>
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
@ -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);
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
@ -1,9 +1,8 @@
|
||||
<?php
|
||||
|
||||
################################################################################
|
||||
# Aastra XML API Classes - AastraIPPhoneExecuteEntry
|
||||
# Firmware 1.4.1 or better
|
||||
# Copyright Aastra Telecom 2007
|
||||
# Firmware 2.0 or better
|
||||
# Copyright Mitel Networks 2005-2015
|
||||
#
|
||||
# Internal class for AastraIPPhoneExecute object.
|
||||
################################################################################
|
||||
@ -11,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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,8 @@
|
||||
<?php
|
||||
|
||||
################################################################################
|
||||
# Aastra XML API Classes - AastraIPPhoneFormattedTextScreenEntry
|
||||
# Firmware 2.0 or better
|
||||
# Copyright Aastra Telecom 2007
|
||||
# Copyright Mitel Networks 2005-2015
|
||||
#
|
||||
# Internal class for AastraIPPhoneFormattedTextScreen object.
|
||||
################################################################################
|
||||
@ -12,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;
|
||||
}
|
||||
|
||||
@ -30,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";
|
||||
|
203
php_classes/AastraIPPhoneGDImage.class.php
Normal 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 = "东丝丞丟丸";
|
||||
# $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;
|
||||
}
|
||||
}
|
||||
?>
|
@ -1,9 +1,8 @@
|
||||
<?php
|
||||
|
||||
################################################################################
|
||||
# Aastra XML API Classes - AastraIPIconEntry
|
||||
# Aastra XML API Classes - AastraIPPhoneIconEntry
|
||||
# Firmware 2.0 or better
|
||||
# Copyright Aastra Telecom 2007
|
||||
# Copyright Mitel Networks 2005-2015
|
||||
#
|
||||
# Internal class for AastraIPPhone object.
|
||||
################################################################################
|
||||
|
242
php_classes/AastraIPPhoneIconMenu.class.php
Normal 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);
|
||||
}
|
||||
}
|
||||
?>
|
87
php_classes/AastraIPPhoneIconMenuEntry.class.php
Normal 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);
|
||||
}
|
||||
}
|
||||
?>
|
@ -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,46 +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\"";
|
||||
|
||||
# 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);
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,8 @@
|
||||
<?php
|
||||
|
||||
################################################################################
|
||||
# Aastra XML API Classes - AastraIPPhoneImageMenuEntry
|
||||
# Firmware 2.0 or better
|
||||
# Copyright Aastra Telecom 2007
|
||||
# Copyright Mitel Networks 2005-2015
|
||||
#
|
||||
# Internal class for AastraIPPhoneImageMenu object.
|
||||
################################################################################
|
||||
|
@ -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,43 +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->_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;
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,7 @@
|
||||
<?
|
||||
|
||||
<?php
|
||||
########################################################################################################
|
||||
# Aastra XML API Classes - AastraIPPhoneInputScreen
|
||||
# Copyright Aastra Telecom 2007
|
||||
# Copyright Mitel Networks 2005-2015
|
||||
#
|
||||
# AastraIPPhoneInputScreen object.
|
||||
#
|
||||
@ -10,48 +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.
|
||||
# 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)
|
||||
# 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
|
||||
# @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');
|
||||
@ -97,10 +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)
|
||||
{
|
||||
@ -126,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()
|
||||
@ -136,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)
|
||||
@ -156,16 +231,17 @@ class AastraIPPhoneInputScreen extends AastraIPPhone {
|
||||
$this->_inputlanguage=$input;
|
||||
}
|
||||
|
||||
|
||||
function addField($type='')
|
||||
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')
|
||||
@ -178,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)
|
||||
@ -193,58 +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;
|
||||
}
|
||||
|
@ -1,9 +1,8 @@
|
||||
<?php
|
||||
|
||||
################################################################################
|
||||
# Aastra XML API Classes - AastraIPPhoneInputScreenEntry
|
||||
# Firmware 2.0.2 or better
|
||||
# Copyright Aastra Telecom 2007
|
||||
# Firmware 2.0 or better
|
||||
# Copyright Mitel Networks 2005-2015
|
||||
#
|
||||
# Internal class for AastraIPPhoneInputScreen object.
|
||||
################################################################################
|
||||
@ -15,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)
|
||||
{
|
||||
@ -30,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);
|
||||
|
69
php_classes/AastraIPPhoneScrollHandler.php
Normal 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;
|
||||
|
||||
?>
|
351
php_classes/AastraIPPhoneScrollableDirectory.class.php
Normal 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;
|
||||
}
|
||||
}
|
||||
?>
|
383
php_classes/AastraIPPhoneScrollableTextMenu.class.php
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
77
php_classes/AastraIPPhoneSoftkey.class.php
Normal 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);
|
||||
}
|
||||
}
|
||||
?>
|
@ -1,9 +1,8 @@
|
||||
<?php
|
||||
|
||||
################################################################################
|
||||
# Aastra XML API Classes - AastraIPPhoneSoftkeyEntry
|
||||
# Firmware 2.0 or better
|
||||
# Copyright Aastra Telecom 2007
|
||||
# Copyright Mitel Networks 2005-2015
|
||||
#
|
||||
# Internal class for AastraIPPhone object.
|
||||
################################################################################
|
||||
@ -13,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);
|
||||
|
42
php_classes/AastraIPPhoneSoftkeyParam.class.php
Normal 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);
|
||||
}
|
||||
}
|
||||
?>
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,7 @@
|
||||
<?php
|
||||
|
||||
################################################################################
|
||||
# Aastra XML API Classes - AastraIPPhoneStatusEntry
|
||||
# Firmware 1.4.1 or better
|
||||
# Copyright Aastra Telecom 2007
|
||||
# Copyright Mitel Networks 2005-2015
|
||||
#
|
||||
# Internal class for AastraIPPhoneStatus object.
|
||||
################################################################################
|
||||
@ -11,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);
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
@ -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()
|
||||
{
|
||||
# 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}\"";
|
||||
}
|
||||
|
||||
# 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);
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,7 @@
|
||||
<?php
|
||||
|
||||
################################################################################
|
||||
# Aastra XML API Classes - AastraIPPhoneTextMenuEntry
|
||||
# Firmware 2.0 or better
|
||||
# Copyright Aastra Telecom 2007
|
||||
# Copyright Mitel Networks 2005-2015
|
||||
#
|
||||
# Internal class for AastraIPPhoneTextMenu object.
|
||||
################################################################################
|
||||
@ -14,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()
|
||||
@ -29,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);
|
||||
}
|
||||
}
|
||||
|
@ -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,64 +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}\"";
|
||||
}
|
||||
|
||||
# Beep
|
||||
if ($this->_beep=='yes') $out .= " Beep=\"yes\"";
|
||||
|
||||
# TimeOut
|
||||
if ($this->_timeout!=0) $out .= " Timeout=\"{$this->_timeout}\"";
|
||||
if ($this->_lockin=='yes') $out .= " LockIn=\"yes\"";
|
||||
|
||||
# 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;
|
||||
}
|
||||
}
|
||||
|
28
php_classes/AastraIPPhoneTextScreenEntry.class.php
Normal 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);
|
||||
}
|
||||
}
|
||||
?>
|
@ -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,
|
||||
|
@ -1,67 +1,24 @@
|
||||
<?php
|
||||
|
||||
##########################################################
|
||||
###########################################################################
|
||||
# Sample php applications using the Aastra XML API Classes
|
||||
# Aastra SIP Phones Firmware 2.1.1 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']!="Aastra51i") and ($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;
|
||||
}
|
||||
?>
|
||||
|
24
pictureCallerID/License.txt
Normal 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.
|
BIN
pictureCallerID/fonts/DejaVuSans-Bold.ttf
Normal file
787
pictureCallerID/imageServer.php
Normal 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;
|
||||
?>
|
125
pictureCallerID/pictureID.conf
Normal 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
|
||||
|
BIN
pictureCallerID/pictures/BE.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
pictureCallerID/pictures/CA.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
pictureCallerID/pictures/CH.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
pictureCallerID/pictures/DE.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
pictureCallerID/pictures/FR.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
pictureCallerID/pictures/IT.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
pictureCallerID/pictures/MX.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
pictureCallerID/pictures/SP.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
pictureCallerID/pictures/SWE.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
pictureCallerID/pictures/UK.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
pictureCallerID/pictures/US.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
pictureCallerID/pictures/conference.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
pictureCallerID/pictures/default.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
pictureCallerID/pictures/logo.png
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
pictureCallerID/pictures/phone.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
pictureCallerID/pictures/time.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
pictureCallerID/pictures/voicemail.png
Normal file
After Width: | Height: | Size: 17 KiB |
@ -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:
|
@ -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:
|
@ -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:
|
@ -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:
|
@ -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:
|
@ -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 ""
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
?>
|
@ -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",
|
||||
);
|
||||
?>
|
@ -1,304 +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 "Aastra51i":
|
||||
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;
|
||||
?>
|
@ -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
@ -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;
|
||||
?>
|
308
xml-xampp/area/area_codes.txt
Normal 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
|