#
##############################################################################
-import installer
+import plugin_thunderbird
""",
"init_xml" : [],
"demo_xml" : [],
- "update_xml" : ['thunderbird_installer.xml',
- 'security/ir.model.access.csv'],
+ "update_xml" : ['plugin_thunderbird.xml'],
"active": False,
"installable": True,
"certificate" : "00899858104035139949",
+++ /dev/null
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-##############################################################################
-
-from osv import fields
-from osv import osv
-
-import base64
-import addons
-
-class thunderbird_installer(osv.osv_memory):
- _name = 'thunderbird.installer'
- _inherit = 'res.config.installer'
-
- _columns = {
- 'name':fields.char('File name', size=34),
- 'pdf_name':fields.char('File name', size=64),
- 'thunderbird':fields.boolean('Thunderbird Plug-in', help="Allows you to select an object that you would like to add to your email and its attachments."),
- 'plugin_file':fields.char('Thunderbird Plug-in', size=256, readonly=True, help="Thunderbird plug-in file. Save as this file and install this plug-in in thunderbird."),
- 'pdf_file':fields.char('Installation Manual', size=264, help="The documentation file :- how to install Thunderbird Plug-in.", readonly=True),
- 'description':fields.text('Description', readonly=True)
- }
-
- _defaults = {
- 'thunderbird' : True,
- 'name' : 'openerp_plugin.xpi',
- 'pdf_file' : 'http://doc.openerp.com/book/2/2_6_Comms/2_6_Comms_thunderbird.html',
- 'plugin_file' : 'https://addons.mozilla.org/en-US/thunderbird/addon/openerp-plugin/',
- 'description' : """
-Thunderbird plugin installation:
- 1. Save the Thunderbird plug-in.
- 2. From the menu bar of Thunderbird, open Tools > Add-ons.
- 3. Click "Install".
- 4. Select the plug-in (the file named openerp_plugin.xpi).
- 5. Click "Install Now".
- 6. Restart Thunderbird.
-
-Configure OpenERP in Thunderbird:
- 1. Go to Tools > OpenERP Configuration.
- 2. Check the data (configured by default).
- 3. Click "Connect".
- 4. A message appears with the state of your connection.
- 5. If the connection fails, check if your database is opened, and check the data again.
- 6. If the connection succeeds, start to archive e-mails in OpenERP.
-"""
- }
-
-thunderbird_installer()
+++ /dev/null
-interfaces components/xml-rpc.xpt
-component {4d7d15c0-3747-4f7f-b6b3-792a5ea1a9aa} components/nsXmlRpcClient.js
-contract @mozilla.org/xml-rpc/client;1 {4d7d15c0-3747-4f7f-b6b3-792a5ea1a9aa}
-category profile-after-change @mozilla.org/xml-rpc/client;1
-content openerp_plugin jar:chrome/openerp_plugin.jar!/content/
-overlay chrome://messenger/content/messenger.xul chrome://openerp_plugin/content/overlay.xul
-locale openerp_plugin en-US jar:chrome/openerp_plugin.jar!/locale/en-US/
-skin openerp_plugin classic/1.0 jar:chrome/openerp_plugin.jar!/skin/
-#style chrome://global/content/customizeToolbar.xul chrome://openerp_plugin/skin/overlay.css
+++ /dev/null
-<?xml version="1.0"?>\r
-<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>\r
-<?xml-stylesheet href="style.css" type="text/css"?>\r
-<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/config.dtd">\r
-\r
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\r
- xmlns:html="http://www.w3.org/1999/xhtml"\r
- title="&title.label;" onload="load_config_data();" height="500" width="580">\r
-<script type="text/javascript" src="chrome://openerp_plugin/content/js/tiny_xmlrpc.js"></script>\r
-<script type="text/javascript" src="chrome://openerp_plugin/content/js/tools.js"></script>\r
-<script type="text/javascript" src="chrome://openerp_plugin/content/js/config.js"></script>\r
-<tabbox>\r
- <tabs>\r
- <tab label="Configuration Settings"/>\r
- <tab label="About"/>\r
- </tabs>\r
- <tabpanels>\r
- <tabpanel id="configtab">\r
- <vbox>\r
- <groupbox id="gpConnection" align ="center" width="530">\r
- <grid flex="1">\r
- <columns>\r
- <column />\r
- <column />\r
- <column flex="1"/>\r
- </columns>\r
- <rows>\r
- <row>\r
- <label align="right" id="url" value="&txturl.label;" width="80" class="text-prompt"/>\r
- <textbox id="txturl" width="300" readonly="true" />\r
- <button label="&getdblist.label;" oncommand="openConfigChange();" image="&imagesearch.value;" width="90"/>\r
- </row>\r
- <row>\r
- <label align="right" id="lbldb_list1" control="DBlist" value="&database.label;" width="80" class="text-prompt"/> \r
- <textbox id="DBlist_text" width="300"/>\r
- </row>\r
- <row>\r
- <label align="right" control="txtusername" value="&username.label;" width="80" class="text-prompt"/>\r
- <textbox id="txtusername" width="300"/>\r
- </row>\r
- <row>\r
- <label align="right" control="txtpassword" value="&password.label;" width="80" class="text-prompt"/>\r
- <textbox id="txtpassword" type="password" width="300"/>\r
- </row>\r
- </rows>\r
- </grid>\r
- \r
- <separator class="groove-thin" orient="horizontal" width="94"/> \r
- </groupbox>\r
- <hbox align="right" >\r
- <button id="btconnection" label="&connection.label;" oncommand="connection();" image="&imageok.value;" width="100"/>\r
- </hbox>\r
- </vbox>\r
- \r
- <separator class="groove-thin" orient="horizontal" width="10"/> \r
- </tabpanel>\r
- \r
- <tabpanel id="abouttab">\r
- <groupbox id="gpAbout" width="570" align="center">\r
- <caption label="&gpAbout.label;" align="center"/>\r
-\r
- <vbox style="border:1px solid black" width="560"/>\r
- <description>&openerp.paresent;</description>\r
- <image src="chrome://openerp_plugin/skin/logo.png" sizemode="stretch" align="center"/>\r
-\r
- <description> </description>\r
- <description> </description>\r
- <description>&develop.value;</description>\r
- <image src="chrome://openerp_plugin/skin/developped_by.png" sizemode="stretch" align="center"/>\r
- <description> </description>\r
- <description> </description>\r
- <description>&information.value;</description>\r
- <description><html:a href="&openerp.value;">&openerp.value;</html:a></description>\r
- \r
- <description><html:a href="&axelor.value;">&axelor.value;</html:a></description>\r
- <description><html:a href="&tinyerp.value;">&tinyerp.value;</html:a></description>\r
- <description> </description>\r
- <description> </description>\r
- <description>Copyright © 2006-TODAY OpenERP SA All Rights Reserved.</description>\r
- <description>OpenERP is a trademark of the OpenERP SA Company. OpenERP Web is jointly developed by OpenERP SA & Axelor.</description>\r
- <description>Licenced under the terms of <html:a href="https://tiny.odoo.com/LICENSE.txt"> OpenERP Public License (OEPL) v1.1 (https://tiny.odoo.com/LICENSE.txt)</html:a> </description>\r
- </groupbox>\r
- </tabpanel>\r
- </tabpanels>\r
-</tabbox>\r
-</window>\r
+++ /dev/null
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
-<?xml-stylesheet href="style.css" type="text/css"?>
-<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/config_change.dtd">
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:html="http://www.w3.org/1999/xhtml" onload="config_change_load();"
- title="Openerp Connection" height="190" width="330">
- <script type="text/javascript" src="chrome://openerp_plugin/content/js/tiny_xmlrpc.js"></script>
- <script type="text/javascript" src="chrome://openerp_plugin/content/js/tools.js"></script>
- <script type="text/javascript" src="chrome://openerp_plugin/content/js/config.js"></script>
- <separator class="groove-thin" orient="horizontal" width="10"/>
- <grid flex="1">
- <columns>
- <column />
- <column flex="1"/>
- </columns>
- <rows>
- <row>
- <label id="lblurl" control="txtcurl" value="&lblurl.label;" class="text-prompt"/>
- <textbox id="txtcurl" width="170" />
- </row>
- <row>
- <label id="lblport" control="txtcport" value="&lblport.label;" class="text-prompt"/>
- <textbox id="txtcport" width="170" />
- </row>
- <row>
- <label id="dbprotocol" value="&lblprotocol.label;" class="text-prompt" />
- <menulist id="dbprotocol_list" width="140">
- <menupopup>
- <menuitem label="XML-RPC" value="http://"/>
- <menuitem label="XML-RPCS" value="https://"/>
- </menupopup>
- </menulist>
- </row>
- </rows>
- </grid>
- <hbox align="right">
- <button label="Close" image="&imagecancel.value;" oncommand="config_close();" />
- <button label="OK" image="&imageok.value;" oncommand="config_ok()"/>
- </hbox>
- <separator class="groove-thin" orient="horizontal" width="10"/>
-</window>
+++ /dev/null
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
-<?xml-stylesheet href="style.css" type="text/css"?>
-<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/create.dtd">
-<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:html="http://www.w3.org/1999/xhtml"
- title="&title.label;" onload="load_createContact();" id="create_partner_window">
- <script type="text/javascript" src="chrome://openerp_plugin/content/js/tiny_xmlrpc.js"></script>
- <script type="text/javascript" src="chrome://openerp_plugin/content/js/tools.js"></script>
- <script type="text/javascript" src="chrome://openerp_plugin/content/js/create.js"></script>
- <groupbox id="contact" >
- <hbox>
- <textbox class="plain" style="background-color: transparent;" flex="1"
- multiline="true" readonly="true"
- onoverflow="this.height = this.inputField.scrollHeight;"
- value="No existing contact found, you can create a new partner with this contact or link to a existing partner" />
- </hbox>
- <hbox>
- <label align="right" id="partner" value="&selectpartner.value;" width="90" class="text-prompt"/>
- <textbox id="txtselectpartner" readonly="true" value="" width="170"/>
- <button label="Link to partner" oncommand="open_window('chrome://openerp_plugin/content/selectpartner.xul', 400, 400);" image="&imagesearch.value;"/>
- <button label="Clear" oncommand="clear();"/>
- </hbox>
- </groupbox>
- <groupbox id="information" >
- <caption label="Address Detail" />
- <grid flex="1">
- <columns>
- <column />
- <column flex="1"/>
- </columns>
- <rows>
- <row>
- <label align="right" id="name" value="&name.value;" width="90" class="text-prompt"/>
- <textbox id="txtname" align="right" />
- </row>
- <row>
- <label align="right" id="emailid" value="&email.value;" width="90" class="text-prompt"/>
- <textbox id="txtemail" align="right"/>
- </row>
- </rows>
- </grid>
- <separator class="groove-thin" orient="horizontal" width="90"/>
- </groupbox>
- <hbox align="right">
- <button label="cancel" image="&imagecancel.value;" oncommand="close();" />
- <button label="create partner" image="&imageok.value;" oncommand="createContact();"/>
- </hbox>
-</window>
+++ /dev/null
-function load_config_data() {
- getDbList('DBlist');
- document.getElementById("txturl").value = getServer();
- document.getElementById("txtusername").value = getUsername();
- document.getElementById("txtpassword").value = getPassword();
- document.getElementById("DBlist_text").value = getDbName();
-}
-
-function config_close() {
- window.close("chrome://openerp_plugin/content/config_change.xul", "", "chrome");
- open_window('chrome://openerp_plugin/content/config.xul', 580,500);
-}
-
-//set the value of the configuration fields
-function config_change_load() {
- document.getElementById('txtcurl').value = getPreferenceDefault('server_name', 'localhost')
- document.getElementById('txtcport').value = getPreferenceDefault('serverport', '8069')
-}
-
-
-function config_ok()
-{
- var protocol = document.getElementById("dbprotocol_list").value
- if (document.getElementById('txtcurl').value == '' || document.getElementById('txtcport').value == '') {
- alert("You Must Enter Server Name and a Port!")
- return false;
- }
- setPreference('serverport', document.getElementById('txtcport').value)
- setPreference('server_name', document.getElementById('txtcurl').value)
- setServer(document.getElementById("dbprotocol_list").value+document.getElementById('txtcurl').value +":" + document.getElementById('txtcport').value);
- config_close()
-}
-
-function openConfigChange() {
- window.close("chrome://openerp_plugin/content/config.xul", "", "chrome");
- open_window("chrome://openerp_plugin/content/config_change.xul", 350,200);
-}
-
-//xmlrpc request handler for getting the list of database
-var listDbHandler = {
- onResult: function(client, context, result) {
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var arrMethodList = result.QueryInterface(Components.interfaces.nsISupportsArray);
- var count = arrMethodList.Count();
- if (count < 1) {
- setDBList("false");
- return
- }
-
- setDBList("true");
- dbname_saved = getPreference("serverdbname")
-
- var menu1 = document.createElement("menulist");
- menu1.setAttribute("id","DBlist");
- menu1.setAttribute("width","300");
- var menupopup1 = document.createElement("menupopup");
- menu1.appendChild(menupopup1)
-
- // Loop through the results, adding items to the list
- for (i = 0; i < count; i++) {
- var dbname = arrMethodList.QueryElementAt(i, Components.interfaces.nsISupportsCString).data;
- menupopup1.appendChild(createMenuItem(dbname, dbname));
- if (dbname == dbname_saved) {
- index = i
- }
- }
-
- var db_text_field = document.getElementById("DBlist_text");
- db_text_field.parentNode.replaceChild(menu1, db_text_field);
-
- menu1.selectedIndex = index
- },
-
-
- onFault: function (client, ctxt, fault) {
- setDBList("false");
- },
-
- onError: function (client, ctxt, status, errorMsg) {
- setDBList("false");
- }
-};
-//function to get the database list
-function getDbList(argControl) {
- setDBList("false");
- setServerService('xmlrpc/db');
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var xmlRpcClient = getXmlRpc();
- var cmbDbList = document.getElementById(argControl);
-
- xmlRpcClient.asyncCall(listDbHandler,cmbDbList,'list',[],0);
- return [];
-}
-
-
-function check_database() {
- if (getDBList()=="false") {
- if (document.getElementById('DBlist_text').value =='') {
- alert("You Must Enter Database Name.");
- return false;
- }
- return document.getElementById('DBlist_text').value;
- }
- else {
- return document.getElementById('DBlist').value;
- }
-
-}
-
-function connection() {
- callback = check_connection(login_success)
- setPreference('serverdbname', check_database())
- setServer(document.getElementById('txturl').value);
- setUsername(document.getElementById('txtusername').value);
- setPassword(document.getElementById('txtpassword').value);
- login()
-}
-//function to check the login information
-function login_success() {
- alert("login successfull");
- window.close("chrome://openerp_plugin/content/config.xul", "", "chrome");
-}
+++ /dev/null
-function load_createContact() {
- document.getElementById("txtname").value = getSenderName();
- document.getElementById("txtemail").value = getSenderEmail();
- setPartnerId(0);
-}
-
-//function to create the xmlrpc supported variables for xmlrpc request
-function dictcontact(a,b){
- var temp = xmlRpcClient.createType(xmlRpcClient.ARRAY,{});
- for(i=0;i<a.length;i++){
- var strkey = xmlRpcClient.createType(xmlRpcClient.STRING,{});
- strkey.data = a[i]
- var strvalue = xmlRpcClient.createType(xmlRpcClient.STRING,{});
- strvalue.data = b[i]
- var test = xmlRpcClient.createType(xmlRpcClient.ARRAY,{});
- test.AppendElement(strkey);
- test.AppendElement(strvalue);
- temp.AppendElement(test);
- }
- return temp;
-}
-
-function selectPartner(){
- var item = document.getElementById('listPartnerBox').selectedItem
- if(item) {
- var label = item.label;
- setPartnerId(item.value);
- document.getElementById('txtselectpartner').setAttribute('value', label);
- window.opener.document.getElementById('txtselectpartner').setAttribute('value', label);
- }
-}
-
-function clear() {
- setPartnerId(0);
- document.getElementById('txtselectpartner').setAttribute('value', '');
-}
-
-
-//xmlrpc request handler for getting the list of partners
-var listPartnerHandler = {
-
- onResult: function(client, context, result) {
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var arrMethodList = result.QueryInterface(Components.interfaces.nsISupportsArray);
- // Set the number of results
- var count = arrMethodList.Count();
- var close=0;
- clear_search_box('listPartnerBox')
- // Loop through the results, adding items to the list
- var cmbSearchList = document.getElementById('listPartnerBox');
- for (i = 0; i < count; i++) {
- var temp = arrMethodList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
- id = temp.QueryElementAt(0, Components.interfaces.nsISupportsPRInt32);
- name = temp.QueryElementAt(1, Components.interfaces.nsISupportsCString);
- var listItem = document.createElement("listitem");
- cmbSearchList.appendItem(name, id)
- }
-
- },
- onFault: function (client, ctxt, fault) {
- log_message(fault)
- },
-
- onError: function (client, ctxt, status, errorMsg) {
- log_message(errorMsg)
- }
-}
-
-//function to get the list of partners
-function getPartnerList(){
- setServerService('xmlrpc/object');
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var xmlRpcClient = getXmlRpc();
-
- var cmdPartnerList = document.getElementById('listPartnerBox');
-
- var name = document.getElementById('txtselectpartner').value;
- var strDbName = get_rpc_string(xmlRpcClient, getPreference("serverdbname"));
- var struid = get_rpc_int(xmlRpcClient, getPreference('userid', 'INT'));
- var strpass = get_rpc_string(xmlRpcClient, getPreference("password"));
- var strmethod = get_rpc_string(xmlRpcClient, 'list_document_get');
- var strobj = get_rpc_string(xmlRpcClient, 'plugin.handler');
- var strmodel = get_rpc_string(xmlRpcClient, 'res.partner');
- var strname = get_rpc_string(xmlRpcClient, name);
- xmlRpcClient.asyncCall(listPartnerHandler,cmdPartnerList,'execute',[ strDbName,struid,strpass,strobj,strmethod,strmodel, strname ],7);
-}
-
-
-
-//xmlrpc request handler for creating a new contact
-var listCreateContactHandler = {
- onResult: function(client, context, result) {
- res = extract_data(result)
- open_url(res[URL])
- window.close();
- },
- onFault: function (client, ctxt, fault) {
- log_message(fault)
- },
-
- onError: function (client, ctxt, status, errorMsg) {
- log_message(errorMsg)
- }
-}
-
-
-//function to create a new contact
-function createContact(){
- setServerService('xmlrpc/object');
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var xmlRpcClient = getXmlRpc();
- var strDbName = get_rpc_string(xmlRpcClient, getPreference("serverdbname"));
- var struid = get_rpc_int(xmlRpcClient, getPreference('userid', 'INT'));
- var strpass = get_rpc_string(xmlRpcClient, getPreference("password"));
- var strmethod = get_rpc_string(xmlRpcClient, 'list_document_get');
- var strobj = get_rpc_string(xmlRpcClient, 'plugin.handler');
- var strmethod = get_rpc_string(xmlRpcClient, 'contact_create');
- var strpartnerid = get_rpc_int(xmlRpcClient, getPartnerId());
- var a = ['name','email'];
- var b = [document.getElementById("txtname").value, document.getElementById("txtemail").value];
- var arrofarr = dictcontact(a,b);
- xmlRpcClient.asyncCall(listCreateContactHandler,null,'execute',[strDbName,struid,strpass,strobj,strmethod,arrofarr, strpartnerid], 7);
-}
+++ /dev/null
-function load_contact_dialog() {
- log_message("load contact dialog")
- if (getPreference('statutdoc')=='open') {
- document.getElementById('open_document').hidden=false;
- document.getElementById('new').hidden=false;
- document.getElementById('message_label').value="Document found"
- }
- else {
- document.getElementById('open_document').hidden=true;
- document.getElementById('new').hidden=false;
- document.getElementById('message_label').value="Document not found"
- }
-}
+++ /dev/null
-//global array creation and declaration\r
-\r
-var MBstrBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].\r
- getService(Components.interfaces.nsIStringBundleService);\r
-var mboximportbundle = MBstrBundleService.createBundle("chrome://mboximport/locale/mboximport.properties"); \r
-//function to get the required details of the selected email\r
-\r
-function check(fun) {\r
- cb = function() {\r
- if(GetNumSelectedMessages() < 1 || GetNumSelectedMessages() > 1) {\r
- alert("You must select only one mail to archive");\r
- return false\r
- }\r
- return fun()\r
- }\r
- if(getPreference('userid', 'INT') == 0 || getmodule_install() == "no") {\r
- callback = check_connection(cb)\r
- login()\r
- return False\r
- }\r
- \r
- return cb()\r
-\r
-}\r
-\r
-var openPartnerHandler = {\r
- onResult: function(client, context, result) {\r
- res = extract_data(result)\r
- if(res[RES_ID]==0) {\r
- open_window("chrome://openerp_plugin/content/create.xul", 550, 250);\r
- return;\r
- } \r
- open_url(res[URL])\r
- \r
- \r
- \r
- },\r
- onFault: function (client, ctxt, fault) {\r
- log_message(fault);\r
- },\r
-\r
- onError: function (client, ctxt, status, errorMsg) {\r
- log_message(errorMsg)\r
- }\r
-\r
-}\r
-\r
-function searchPartner(email)\r
-{\r
- setServerService('xmlrpc/object');\r
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');\r
-\r
- var xmlRpcClient = getXmlRpc();\r
- var strDbName = get_rpc_string(xmlRpcClient, getPreference("serverdbname"));\r
- var struid = get_rpc_int(xmlRpcClient, getPreference('userid', 'INT'));\r
- var strpass = get_rpc_string(xmlRpcClient, getPreference("password"));\r
- var strobj = get_rpc_string(xmlRpcClient, 'plugin.handler');\r
- var strmethod = get_rpc_string(xmlRpcClient, 'partner_get');\r
- var strname = get_rpc_string(xmlRpcClient, email);\r
- xmlRpcClient.asyncCall(openPartnerHandler,null,'execute',[ strDbName,struid,strpass,strobj,strmethod,strname ],6);\r
-}\r
-\r
-\r
-function open_partner()\r
-{\r
- //gives the selected email uri\r
- var messageUri= gDBView.URIForFirstSelectedMessage;\r
- \r
-\r
- var messenger = Components.classes['@mozilla.org/messenger;1'].createInstance(Components.interfaces.nsIMessenger);\r
-\r
- //gives the selected email object \r
- var message = messenger.messageServiceFromURI(messageUri).messageURIToMsgHdr(messageUri);\r
- //functionality to split the author name and email\r
- if(message.author.charAt(0) == '"'){\r
- sendername = message.author.split('"')[1].split('"')[0];\r
- }\r
- else if(message.author.indexOf('<')!=-1){\r
- sendername = message.author.split('<')[0];\r
- }\r
- else{\r
- sendername = message.author;\r
- }\r
- if(message.author.indexOf('<')!=-1){\r
- senderemail = message.author.split('<')[1].split('>')[0];\r
- }\r
- else{\r
- senderemail = message.author;\r
- }\r
- setPreference('senderemail', senderemail);\r
- setPreference('sendername', sendername);\r
- searchPartner(senderemail);\r
-}\r
-\r
-\r
-var listDocumentHandler = {\r
- onResult: function(client, context, result) {\r
- res = extract_data(result)\r
- \r
- if(res[RES_ID]==0) {\r
- setPreference('statutdoc','create');\r
- }\r
- else {\r
- setPreference('statutdoc', 'open');\r
- setPreference('urldoc', res[URL]);\r
- } \r
- open_window("chrome://openerp_plugin/content/push_dialog.xul", 480, 110); \r
-\r
- },\r
- onFault: function (client, ctxt, fault) {\r
- log_message(fault);\r
- },\r
-\r
- onError: function (client, ctxt, status, errorMsg) {\r
- log_message(errorMsg)\r
- }\r
-} \r
-\r
-function open_document() {\r
- var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);\r
-\r
- //gives the selected email uri\r
- var messageUri = gDBView.URIForFirstSelectedMessage;\r
- \r
- var branchobj = getPref();\r
- \r
- setServerService('xmlrpc/object');\r
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');\r
- \r
- var xmlRpcClient = getXmlRpc();\r
- var strDbName = get_rpc_string(xmlRpcClient, branchobj.getCharPref("serverdbname"));\r
- var struids = get_rpc_int(xmlRpcClient, branchobj.getIntPref('userid'));\r
- var strpass = get_rpc_string(xmlRpcClient, branchobj.getCharPref("password"));\r
- var strmethod = get_rpc_string(xmlRpcClient, 'document_get');\r
- \r
- var strobj = get_rpc_string(xmlRpcClient, 'plugin.handler');\r
- \r
- var eml_string = getMessage(messageUri);\r
- setPreference('email_text', eml_string);\r
- var email = get_rpc_string(xmlRpcClient, eml_string);\r
- xmlRpcClient.asyncCall(listDocumentHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod, email],6);\r
-}\r
+++ /dev/null
-//xmlrpc request handler for list of search object exist in database or not.
-var DocumentTypeHandler = {
- onResult: function(client, context, result) {
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var modelListRPC = result.QueryInterface(Components.interfaces.nsISupportsArray);
-
- var menu_popup = document.getElementById("model_list");
- for(i = 0; i < modelListRPC.Count(); i++) {
- var temp_array = modelListRPC.QueryElementAt(i, Components.interfaces.nsISupportsArray);
- var model_value = temp_array.QueryElementAt(0, Components.interfaces.nsISupportsCString);
- var model_name = temp_array.QueryElementAt(1, Components.interfaces.nsISupportsCString);
- if(i == 0) {
- var menuitem = document.getElementById("first_model_list");
- menuitem.setAttribute("label", model_name);
- menuitem.setAttribute("value", model_value);
- }
- else {
- menu_popup.appendChild(createMenuItem(model_name, model_value));
- }
-
- }
- },
-
- onFault: function (client, ctxt, fault) {
- log_message("Fault getDocument : " + fault)
- },
-
- onError: function (client, ctxt, status, errorMsg) {
- log_message("Error getDocument : " + errorMsg)
- }
-}
-
-//function to create a new attachment record
-function getDocumentType(){
- setServerService('xmlrpc/object');
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var xmlRpcClient = getXmlRpc();
- var strDbName = get_rpc_string(xmlRpcClient, getPreference("serverdbname"));
- var struid = get_rpc_int(xmlRpcClient, getPreference('userid', 'INT'));
- var strpass = get_rpc_string(xmlRpcClient, getPreference("password"));
- var strobj = get_rpc_string(xmlRpcClient, 'plugin.handler');
- var strmethod = get_rpc_string(xmlRpcClient, 'document_type');
- xmlRpcClient.asyncCall(DocumentTypeHandler,null,'execute',[strDbName,struid,strpass,strobj,strmethod], 5);
-}
-
-/**
- * Search Handler : Fill the result of list_document_get in the listbox
- */
-//xmlrpc request handler for getting the search results for the particular selected check box object
-var listSearchCheckboxHandler = {
- onResult: function(client, context, result) {
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var arrMethodList = result.QueryInterface(Components.interfaces.nsISupportsArray);
- // Set the number of results
- var count = arrMethodList.Count();
- var close=0;
- clear_search_box('listSearchBox')
- if(count == 0){
- alert("No Records Found");
- return false;
- }
-
- // Loop through the results, adding items to the list
- var cmbSearchList = document.getElementById('listSearchBox');
-
- for (i = 0; i < count; i++) {
- var temp = arrMethodList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
- id = temp.QueryElementAt(0, Components.interfaces.nsISupportsPRInt32);
- name = temp.QueryElementAt(1, Components.interfaces.nsISupportsCString);
- var listItem = document.createElement("listitem");
- cmbSearchList.appendItem(name, id)
- }
- },
-
- onFault: function (client, ctxt, fault) {
- log_message(fault)
- },
-
- onError: function (client, ctxt, status, errorMsg) {
- log_message(errorMsg)
- }
-};
-
-//function to search the records of selected checkbox object
-function searchCheckbox()
-{
- model_name = document.getElementById('menu_model_list').selectedItem.value;
- name = document.getElementById('txtvalueobj').value
-
- setServerService('xmlrpc/object');
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var xmlRpcClient = getXmlRpc();
- var cmbSearchList = document.getElementById('listSearchBox');
- var strDbName = get_rpc_string(xmlRpcClient, getPreference("serverdbname"));
- var struid = get_rpc_int(xmlRpcClient, getPreference('userid', 'INT'));
- var strpass = get_rpc_string(xmlRpcClient, getPreference("password"));
- var strmethod = get_rpc_string(xmlRpcClient, 'list_document_get');
- var strobj = get_rpc_string(xmlRpcClient, 'plugin.handler');
- var strmodel = get_rpc_string(xmlRpcClient, model_name);
- var strname = get_rpc_string(xmlRpcClient, name);
-
- xmlRpcClient.asyncCall(listSearchCheckboxHandler,cmbSearchList,'execute',[ strDbName,struid,strpass,strobj,strmethod, strmodel, strname],7);
-}
-
-
-
-//xmlrpc request handler for creating the record of mail
-var pushHandler = {
- onResult: function(client, context, result) {
- res = extract_data(result)
- alert(res[ADDITIONAL_INFORMATION])
- open_url(res[URL]);
- window.close();
- },
-
- onFault: function (client, ctxt, fault) {
- log_message(fault)
- },
-
- onError: function (client, ctxt, status, errorMsg) {
- log_message(errorMsg)
- }
-}
-
-
-function push(op) {
- var model_name = document.getElementById('menu_model_list').selectedItem.value;
- var res_id = 0;
- if(op == "add") {
- var item = document.getElementById('listSearchBox').selectedItem
- if (String(item) == "null") {
- alert("select at least one Document !")
- return
- }
-
- var res_id = item.value;
-
- }
- setServerService('xmlrpc/object');
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var xmlRpcClient = getXmlRpc();
-
- var strDbName = get_rpc_string(xmlRpcClient, getPreference("serverdbname"));
- var struid = get_rpc_int(xmlRpcClient, getPreference('userid', 'INT'));
- var strpass = get_rpc_string(xmlRpcClient, getPreference("password"));
- var strmethod = get_rpc_string(xmlRpcClient, 'push_message');
- var strobj = get_rpc_string(xmlRpcClient, 'plugin.handler');
- var stremail = get_rpc_string(xmlRpcClient, getPreference('email_text'));
- var strmodel = get_rpc_string(xmlRpcClient, model_name);
- var strres_id = get_rpc_int(xmlRpcClient, res_id);
- xmlRpcClient.asyncCall(pushHandler,null,'execute',[strDbName,struid,strpass,strobj,strmethod,strmodel, stremail, strres_id],8);
-}
-
-
+++ /dev/null
-/************************************************************
-* OpenERP, Open Source Management Solution
-* Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Affero General Public License as
-* published by the Free Software Foundation, either version 3 of the
-* License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Affero General Public License for more details.
-*
-* You should have received a copy of the GNU Affero General Public License
-* along with this program. If not, see <http://www.gnu.org/licenses/>.
-***************************************************************/
-
-var xmlRpcClient;
-
-//Service name on server like /common,/db etc...
-var strServerService;
-
-
-var uri = new Array();
-var name = new Array();
-var rpc= {
- servers: {},
- addserver: function(name,ip,port,path) {
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- this.servers[name]= {
- ip: ip,
- port: port,
- path: path,
- avaible: true,
- sock: Components.classes['@mozilla.org/xml-rpc/client;1'].createInstance(Components.interfaces.nsIXmlRpcClient)};
- },
- getany: function(rpcval,n) {
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var t = ['PRUint8','PRUint16','PRInt16','PRInt32','PRBool','Char','CString','Float','Double','PRTime','InputStream','Array','Dictionary'];
- for (var i=0; i<t.length; i++)
- try { return [t[i],this.Iget(rpcval,Components.interfaces[((i==10 || i==12)? 'nsI': 'nsISupports')+t[i]],n)]; } catch(e) {}
- return [false,'error getany','Undefined type'];
- },
- onfault: function(t) {
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- return (t.constructor==Array && t.length==3 && !t[0] && (t[1].substr(0,5)=='error' || t[1].substr(0,5)=='fault'))?
- true : false;
- },
- getall: function(rpcval,n) {
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var t = this.getany(rpcval,n);
- if (this.onfault(t)) return t;
- if (t[0]=='PRBool') return (t[1]=='true');
- if (t[0]=='PRInt32') return parseInt(t[1]+'');
- if (t[0]=='PRTime') {
- dte= new Date("January 1, 1970, 00:00:00");
- dte.setUTCMilliseconds(t[1]+'');
- return dte; }
- if (t[0]=='Double' || t[0]=='Float') return parseFloat(t[1]+'');
- if (t[0]=='Char' || t[0]=='CString') return (t[1]+'').replace(/¬/g,'€');
- if (t[0]=='Array') {
- var a=[];
- for (var i=0; i<t[1].Count(); i++) a[i]= this.getall(t[1],i);
- } else if (t[0]=='Dictionary') {
- var a={};
- var keys = t[1].getKeys({});
- for (var k = 0; k < keys.length; k++)
- a[keys[k]]= this.getall(t[1],keys[k]);
- } else return t[1];
- return a;
- },
- Iget: function(rpcval,itype,n) {
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- if (n == undefined) return rpcval.QueryInterface(itype);
- else if (n==parseInt(n)) return rpcval.QueryElementAt(n,itype);
- else return rpcval.getValue(n).QueryInterface(itype);
- },
- checktype: function(val) {
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- if (val != undefined) {
- switch (val.constructor) {
- case Number: return (val==parseInt(val))? 1:4;
- case Boolean: return 2;
- case String: return 3;
- case Date: return 5;
- case Object: return 7;
- case Array: return 6;
-
- }
- }
- return 7;
-
- },
- set: function(rpcobj,param) {
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- if (param==undefined) return [false,'error set','Undefined parameter'];
- var itype= this.checktype(param);
- if (this.onfault(itype)) return itype;
- var p = this.servers[rpcobj].sock.createType(itype,{});
- if (itype==6) {
- if (param.length>0)
- for (var i=0; i<param.length; i++) p.AppendElement( this.set(rpcobj,param[i]) );
- } else if (itype==7) {
- for (var i in param) p.setValue( i, this.set(rpcobj,param[i]) );
- } else if (itype==4) {
- p.data=(''+param).replace(',','.');
- } else p.data=param;
- return p;
- },
- ask: function(rpcobj,method,params,func_out) {
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var a=this.disableNset(rpcobj) ;
- if (this.onfault(a)) return a;
- var handler = {
- onResult: function(client, async, result) {
- rpc.servers[rpcobj].avaible= true;
- func_out(rpc.getall(result)); },
- onFault: function (client, async, faute) {alert("in ask infault"+result)
- rpc.servers[rpcobj].avaible= true; func_out([false,'fault',faute]); },
- onError: function (client, async, status, msg) {
- rpc.servers[rpcobj].avaible= true;
- if (status=='2147500037') {
- status= "no network or no server";
- msg= "1. Check your network connection.";
- msg+= "\n2. Check your server connection parameters:";
- msg+= "\n\t"+rpc.servers[rpcobj].ip+":"+rpc.servers[rpcobj].port+"=>"+params[0];
- msg+= "\n3. Your server may not be launched or connected to the network.";
- }
- func_out([false,'error '+status,msg]);
- } };
- var p = [];
- for (var i=0; i<params.length; i++)
- p[i]= this.set(rpcobj,params[i]);
- try { this.servers[rpcobj].sock.asyncCall(handler, null, method, p, p.length);
- } catch(e) {
- this.servers[rpcobj].avaible= true;
- this.servers[rpcobj].sock= Components.classes['@mozilla.org/xml-rpc/client;1'].createInstance(Components.interfaces.nsIXmlRpcClient) ;
- func_out([false,'error catch',e]); }
- return true;
- },
- disableNset: function(rpcobj) {
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- if (this.servers[rpcobj]) {
- this.servers[rpcobj].avaible= false;//alert('http://'+this.servers[rpcobj].ip+':'+this.servers[rpcobj].port+this.servers[rpcobj].path);
- server_path=this.servers[rpcobj].ip+':'+this.servers[rpcobj].port+this.servers[rpcobj].path
- this.servers[rpcobj].sock.init(server_path);
-
- return true; }
- return [false,'error disableNset','Server vars not set'];
- }
-}
-
-var callback = null;
-
-//Sets the preference service
-function getPref(){
- var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
- var branchobj = prefService.getBranch("extensions.tiny.");
- branchobj.QueryInterface(Components.interfaces.nsIPrefBranch2);
- return branchobj
-}
-
-function getPreference(key, type) {
- if (!type || type == 'STRING') {
- return getPref().getCharPref(key);
- }
- if (type == 'INT') {
- return getPref().getIntPref(key);
- }
-}
-
-function getPreferenceDefault(key, default_value, type) {
- res = getPreference(key, type)
- if (!res || res == "")
- return default_value
- return res
-}
-
-function setPreference(key, value, type) {
-
- if (!type || type == 'STRING') {
- getPref().setCharPref(key, value);
- }
- if (type == 'INT') {
- getPref().setIntPref(key, value);
- }
-}
-
-
-
-function setServerName(server) {
- setPreference('server_name', server)
-}
-
-function getServerName(server) {
- getPreference('server_name')
-}
-
-//set preference value for server port
-function setPort(argPort){
- getPref().setCharPref('serverport',argPort)
-}
-
-//get server port
-function getPort(){
- return getPref().getCharPref('serverport');
-}
-
-
-
-
-//set preference value for server url
-function setServer(argServer){
- getPref().setCharPref('serverurl',argServer);
-}
-
-//set preference value of username for login
-function setUsername(argUsername){
- getPref().setCharPref('username',argUsername);
-}
-
-//set preference value of password for login
-function setPassword(argPassword){
- getPref().setCharPref('password',argPassword);
-}
-
-
-//set server service
-function setServerService(argServerService){
- strServerService = argServerService;
-}
-
-
-
-//set preference value for storing partner id
-function setPartnerId(argPartnerId){
- getPref().setCharPref('partnerid',argPartnerId)
-}
-
-
-//set preference value for storing user id
-function setUserId(argUserId){
- getPref().setIntPref('userid',argUserId);
-}
-
-//set database list is displaye or not
-function setDBList(argDBList){
- getPref().setCharPref('db_list',argDBList)
-}
-
-//set module install or not
-function setmodule_install(argconnect_module){
- getPref().setCharPref('module_install',argconnect_module)
-}
-
-//get module install or not
-function getmodule_install(){
- return getPref().getCharPref('module_install');
-}
-
-
-//get partner id
-function getPartnerId(){
- return getPref().getCharPref('partnerid');
-}
-//get database list is displaye or not
-function getDBList(){
- return getPref().getCharPref('db_list');
-}
-
-//get serverurl
-function getServer(){
- return getPref().getCharPref('serverurl');
-}
-
-
-//get database name
-function getDbName(){
- return getPref().getCharPref('serverdbname');
-}
-
-//get username from config settings
-function getUsername(){
- return getPref().getCharPref('username');
-}
-
-//get password from config settings
-function getPassword(){
- return getPref().getCharPref('password');
-}
-
-//get serverservice
-function getServerService(){
- return strServerService;
-
-}
-
-//get sender email //TO REMOVE
-function getSenderEmail(){
- return getPref().getCharPref('senderemail');
-}
-
-//get sender name //TO REMOVE
-function getSenderName() {
- return getPref().getCharPref('sendername');
-}
-
-//get the whole server path
-function getServerUrl(){
- return getServer()+"/"+getServerService();
-}
-
-
-//Creates and returns and instance of the XML-RPC client
-function getClient() {
- // Enable correct security
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- return Components.classes['@mozilla.org/xml-rpc/client;1'].createInstance(Components.interfaces.nsIXmlRpcClient);
-}
-
-//returns the xmlrpc client instance
-function getXmlRpc() {
- if (!xmlRpcClient) {
- xmlRpcClient = getClient();
- }
- // Initialize the client with the URL
- xmlRpcClient.init(getServerUrl());
- return xmlRpcClient;
-}
-
-
-/**
- * module_install handler
- */
-var listinstallmodulehandler = {
- onResult: function(client, context, result) {
- setmodule_install('yes')
- callback()
- },
- onFault: function (client, ctxt, fault) {
- setmodule_install('no')
- callback()
- },
-
- onError: function (client, ctxt, status, errorMsg) {
- setmodule_install('no')
- callback()
- }
-}
-/**
- * Check is the plugin module is installed
- */
-function module_install()
-{
- setmodule_install("no")
-
- setServerService('xmlrpc/object');
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var xmlRpcClient = getXmlRpc();
-
- var strDbName = get_rpc_string(xmlRpcClient, getPreference("serverdbname"));
- var struid = get_rpc_int(xmlRpcClient, getPreference('userid', 'INT'));
- var strpass = get_rpc_string(xmlRpcClient, getPreference("password"));
- var strmethod = get_rpc_string(xmlRpcClient, "is_installed");
- var strobj = get_rpc_string(xmlRpcClient, "plugin.handler");
- xmlRpcClient.asyncCall(listinstallmodulehandler,null,'execute',[ strDbName,struid,strpass,strobj,strmethod], 5);
-}
-
-
-//xmlrpc request handler for handling the login information
-var listcreateLoginHandler = {
- onResult: function(client, context, result) {
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var login = result.QueryInterface(Components.interfaces.nsISupportsPrimitive)
- if(login.type == 12){
- login = result.QueryInterface(Components.interfaces.nsISupportsPRInt32)
- setUserId(login.data);
- module_install()
- }
- else{
- setUserId(0);
- callback();
- }
- },
- onFault: function (client, ctxt, fault) {
- setUserId(0);
- callback();
- },
-
- onError: function (client, ctxt, status, errorMsg) {
- setUserId(0);
- callback();
- }
-}
-
-
-function login(){
- setServerService('xmlrpc/common');
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var xmlRpcClient = getXmlRpc();
- var strDbName = get_rpc_string(xmlRpcClient, getPreference("serverdbname"));
- var strusername = get_rpc_string(xmlRpcClient, getPreference('username'));
- var strpass = get_rpc_string(xmlRpcClient, getPreference("password"));
- xmlRpcClient.asyncCall(listcreateLoginHandler,null,'login',[strDbName,strusername,strpass],3);
-}
-
-function get_rpc_string(rpc_client, val) {
- var str = rpc_client.createType(rpc_client.STRING,{});
- str.data = val;
- return str;
-}
-
-function get_rpc_int(rpc_client, val) {
- var integer = rpc_client.createType(rpc_client.INT,{});
- integer.data = val;
- return integer;
-}
-
-
-
+++ /dev/null
-function log_message(message) {
- window.dump("[OPENERP-PLUGIN LOG]: " + message + "\n")
-}
-
-function getMessage(uri) {
- var content;
- var MsgService = messenger.messageServiceFromURI(uri);
- var MsgStream = Components.classes["@mozilla.org/network/sync-stream-listener;1"].createInstance();
- var MsgStrem_Inputstream = MsgStream.QueryInterface(Components.interfaces.nsIInputStream);
- var ScriptInput = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance();
- var ScriptInputStream = ScriptInput.QueryInterface(Components.interfaces.nsIScriptableInputStream);
- ScriptInputStream.init(MsgStream);
- try {
- MsgService.streamMessage(uri,MsgStream, msgWindow, null, false, null);
- } catch (ex) {
- return;
- }
- ScriptInputStream .available();
- while (ScriptInputStream .available()) {
- content = content + ScriptInputStream.read(512);
- }
- return content
-
-}
-
-function createMenuItem(aLabel, aValue) {
- const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
- var item = document.createElementNS(XUL_NS, "menuitem"); // create a new XUL menuitem
- item.setAttribute("label", aLabel);
- item.setAttribute("value", aValue);
- return item;
-}
-
-
-function clear_search_box(element) {
- var cmbSearchList = document.getElementById(element);
- count = cmbSearchList.itemCount
- for(i = 1; i <= count; i++) {
- cmbSearchList.removeItemAt(count - i)
- }
-}
-
-function open_url(url) {
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var messenger = Components.classes['@mozilla.org/messenger;1'].createInstance(Components.interfaces.nsIMessenger);
- messenger.launchExternalURL(url);
-}
-
-function extract_data(result) {
- var returnArray = new Array();
-
- netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
- var res = result.QueryInterface(Components.interfaces.nsISupportsArray);
- returnArray[0] = res.QueryElementAt(0, Components.interfaces.nsISupportsCString);
- returnArray[1] = res.QueryElementAt(1, Components.interfaces.nsISupportsPRInt32);
-
- for(i = 2; i < res.Count(); i++) {
- returnArray[i] = res.QueryElementAt(i, Components.interfaces.nsISupportsCString);
- }
- return returnArray
-}
-
-
-var MODEL = 0;
-var RES_ID = 1;
-var URL = 2;
-var ADDITIONAL_INFORMATION = 3
-
-function check_connection(callback) {
- return function () {
- if(getPreference('userid', 'INT') == 0) {
- alert("Server unreachable or login Failed, please check your connection settings")
- return
- }
- else if (getmodule_install() == "no") {
- alert("Please install the thunderbird module on your '" + getDbName() +"' database and try again !");
- return
- }
- return callback()
- }
-}
-
-function open_window(url,width,height) {
- var win = window.open(url, '', 'chrome,width='+width+',height='+height+',resizable=yes');
- var w = ((window.screen.availWidth/2)-(width/2));
- var h=((window.screen.availHeight/2)-(height/2));
- win.moveTo(w,h);
-}
-
-
-
+++ /dev/null
-<?xml version="1.0"?>\r
-<?xml-stylesheet href="chrome://openerp_plugin/skin/overlay.css" type="text/css"?>\r
-<!DOCTYPE overlay SYSTEM "chrome://openerp_plugin/locale/overlay.dtd">\r
-<overlay id="tiny-overlay"\r
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\r
- xmlns:html="http://www.w3.org/1999/xhtml">\r
-<script type="text/javascript" src="chrome://openerp_plugin/content/js/tiny_xmlrpc.js"></script>\r
-<script type="text/javascript" src="chrome://openerp_plugin/content/js/tools.js"></script>\r
-<script type="text/javascript" src="chrome://openerp_plugin/content/js/overlay.js"></script>\r
-\r
-\r
-<menubar id="mail-menubar" >\r
- <menu insertafter="messageMenu" id="menu_openerp" label="&openerpMenu.label;" accesskey="&openerpMenu.accesskey;"> \r
- <menupopup id="taskPopup">\r
- <menuitem id="tiny-openpartner" label="Contact"\r
- oncommand="check(open_partner);"\r
- image="&menuicon.value;"\r
- class="menuitem-iconic"\r
- tooltiptext="&openpartnertooltip.value;"\r
- />\r
-\r
- <menuitem id="tiny-opendocument" label="Documents"\r
- oncommand="check(open_document);"\r
- image="&menuicon.value;"\r
- class="menuitem-iconic"\r
- tooltiptext="&opendocumenttooltip.value;"\r
- />\r
- <menuitem id="tiny-plugin3" label="Configuration"\r
- oncommand="open_window('chrome://openerp_plugin/content/config.xul', 580,500);"\r
- image="&menuicon.settings;"\r
- class="menuitem-iconic"\r
- tooltiptext="&pluginconfig.value;"\r
- />\r
- </menupopup>\r
- </menu>\r
-</menubar>\r
-\r
-\r
-<toolbarpalette id="MailToolbarPalette">\r
- <toolbarbutton id="GA-button2"\r
- class="toolbarbutton-1"\r
- image="&partnericon.value;"\r
- label= "Contact"\r
- oncommand="check(open_partner);"\r
- />\r
-</toolbarpalette>\r
-<toolbarpalette id="MailToolbarPalette">\r
- <toolbarbutton id="GA-button3"\r
- class="toolbarbutton-1"\r
- image="&imagearchive.value;"\r
- label= "Documents"\r
- oncommand="check(open_document);" />\r
-</toolbarpalette> \r
-\r
-</overlay>\r
+++ /dev/null
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
-<?xml-stylesheet href="style.css" type="text/css"?>
-<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/plugin.dtd">
-<window id="pluginwindows" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:html="http://www.w3.org/1999/xhtml"
- title="&title.label;" onload="getDocumentType()" >
-
- <script type="text/javascript" src="chrome://openerp_plugin/content/js/tiny_xmlrpc.js"></script>
- <script type="text/javascript" src="chrome://openerp_plugin/content/js/tools.js"></script>
- <script type="text/javascript" src="chrome://openerp_plugin/content/js/push.js"></script>
- <description></description>
- <vbox>
- <separator class="groove-thin" orient="horizontal"/>
- <grid flex="1">
- <columns>
- <column />
- <column />
- <column flex="1"/>
- </columns>
- <rows>
- <row>
- <label id="lblex3" align="right" control="section" value="&object.label;" class="text-prompt" />
- <menulist id="menu_model_list" >
- <menupopup id="model_list">
- <menuitem id="first_model_list" value="" label=""/>
- </menupopup>
- </menulist>
- </row>
- <row>
- <label id="lblsearch" control="txtvalueobj" value="&search.label;" class="text-prompt"/>
- <textbox id="txtvalueobj" />
- <button label="&bsearch.label;" oncommand="searchCheckbox()" image="&imagesearch.value;" accesskey="s" id="search_button"/>
- </row>
- </rows>
- </grid>
- <hbox >
- <caption label="&document.label;" id="label_box"/>
- </hbox>
- <vbox >
- <listbox height="200" id="listSearchBox" style="border:1px solid red" seltype="multiple">
- <listhead>
- <listheader label="&listSearchBox.header;"/>
- </listhead>
- <listcols>
- <listcol flex="1"/>
- </listcols>
- </listbox>
- </vbox>
- <hbox align="right" >
- <button label="&attach.label;" accesskey="u" image="&imagearchive.value;" oncommand="push('add');"/>
- </hbox>
- <separator class="groove-thin" orient="horizontal"/>
- </vbox>
-
-</window>
+++ /dev/null
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="style.css" type="text/css"?>
-<!-- Extremely recommended to keep this css include!! -->
-<window id="rootWnd" title="push box" onload="load_contact_dialog();"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
- <script type="text/javascript" src="chrome://openerp_plugin/content/js/tiny_xmlrpc.js"></script>
- <script type="text/javascript" src="chrome://openerp_plugin/content/js/tools.js"></script>
- <script type="text/javascript" src="chrome://openerp_plugin/content/js/dialog.js"></script>
- <script type="text/javascript" src="chrome://openerp_plugin/content/js/overlay.js"></script>
- <vbox>
- <hbox height="50">
- <label value="Message" id="message_label" class="text-border"/>
- </hbox>
- <hbox align="right">
- <button label="Cancel" accesskey="c" oncommand="window.close();"/>
- <button id="push" label="Push Email" accesskey="a" oncommand="window.close();open_window('chrome://openerp_plugin/content/push.xul', 500,360);"/>
- <button id="new" label="Create Document" accesskey="d" oncommand="window.close();open_window('chrome://openerp_plugin/content/push_new.xul', 320,100);"/>
- <button id="open_document" label="Open Document" accesskey="o" oncommand="open_url(getPreference('urldoc'));window.close();"/>
- </hbox>
- </vbox>
-</window>
+++ /dev/null
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
-<?xml-stylesheet href="style.css" type="text/css"?>
-<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/plugin.dtd">
-<window id="pluginwindows" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:html="http://www.w3.org/1999/xhtml"
- title="&title.label;" onload="getDocumentType()" >
-
- <script type="text/javascript" src="chrome://openerp_plugin/content/js/tiny_xmlrpc.js"></script>
- <script type="text/javascript" src="chrome://openerp_plugin/content/js/tools.js"></script>
- <script type="text/javascript" src="chrome://openerp_plugin/content/js/push.js"></script>
- <description></description>
- <vbox>
- <separator class="groove-thin" orient="horizontal" width="400"/>
- <grid flex="1">
- <columns>
- <column />
- <column />
- <column flex="1"/>
- </columns>
- <rows>
- <row>
- <label id="lblex3" align="right" width="135" control="section" value="&object.label;" class="text-prompt" />
- <menulist id="menu_model_list" width="150">
- <menupopup id="model_list">
- <menuitem id="first_model_list" value="" label=""/>
- </menupopup>
- </menulist>
- </row>
- </rows>
- </grid>
- <hbox align="right" >
- <button label="&attach.label;" accesskey="u" image="&imagearchive.value;" oncommand="push();"/>
- </hbox>
- <separator class="groove-thin" orient="horizontal" width="480"/>
- </vbox>
-</window>
+++ /dev/null
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
-<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/selectpartner.dtd">
-<window id="partnerwindowsid" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml" onload="getPartnerList()"
- title="&title.label;" height="500" width="375">
-<script type="text/javascript" src="chrome://openerp_plugin/content/js/tiny_xmlrpc.js"></script>
-<script type="text/javascript" src="chrome://openerp_plugin/content/js/tools.js"></script>
-<script type="text/javascript" src="chrome://openerp_plugin/content/js/create.js"></script>
-<groupbox id="gpPartner">
- <hbox>
- <textbox id="txtselectpartner" class="text-prompt"/>
- <spacer width="25"/>
- <button label="&bsearch.label;" image="&imagesearch.value;" oncommand="getPartnerList();"/>
- </hbox>
-</groupbox>
-<listbox id="listPartnerBox" flex="1" rows="5">
- <listhead>
- <listheader label="&listPartnerName.header;"/>
- </listhead>
- <listcols>
- <listcol flex="1"/>
- </listcols>
-</listbox>
-<description></description>
-<hbox>
- <spacer width="45"/>
- <button label="cancel" image="&imagecancel.value;" oncommand="close();" />
- <button label="link" image="&imageok.value;" oncommand="selectPartner();window.close();"/>
-</hbox>
-
-</window>
+++ /dev/null
-.text-prompt {
- padding-top: .25em;
- text-align: right;
-}
-
-.text-border {
- padding: 1em;
- font-size : 1.2em;
- font-weight: bold;
-}
\ No newline at end of file
+++ /dev/null
-<!ENTITY title.label "Open Contact">
-<!ENTITY name.value "Partner Name:">
-<!ENTITY contactname.value "Contact Name:">
-<!ENTITY street.value "Street:">
-<!ENTITY street2.value "Street2:">
-<!ENTITY zip.value "Zip:">
-<!ENTITY city.value "City:">
-<!ENTITY country.value "Country:">
-<!ENTITY state.value "State:">
-<!ENTITY office.value "Office:">
-<!ENTITY fax.value "Fax:">
-<!ENTITY mobile.value "Mobile:">
-<!ENTITY email.value "Email:">
-<!ENTITY emailid.value "Email ID:">
-<!ENTITY communication.value "Communication:">
-<!ENTITY postaladdress.value "Postal Address:">
-<!ENTITY ok.label "Save">
-<!ENTITY partner.label "Create New Contact :">
-<!ENTITY create.label "New Contact">
-<!ENTITY cancel.label "Close">
-<!ENTITY newpartner.label "New Partner">
-<!ENTITY bsearch.label "Search Contact">
-<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
-<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
-<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
-<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
+++ /dev/null
-<!ENTITY title.label "OpenERP Configuration">\r
-<!ENTITY separate.label "Configuration Login for OpenERP!">\r
-<!ENTITY close.label "Close">\r
-<!ENTITY database.label "Database:">\r
-<!ENTITY ok.label "OK">\r
-<!ENTITY connection.label "Connect">\r
-<!ENTITY setconnection.label "Change">\r
-<!ENTITY openconnection.label "Open">\r
-<!ENTITY txturl.label "Server: ">\r
-<!ENTITY txtweburl.label "Server: ">\r
-<!ENTITY txtwebport.label "Port: ">\r
-<!ENTITY image.label "Image : ">\r
-<!ENTITY obj.label "Document : ">\r
-<!ENTITY username.label "Username: ">\r
-<!ENTITY password.label "Password: ">\r
-<!ENTITY setdb.label "Move >">\r
-<!ENTITY getdblist.label "Change">\r
-<!ENTITY gpConnection.label "Connection Parameters">\r
-<!ENTITY webConnection.label "Webserver Parameters">\r
-<!ENTITY listDBListBox.header "Available DBs">\r
-<!ENTITY listDocument.header "Document">\r
-<!ENTITY listDocumentListBox.header "Document Name">\r
-<!ENTITY document.label "Document Name : ">\r
-<!ENTITY documentcreate.label "Add">\r
-<!--<!ENTITY objectdelete.label "Delete Selected Object From The List"> -->\r
-<!ENTITY documentdelete.label "Delete">\r
-<!ENTITY gpArchive.label "Archived Email Attachment Options">\r
-<!ENTITY rdAlwaysAttached.label "Always Send Email Attachments to OpenERP">\r
-<!ENTITY rdPromptAttached.label "Prompt Before Sending Email Attachments">\r
-<!ENTITY rdNeverAttached.label "Never Send Email attachments to OpenERP">\r
-<!ENTITY reserve.value "Copyright © 2006-TODAY OpenERP SA All Rights Reserved.\r
-OpenERP is a trademark of the OpenERP SA Company. OpenERP Web is jointly developed by OpenERP SA and Axelor.\n\r
-Licenced under the terms of OpenERP Public License (OEPL) v1.1 ">\r
-<!ENTITY openerp.value "http://www.openerp.com/">\r
-<!ENTITY axelor.value "http://www.axelor.com">\r
-<!ENTITY tinyerp.value "http://tiny.be/">\r
-\r
-<!ENTITY openerp.paresent "This Thunderbird Plugin for OpenERP presently (2010-today) developed by OpenERP SA.">\r
-\r
-<!ENTITY openerp_s.value "OpenERP">\r
-<!ENTITY axelor_s.value "The Axelor Company">\r
-<!ENTITY tinyerp_s.value "The Tiny Company">\r
-\r
-<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">\r
-<!ENTITY gpAbout.label "OpenERP Thunderbird Plugin :">\r
-<!ENTITY develop.value "Based on original work, copyright 2003-2009, by Tiny & Axelor ">\r
-<!ENTITY information.value "For more information, please visit our website">\r
-<!ENTITY contact.label "Contact Us">\r
-<!ENTITY contact.value "info@axelor.com">\r
-<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">\r
-<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">\r
-<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">\r
-<!ENTITY imagemove.value "chrome://openerp_plugin/skin/Move.gif">\r
-<!ENTITY imagemoveleft.value "chrome://openerp_plugin/skin/MoveLeft.png">\r
-<!ENTITY imagemovedown.value "chrome://openerp_plugin/skin/MoveDown.png">\r
-<!ENTITY addfile.label "Load Image">\r
+++ /dev/null
-<!ENTITY lblurl.label " Server: ">\r
-<!ENTITY lblport.label " Port: ">\r
-<!ENTITY lblheading.label "Openerp Connection">\r
-<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">\r
-<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">\r
-<!ENTITY lblprotocol.label "Protocol Connection: ">\r
+++ /dev/null
-<!ENTITY title.label "Create a new Contact">
-<!ENTITY name.value "Contact Name:">
-<!ENTITY street.value "Street:">
-<!ENTITY street2.value "Street2:">
-<!ENTITY zip.value "Zip:">
-<!ENTITY city.value "City:">
-<!ENTITY country.value "Country:">
-<!ENTITY state.value "State:">
-<!ENTITY office.value "Office:">
-<!ENTITY fax.value "Fax:">
-<!ENTITY mobile.value "Mobile:">
-<!ENTITY email.value "Email:">
-<!ENTITY communication.value "Communication:">
-<!ENTITY postaladdress.value "Postal Address:">
-
-
-<!ENTITY selectpartner.value "Partner:">
-<!ENTITY listEmail.header "Email">
-<!ENTITY listName.header "Name">
-<!ENTITY bsearch.label "Search">
-<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">
-<!ENTITY cbxarchive.label "Archive">
-<!ENTITY ok.label "Save">
-<!ENTITY cancel.label "Close">
-<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
-<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
-<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
-
-<!ENTITY title.label "Select Partner">
-<!ENTITY listPartnerName.header "Partner Name">
-<!ENTITY bsearch.label "Search">
-<!ENTITY create.label "Create">
-<!ENTITY select.label "Select">
-<!ENTITY cancel.label "Close">
-<!ENTITY reload.label "Reload">
-<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
-<!ENTITY imagereload.value "chrome://openerp_plugin/skin/Archive.png">
+++ /dev/null
-nomboxfile=není mbox souborem
-folderexists=Není možné importovat: složka se stejným názvem již existuje
-fileexists=Není možné importovat: soubor se stejným názvem již existuje
-nowritable=Není možné importovat: nemáte právo zápisu do složky
-exportOK=Export byl úspěšně dokončen
-isNewsgroup=Tato funkce není dostupná: export složky z IMAP účtů nebo diskuzních \nskupin je možný, pouze pokud je nastavené čtení v režimu Offline
-nofolder=Nebyla vybrána žádná cílová složka
-badfolder=Není možné importovat do této složky (typ IMAP nebo diskuzní skupina)
-exportAccount=Export všech složek
-exportFolder=Export složky
-filePickerImport=Výběr souboru k importu
-filePickerExport=Výběr cílové složky
-extensions.{3ed8cc52-86fc-4613-9026-c1ef969da4c3}.description=Umožňuje import a export souborů ve formátu mbox a eml
-virtualfolder=Toto je virtuální složka. Pro export jejich\nzpráv musíte tyto zprávy nejdříve\nzkopírovat do normální složky.
-searchdir=Vyberte složku, ve které budou vyhledány mbox soubory
-confirmimport=Chcete importovat soubor?
-endscan=Konec prohledávání složek
-internalerror=Není možné provést import, protože nastala neznámá chyba
-exportstart=Probíhá export, čekejte prosím...
-exported=Exportovalo se
-msgs=zpráv z
-nosubjectmsg=bez_predmetu
-messsubdir=zprávy
-badfolder2=Není možné importovat do této složky (IMAP nebo diskuzní skupina nebo virtuální složka)
-temp_error=Není možné importovat: nastala chyba při vytváření dočasného souboru
-importEMLstart=Pobíhá import, čekejte prosím...
-numEML=Naimportovány eml soubory:
-CSVseparator=,
-noEML=No eml file found in this directory
-backupWarning=During this operation, the program could be\nunresponsive for some minutes.\nDo you want to go on?\n
-noWaring=Don't show again this warning
+++ /dev/null
-<!ENTITY tinyplugin "Configuration">
-<!ENTITY tinypluginconfig "Push">
-<!ENTITY tinyarchive "Push to OpenERP">
-<!ENTITY imageicon.value "chrome://openerp_plugin/skin/openerp.png">
-<!ENTITY menuicon.settings "chrome://openerp_plugin/skin/settings.png">
-<!ENTITY menuicon.value "chrome://openerp_plugin/skin/openerp.png">
-<!ENTITY partnericon.value "chrome://openerp_plugin/skin/openerp.png">
-<!ENTITY imagearchive.value "chrome://openerp_plugin/skin/openerp.png">
-<!ENTITY tooltip.value "Add To Archive">
-<!ENTITY pluginconfig.value "OpenERP Configuration Settings">
-<!ENTITY pluginconfigvalue.value "Archieve To OpenERP Settings">
-<!ENTITY openerpMenu.label "OpenERP">
-<!ENTITY openerpMenu.accesskey "OE">
-<!ENTITY openpartner.value "Partner">
-<!ENTITY openpartnertooltip.value "Click to Open Partner Realted to Sender Eamil address.">
-<!ENTITY opendocument.value "Document">
-<!ENTITY opendocumenttooltip.value "Click to See the Mail if it is archived to OpenERP.">
-
+++ /dev/null
-<!ENTITY title.label "Push To OpenERP">
-<!ENTITY gptinyobj.label "Link to an Existing Document">
-<!ENTITY newobject.label "Create a New Documents">
-<!ENTITY document.label "Documents">
-<!ENTITY bsearch.label "Search">
-<!ENTITY close.label "Close">
-<!ENTITY attach.label "Push">
-<!ENTITY create.label "New Contact">
-<!ENTITY archive.label "Create">
-<!ENTITY attach.label "Attach">
-<!ENTITY cbxcontact.label "Contact">
-<!ENTITY cbxinvoice.label "Invoice">
-<!ENTITY cbxproject.label "Project">
-<!ENTITY cbxpartner.label "Partner">
-<!ENTITY cbxproduct.label "Product">
-<!ENTITY cbxaccount.label "Account">
-<!ENTITY cbxsale.label "Sale">
-<!ENTITY cbxcase.label "Case">
-<!ENTITY cbxtask.label "Task">
-<!ENTITY cbxselectall.label "Select All">
-<!ENTITY object.label "Type of Document :">
-<!ENTITY partner.label "Create New Contact :">
-<!ENTITY search.label "Search :">
-<!ENTITY listSearchBox.header "Name">
-<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
-<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
-<!ENTITY imagearchive.value "chrome://openerp_plugin/skin/Archive.png">
-<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
-<!ENTITY gptinyobjexe.label "Documents">
-<!ENTITY newcontact.label "Create a New Contact">
-<!ENTITY listSearchBox.header2 "Document Type">
+++ /dev/null
-<!ENTITY title.label "Select Partner">
-<!ENTITY selectpartner.value "Partner">
-<!ENTITY listPartnerName.header "Partner Name">
-<!ENTITY bsearch.label "Search">
-<!ENTITY create.label "Create">
-<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">
-<!ENTITY select.label "Select">
-<!ENTITY cancel.label "Close">
-<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
-<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
-<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
-<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
+++ /dev/null
-menuitem#tiny-plugin {\r
- color: red !important;\r
-}
+++ /dev/null
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla XML-RPC Client component.
- *
- * The Initial Developer of the Original Code is
- * Digital Creations 2, Inc.
- * Portions created by the Initial Developer are Copyright (C) 2000
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Martijn Pieters <mj@digicool.com> (original author)
- * Samuel Sieb <samuel@sieb.net>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-/*
- * nsXmlRpcClient XPCOM component
- * Version: $Revision: 1.39 $
- *
- * $Id: nsXmlRpcClient.js,v 1.39 2006/10/24 16:02:01 silver%warwickcompsoc.co.uk Exp $
- */
-
-/*
- * Constants
- */
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-const XMLRPCCLIENT_CONTRACTID = '@mozilla.org/xml-rpc/client;1';
-const XMLRPCCLIENT_CID =
- Components.ID('{4d7d15c0-3747-4f7f-b6b3-792a5ea1a9aa}');
-const XMLRPCCLIENT_IID = Components.interfaces.nsIXmlRpcClient;
-
-const XMLRPCFAULT_CONTRACTID = '@mozilla.org/xml-rpc/fault;1';
-const XMLRPCFAULT_CID =
- Components.ID('{691cb864-0a7e-448c-98ee-4a7f359cf145}');
-const XMLRPCFAULT_IID = Components.interfaces.nsIXmlRpcFault;
-
-const XMLHTTPREQUEST_CONTRACTID = '@mozilla.org/xmlextras/xmlhttprequest;1';
-
-const NSICHANNEL = Components.interfaces.nsIChannel;
-
-const DEBUG = false;
-const DEBUGPARSE = false;
-
-const DOMNode = Components.interfaces.nsIDOMNode;
-/*
- * Class definitions
- */
-
-/* The nsXmlRpcFault class constructor. */
-function nsXmlRpcFault() {}
-
-/* the nsXmlRpcFault class def */
-nsXmlRpcFault.prototype = {
- faultCode: 0,
- faultString: '',
-
- init: function(faultCode, faultString) {
- this.faultCode = faultCode;
- this.faultString = faultString;
- },
-
- toString: function() {
- return '<XML-RPC Fault: (' + this.faultCode + ') ' +
- this.faultString + '>';
- },
-
- // nsISupports interface
- QueryInterface: function(iid) {
- if (!iid.equals(Components.interfaces.nsISupports) &&
- !iid.equals(XMLRPCFAULT_IID))
- throw Components.results.NS_ERROR_NO_INTERFACE;
- return this;
- }
-};
-
-/* The nsXmlRpcClient class constructor. */
-function nsXmlRpcClient() {}
-
-/* the nsXmlRpcClient class def */
-nsXmlRpcClient.prototype = {
- _serverUrl: null,
- _useAuth: false,
-
- classDescription: "nsXmlRpcClient XPCOM component",
- classID: Components.ID("{4d7d15c0-3747-4f7f-b6b3-792a5ea1a9aa}"),
- contractID: "@mozilla.org/xml-rpc/client;1",
-
- init: function(serverURL) {
- this._serverUrl = serverURL;
- this._encoding = "UTF-8";
- },
-
- setAuthentication: function(username, password){
- if ((typeof username == "string") &&
- (typeof password == "string")){
- this._useAuth = true;
- this._username = username;
- this._password = password;
- }
- },
-
- clearAuthentication: function(){
- this._useAuth = false;
- },
-
- setEncoding: function(encoding){
- this._encoding = encoding;
- },
-
- get serverUrl() { return this._serverUrl; },
-
- // Internal copy of the status
- _status: null,
- _listener: null,
-
- asyncCall: function(listener, context, methodName, methodArgs, count) {
- debug('asyncCall');
- // Check for call in progress.
- if (this._inProgress)
- return;
- //throw Components.Exception('Call in progress!');
-
- // Check for the server URL;
- if (!this._serverUrl)
- throw Components.Exception('Not initialized');
-
- this._inProgress = true;
-
- // Clear state.
- this._foundFault = false;
- this._passwordTried = false;
- this._result = null;
- this._fault = null;
- this._status = null;
- this._responseStatus = null;
- this._responseString = null;
- this._listener = listener;
- this._seenStart = false;
- this._context = context;
-
- debug('Arguments: ' + methodArgs);
-
- // Generate request body
- var xmlWriter = new XMLWriter(this._encoding);
- this._generateRequestBody(xmlWriter, methodName, methodArgs);
-
- var requestBody = xmlWriter.data;
-
- debug('Request: ' + requestBody);
-
- this.xmlhttp = Components.classes[XMLHTTPREQUEST_CONTRACTID]
- .createInstance(Components.interfaces.nsIXMLHttpRequest);
- if (this._useAuth) {
- this.xmlhttp.open('POST', this._serverUrl, true,
- this._username, this._password);
- } else {
- this.xmlhttp.open('POST', this._serverUrl);
- }
- this.xmlhttp.onload = this._onload;
- this.xmlhttp.onerror = this._onerror;
- this.xmlhttp.parent = this;
- this.xmlhttp.setRequestHeader('Content-Type','text/xml');
- this.xmlhttp.send(requestBody);
- var chan = this.xmlhttp.channel.QueryInterface(NSICHANNEL);
- chan.notificationCallbacks = this;
- },
-
- _onload: function(e) {
- var result;
- var parent = e.target.parent;
- parent._inProgress = false;
- parent._responseStatus = e.target.status;
- parent._responseString = e.target.statusText;
- if (!e.target.responseXML) {
- if (e.target.status) {
- try {
- parent._listener.onError(parent, parent._context,
- Components.results.NS_ERROR_FAILURE,
- 'Server returned status ' + e.target.status);
- } catch (ex) {
- debug('Exception in listener.onError: ' + ex);
- }
- } else {
- try {
- parent._listener.onError(parent, parent._context,
- Components.results.NS_ERROR_FAILURE,
- 'Unknown network error');
- } catch (ex) {
- debug('Exception in listener.onError: ' + ex);
- }
- }
- return;
- }
- try {
- e.target.responseXML.normalize();
- result = parent.parse(e.target.responseXML);
- } catch (ex) {
- try {
- parent._listener.onError(parent, parent._context,
- ex.result, ex.message);
- } catch (ex) {
- debug('Exception in listener.onError: ' + ex);
- }
- return;
- }
- if (parent._foundFault) {
- parent._fault = result;
- try {
- parent._listener.onFault(parent, parent._context, result);
- } catch(ex) {
- debug('Exception in listener.onFault: ' + ex);
- }
- } else {
- parent._result = result.value;
- try {
- parent._listener.onResult(parent, parent._context,
- result.value);
- } catch (ex) {
- debug('Exception in listener.onResult: ' + ex);
- }
- }
- },
-
- _onerror: function(e) {
- var parent = e.target.parent;
- parent._inProgress = false;
- try {
- parent._listener.onError(parent, parent._context,
- Components.results.NS_ERROR_FAILURE,
- 'Unknown network error');
- } catch (ex) {
- debug('Exception in listener.onError: ' + ex);
- }
- },
-
- _foundFault: false,
-
- _fault: null,
- _result: null,
- _responseStatus: null,
- _responseString: null,
-
- get fault() { return this._fault; },
- get result() { return this._result; },
- get responseStatus() { return this._responseStatus; },
- get responseString() { return this._responseString; },
-
- /* Convenience. Create an appropriate XPCOM object for a given type */
- INT: 1,
- BOOLEAN: 2,
- STRING: 3,
- DOUBLE: 4,
- DATETIME: 5,
- ARRAY: 6,
- STRUCT: 7,
- BASE64: 8, // Not part of nsIXmlRpcClient interface, internal use.
- createType: function(type, uuid) {
- const SUPPORTSID = '@mozilla.org/supports-';
- switch(type) {
- case this.INT:
- uuid.value = Components.interfaces.nsISupportsPRInt32
- return createInstance(SUPPORTSID + 'PRInt32;1',
- 'nsISupportsPRInt32');
-
- case this.BOOLEAN:
- uuid.value = Components.interfaces.nsISupportsPRBool
- return createInstance(SUPPORTSID + 'PRBool;1',
- 'nsISupportsPRBool');
-
- case this.STRING:
- uuid.value = Components.interfaces.nsISupportsCString
- return createInstance(SUPPORTSID + 'cstring;1',
- 'nsISupportsCString');
-
- case this.DOUBLE:
- uuid.value = Components.interfaces.nsISupportsDouble
- return createInstance(SUPPORTSID + 'double;1',
- 'nsISupportsDouble');
-
- case this.DATETIME:
- uuid.value = Components.interfaces.nsISupportsPRTime
- return createInstance(SUPPORTSID + 'PRTime;1',
- 'nsISupportsPRTime');
-
- case this.ARRAY:
- uuid.value = Components.interfaces.nsISupportsArray
- return createInstance(SUPPORTSID + 'array;1',
- 'nsISupportsArray');
-
- case this.STRUCT:
- uuid.value = Components.interfaces.nsIDictionary
- return createInstance('@mozilla.org/dictionary;1',
- 'nsIDictionary');
-
- default: throw Components.Exception('Unsupported type');
- }
- },
-
- // nsISupports interface
- QueryInterface: function(iid) {
- if (!iid.equals(Components.interfaces.nsISupports) &&
- !iid.equals(XMLRPCCLIENT_IID) &&
- !iid.equals(Components.interfaces.nsIInterfaceRequestor))
- throw Components.results.NS_ERROR_NO_INTERFACE;
- return this;
- },
-
- // nsIInterfaceRequester interface
- getInterface: function(iid, result){
- if (iid.equals(Components.interfaces.nsIAuthPrompt)){
- return this;
- }
- Components.returnCode = Components.results.NS_ERROR_NO_INTERFACE;
- return null;
- },
-
- // nsIAuthPrompt interface
- _passwordTried: false,
- promptUsernameAndPassword: function(dialogTitle, text, passwordRealm,
- savePassword, user, pwd){
-
- if (this._useAuth){
- if (this._passwordTried){
- return false;
- }
- user.value = this._username;
- pwd.value = this._password;
- this._passwordTried = true;
- return true;
- }
- return false;
- },
-
- /* Generate the XML-RPC request body */
- _generateRequestBody: function(writer, methodName, methodArgs) {
- writer.startElement('methodCall');
-
- writer.startElement('methodName');
- writer.write(methodName);
- writer.endElement('methodName');
-
- writer.startElement('params');
- for (var i = 0; i < methodArgs.length; i++) {
- writer.startElement('param');
- this._generateArgumentBody(writer, methodArgs[i]);
- writer.endElement('param');
- }
- writer.endElement('params');
-
- writer.endElement('methodCall');
- },
-
- /* Write out a XML-RPC parameter value */
- _generateArgumentBody: function(writer, obj) {
- writer.startElement('value');
- var sType = this._typeOf(obj);
- switch (sType) {
- case 'PRUint8':
- case 'PRUint16':
- case 'PRInt16':
- case 'PRInt32':
- obj=obj.QueryInterface(Components.interfaces['nsISupports' +
- sType]);
- writer.startElement('i4');
- writer.write(obj.toString());
- writer.endElement('i4');
- break;
-
- case 'PRBool':
- obj=obj.QueryInterface(Components.interfaces.nsISupportsPRBool);
- writer.startElement('boolean');
- writer.write(obj.data ? '1' : '0');
- writer.endElement('boolean');
- break;
-
- case 'Char':
- case 'CString':
- obj=obj.QueryInterface(Components.interfaces['nsISupports' +
- sType]);
- writer.startElement('string');
- writer.write(obj.toString());
- writer.endElement('string');
- break;
-
- case 'Float':
- case 'Double':
- obj=obj.QueryInterface(Components.interfaces['nsISupports' +
- sType]);
- writer.startElement('double');
- writer.write(obj.toString());
- writer.endElement('double');
- break;
-
- case 'PRTime':
- obj = obj.QueryInterface(
- Components.interfaces.nsISupportsPRTime);
- var date = new Date(obj.data)
- writer.startElement('dateTime.iso8601');
- writer.write(iso8601Format(date));
- writer.endElement('dateTime.iso8601');
- break;
-
- case 'InputStream':
- obj = obj.QueryInterface(Components.interfaces.nsIInputStream);
- obj = toScriptableStream(obj);
- writer.startElement('base64');
- streamToBase64(obj, writer);
- writer.endElement('base64');
- break;
-
- case 'Array':
- obj = obj.QueryInterface(
- Components.interfaces.nsISupportsArray);
- writer.startElement('array');
- writer.startElement('data');
- for (var i = 0; i < obj.Count(); i++)
- this._generateArgumentBody(writer, obj.GetElementAt(i));
- writer.endElement('data');
- writer.endElement('array');
- break;
-
- case 'Dictionary':
- obj = obj.QueryInterface(Components.interfaces.nsIDictionary);
- writer.startElement('struct');
- var keys = obj.getKeys({});
- for (var k = 0; k < keys.length; k++) {
- writer.startElement('member');
- writer.startElement('name');
- writer.write(keys[k]);
- writer.endElement('name');
- this._generateArgumentBody(writer, obj.getValue(keys[k]));
- writer.endElement('member');
- }
- writer.endElement('struct');
- break;
-
- default:
- throw Components.Exception('Unsupported argument', null, null,
- obj);
- }
-
- writer.endElement('value');
- },
-
- /* Determine type of a nsISupports primitive, array or dictionary. */
- _typeOf: function(obj) {
- // XPConnect alows JS to pass in anything, because we are a regular
- // JS object to it. So we have to test rigorously.
- if (typeof obj != 'object') return 'Unknown';
-
- // Anything else not nsISupports is not allowed.
- if (typeof obj.QueryInterface != 'function') return 'Unknown';
-
- // Now we will have to eliminate by trying all possebilities.
- try {
- obj.QueryInterface(Components.interfaces.nsISupportsPRUint8);
- return 'PRUint8';
- } catch(e) {}
-
- try {
- obj.QueryInterface(Components.interfaces.nsISupportsPRUint16);
- return 'PRUint16';
- } catch(e) {}
-
- try {
- obj.QueryInterface(Components.interfaces.nsISupportsPRInt16);
- return 'PRInt16';
- } catch(e) {}
-
- try {
- obj.QueryInterface(Components.interfaces.nsISupportsPRInt32);
- return 'PRInt32';
- } catch(e) {}
-
- try {
- obj.QueryInterface(Components.interfaces.nsISupportsPRBool);
- return 'PRBool';
- } catch(e) {}
-
- try {
- obj.QueryInterface(Components.interfaces.nsISupportsChar);
- return 'Char';
- } catch(e) {}
-
- try {
- obj.QueryInterface(Components.interfaces.nsISupportsCString);
- return 'CString';
- } catch(e) {}
-
- try {
- obj.QueryInterface(Components.interfaces.nsISupportsFloat);
- return 'Float';
- } catch(e) {}
-
- try {
- obj.QueryInterface(Components.interfaces.nsISupportsDouble);
- return 'Double';
- } catch(e) {}
-
- try {
- obj.QueryInterface(Components.interfaces.nsISupportsPRTime);
- return 'PRTime';
- } catch(e) {}
-
- try {
- obj.QueryInterface(Components.interfaces.nsIInputStream);
- return 'InputStream';
- } catch(e) {}
-
- try {
- obj.QueryInterface(Components.interfaces.nsISupportsArray);
- return 'Array';
- } catch(e) {}
-
- try {
- obj.QueryInterface(Components.interfaces.nsIDictionary);
- return 'Dictionary';
- } catch(e) {}
-
- // Not a supported type
- return 'Unknown';
- },
-
- // Response parsing state
- _valueStack: [],
- _currValue: null,
- _cdata: null,
-
- parse: function(doc) {
- var node = doc.firstChild;
- var result;
- if (node.nodeType == DOMNode.TEXT_NODE)
- node = node.nextSibling;
- if ((node.nodeType != DOMNode.ELEMENT_NODE) ||
- (node.nodeName != 'methodResponse')) {
- throw Components.Exception('Expecting a methodResponse', null, null,
- doc);
- }
- node = node.firstChild;
- if (node.nodeType == DOMNode.TEXT_NODE)
- node = node.nextSibling;
- if (node.nodeType != DOMNode.ELEMENT_NODE)
- throw Components.Exception('Expecting a params or fault', null,
- null, doc);
- if (node.nodeName == 'params') {
- node = node.firstChild;
- if (node.nodeType == DOMNode.TEXT_NODE)
- node = node.nextSibling;
- if ((node.nodeType != DOMNode.ELEMENT_NODE) ||
- (node.nodeName != 'param')) {
- throw Components.Exception('Expecting a param', null, null,
- doc);
- }
- result = this.parseValue(node.firstChild);
- } else if (node.nodeName == 'fault') {
- this._foundFault = true;
- result = this.parseFault(node.firstChild);
- } else {
- throw Components.Exception('Expecting a params or fault', null,
- null, doc);
- }
- debug('Parse finished');
- return result;
- },
-
- parseValue: function(node) {
- var cValue = new Value();
- if (node && (node.nodeType == DOMNode.TEXT_NODE))
- node = node.nextSibling;
- if (!node || (node.nodeType != DOMNode.ELEMENT_NODE) ||
- (node.nodeName != 'value')) {
- throw Components.Exception('Expecting a value', null, null, node);
- }
- node = node.firstChild;
- if (!node)
- return cValue;
- if (node.nodeType == DOMNode.TEXT_NODE){
- if (!node.nextSibling) {
- cValue.value = node.nodeValue;
- return cValue;
- } else {
- node = node.nextSibling;
- }
- }
- if (node.nodeType != DOMNode.ELEMENT_NODE)
- throw Components.Exception('Expecting a value type', null, null,
- node);
- switch (node.nodeName) {
- case 'string':
- cValue.value = this.parseString(node.firstChild);
- break;
- case 'i4':
- case 'int':
- cValue.type = this.INT;
- cValue.value = this.parseString(node.firstChild);
- break;
- case 'boolean':
- cValue.type = this.BOOLEAN;
- cValue.value = this.parseString(node.firstChild);
- break;
- case 'double':
- cValue.type = this.DOUBLE;
- cValue.value = this.parseString(node.firstChild);
- break;
- case 'dateTime.iso8601':
- cValue.type = this.DATETIME;
- cValue.value = this.parseString(node.firstChild);
- break;
- case 'base64':
- cValue.type = this.BASE64;
- cValue.value = this.parseString(node.firstChild);
- break;
- case 'struct':
- cValue.type = this.STRUCT;
- this.parseStruct(cValue, node.firstChild);
- break;
- case 'array':
- cValue.type = this.ARRAY;
- this.parseArray(cValue, node.firstChild);
- break;
- default:
- throw Components.Exception('Expecting a value type', null, null,
- node);
- }
- return cValue;
- },
-
- parseString: function(node) {
- value = '';
- while (node) {
- if (node.nodeType != DOMNode.TEXT_NODE)
- throw Components.Exception('Expecting a text node', null, null,
- node);
- value += node.nodeValue;
- node = node.nextSibling;
- }
- return value;
- },
-
- parseStruct: function(struct, node) {
- while (node) {
- if (node.nodeType == DOMNode.TEXT_NODE)
- node = node.nextSibling;
- if (!node)
- return;
- if ((node.nodeType != DOMNode.ELEMENT_NODE) ||
- (node.nodeName != 'member')) {
- throw Components.Exception('Expecting a member', null, null,
- node);
- }
- this.parseMember(struct, node.firstChild);
- node = node.nextSibling;
- }
- },
-
- parseMember: function(struct, node) {
- var cValue;
- if (node.nodeType == DOMNode.TEXT_NODE)
- node = node.nextSibling;
- if (!node || (node.nodeType != DOMNode.ELEMENT_NODE) ||
- (node.nodeName != 'name')) {
- throw Components.Exception('Expecting a name', null, null, node);
- }
- struct.name = this.parseString(node.firstChild);
- cValue = this.parseValue(node.nextSibling);
- struct.appendValue(cValue.value);
- },
-
- parseArray: function(array, node) {
- if (node.nodeType == DOMNode.TEXT_NODE)
- node = node.nextSibling;
- if (!node || (node.nodeType != DOMNode.ELEMENT_NODE) ||
- (node.nodeName != 'data')) {
- throw Components.Exception('Expecting array data', null, null, node);
- }
- for (node = node.firstChild; node; node = node.nextSibling) {
- if (node.nodeType == DOMNode.TEXT_NODE)
- continue;
- array.appendValue(this.parseValue(node).value);
- }
- },
-
- parseFault: function(node) {
- var fault = createInstance(XMLRPCFAULT_CONTRACTID, 'nsIXmlRpcFault');
- var cValue = this.parseValue(node);
- if ((cValue.type != this.STRUCT) ||
- (!cValue.value.hasKey('faultCode')) ||
- (!cValue.value.hasKey('faultString'))) {
- throw Components.Exception('Invalid fault', null, null, node);
- }
- fault.init(cValue.value.getValue('faultCode').data,
- cValue.value.getValue('faultString').data);
- return fault;
- }
-};
-
-if (XPCOMUtils.generateNSGetFactory)
- var NSGetFactory = XPCOMUtils.generateNSGetFactory([nsXmlRpcClient]);
-else
- var NSGetModule = XPCOMUtils.generateNSGetModule([nsXmlRpcClient]);
-
-
-/* The XMLWriter class constructor */
-function XMLWriter(encoding) {
- if (!encoding)
- encoding = "UTF-8";
- this.data = '<?xml version="1.0" encoding="' + encoding + '"?>';
-}
-
-/* The XMLWriter class def */
-XMLWriter.prototype = {
- data: '',
-
- startElement: function(element) {
- this.data += '<' + element + '>';
- },
-
- endElement: function(element) {
- this.data += '</' + element + '>';
- },
-
- write: function(text) {
- for (var i = 0; i < text.length; i++) {
- var c = text[i];
- switch (c) {
- case '<':
- this.data += '<';
- break;
- case '&':
- this.data += '&';
- break;
- default:
- this.data += c;
- }
- }
- },
-
- markup: function(text) { this.data += text }
-};
-
-/* The Value class contructor */
-function Value() { this.type = this.STRING; };
-
-/* The Value class def */
-Value.prototype = {
- INT: nsXmlRpcClient.prototype.INT,
- BOOLEAN: nsXmlRpcClient.prototype.BOOLEAN,
- STRING: nsXmlRpcClient.prototype.STRING,
- DOUBLE: nsXmlRpcClient.prototype.DOUBLE,
- DATETIME: nsXmlRpcClient.prototype.DATETIME,
- ARRAY: nsXmlRpcClient.prototype.ARRAY,
- STRUCT: nsXmlRpcClient.prototype.STRUCT,
- BASE64: nsXmlRpcClient.prototype.BASE64,
-
- _createType: nsXmlRpcClient.prototype.createType,
-
- name: null,
-
- _value: null,
- get value() { return this._value; },
- set value(val) {
- // accepts [0-9]+ or x[0-9a-fA-F]+ and returns the character.
- function entityTrans(substr, code) {
- return String.fromCharCode("0" + code);
- }
-
- switch (this.type) {
- case this.STRING:
- val = val.replace(/&#([0-9]+);/g, entityTrans);
- val = val.replace(/&#(x[0-9a-fA-F]+);/g, entityTrans);
- val = val.replace(/</g, '<');
- val = val.replace(/>/g, '>');
- val = val.replace(/&/g, '&');
- this._value.data = val;
- break;
-
- case this.BOOLEAN:
- this._value.data = (val == 1);
- break;
-
- case this.DATETIME:
- this._value.data = Date.UTC(val.slice(0, 4),
- val.slice(4, 6) - 1, val.slice(6, 8), val.slice(9, 11),
- val.slice(12, 14), val.slice(15));
- break;
-
- case this.BASE64:
- this._value.data = base64ToString(val);
- break;
-
- default:
- this._value.data = val;
- }
- },
-
- _type: null,
- get type() { return this._type; },
- set type(type) {
- this._type = type;
- if (type == this.BASE64)
- this._value = this._createType(this.STRING, {});
- else this._value = this._createType(type, {});
- },
-
- appendValue: function(val) {
- switch (this.type) {
- case this.ARRAY:
- this.value.AppendElement(val);
- break;
-
- case this.STRUCT:
- this.value.setValue(this.name, val);
- break;
- }
- }
-};
-
-/*
- * Objects
- */
-
-/* nsXmlRpcClient Module (for XPCOM registration) */
-var nsXmlRpcClientModule = {
- registerSelf: function(compMgr, fileSpec, location, type) {
- compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
-
- compMgr.registerFactoryLocation(XMLRPCCLIENT_CID,
- 'XML-RPC Client JS component',
- XMLRPCCLIENT_CONTRACTID,
- fileSpec,
- location,
- type);
- compMgr.registerFactoryLocation(XMLRPCFAULT_CID,
- 'XML-RPC Fault JS component',
- XMLRPCFAULT_CONTRACTID,
- fileSpec,
- location,
- type);
- },
-
- getClassObject: function(compMgr, cid, iid) {
- if (!cid.equals(XMLRPCCLIENT_CID) && !cid.equals(XMLRPCFAULT_CID))
- throw Components.results.NS_ERROR_NO_INTERFACE;
-
- if (!iid.equals(Components.interfaces.nsIFactory))
- throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
-
- if (cid.equals(XMLRPCCLIENT_CID))
- return nsXmlRpcClientFactory
- else return nsXmlRpcFaultFactory;
- },
-
- canUnload: function(compMgr) { return true; }
-};
-
-/* nsXmlRpcClient Class Factory */
-var nsXmlRpcClientFactory = {
- createInstance: function(outer, iid) {
- if (outer != null)
- throw Components.results.NS_ERROR_NO_AGGREGATION;
-
- if (!iid.equals(XMLRPCCLIENT_IID) &&
- !iid.equals(Components.interfaces.nsISupports))
- throw Components.results.NS_ERROR_INVALID_ARG;
-
- return new nsXmlRpcClient();
- }
-}
-
-/* nsXmlRpcFault Class Factory */
-var nsXmlRpcFaultFactory = {
- createInstance: function(outer, iid) {
- if (outer != null)
- throw Components.results.NS_ERROR_NO_AGGREGATION;
-
- if (!iid.equals(XMLRPCFAULT_IID) &&
- !iid.equals(Components.interfaces.nsISupports))
- throw Components.results.NS_ERROR_INVALID_ARG;
-
- return new nsXmlRpcFault();
- }
-}
-
-/*
- * Functions
- */
-/* module initialisation */
-function NSGetModule(comMgr, fileSpec) { return nsXmlRpcClientModule; }
-
-/* Create an instance of the given ContractID, with given interface */
-function createInstance(contractId, intf) {
- return Components.classes[contractId]
- .createInstance(Components.interfaces[intf]);
-}
-
-/* Get a pointer to a service indicated by the ContractID, with given interface */
-function getService(contractId, intf) {
- return Components.classes[contractId]
- .getService(Components.interfaces[intf]);
-}
-
-/* Convert an inputstream to a scriptable inputstream */
-function toScriptableStream(input) {
- var SIStream = Components.Constructor(
- '@mozilla.org/scriptableinputstream;1',
- 'nsIScriptableInputStream', 'init');
- return new SIStream(input);
-}
-
-/* format a Date object into a iso8601 datetime string, UTC time */
-function iso8601Format(date) {
- var datetime = date.getUTCFullYear();
- var month = String(date.getUTCMonth() + 1);
- datetime += (month.length == 1 ? '0' + month : month);
- var day = date.getUTCDate();
- datetime += (day < 10 ? '0' + day : day);
-
- datetime += 'T';
-
- var hour = date.getUTCHours();
- datetime += (hour < 10 ? '0' + hour : hour) + ':';
- var minutes = date.getUTCMinutes();
- datetime += (minutes < 10 ? '0' + minutes : minutes) + ':';
- var seconds = date.getUTCSeconds();
- datetime += (seconds < 10 ? '0' + seconds : seconds);
-
- return datetime;
-}
-
-/* Convert a stream to Base64, writing it away to a string writer */
-const BASE64CHUNK = 255; // Has to be dividable by 3!!
-function streamToBase64(stream, writer) {
- while (stream.available()) {
- var data = [];
- while (data.length < BASE64CHUNK && stream.available()) {
- var d = stream.read(1).charCodeAt(0);
- // reading a 0 results in NaN, compensate.
- data = data.concat(isNaN(d) ? 0 : d);
- }
- writer.write(toBase64(data));
- }
-}
-
-/* Convert data (an array of integers) to a Base64 string. */
-const toBase64Table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' +
- '0123456789+/';
-const base64Pad = '=';
-function toBase64(data) {
- var result = '';
- var length = data.length;
- var i;
- // Convert every three bytes to 4 ascii characters.
- for (i = 0; i < (length - 2); i += 3) {
- result += toBase64Table[data[i] >> 2];
- result += toBase64Table[((data[i] & 0x03) << 4) + (data[i+1] >> 4)];
- result += toBase64Table[((data[i+1] & 0x0f) << 2) + (data[i+2] >> 6)];
- result += toBase64Table[data[i+2] & 0x3f];
- }
-
- // Convert the remaining 1 or 2 bytes, pad out to 4 characters.
- if (length%3) {
- i = length - (length%3);
- result += toBase64Table[data[i] >> 2];
- if ((length%3) == 2) {
- result += toBase64Table[((data[i] & 0x03) << 4) + (data[i+1] >> 4)];
- result += toBase64Table[(data[i+1] & 0x0f) << 2];
- result += base64Pad;
- } else {
- result += toBase64Table[(data[i] & 0x03) << 4];
- result += base64Pad + base64Pad;
- }
- }
-
- return result;
-}
-
-/* Convert Base64 data to a string */
-const toBinaryTable = [
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
- -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,
- 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1, 0,-1,-1,
- -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,
- 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,
- -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
- 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1
-];
-function base64ToString(data) {
- var result = '';
- var leftbits = 0; // number of bits decoded, but yet to be appended
- var leftdata = 0; // bits decoded, but yet to be appended
-
- // Convert one by one.
- for (var i = 0; i < data.length; i++) {
- var c = toBinaryTable[data.charCodeAt(i) & 0x7f];
- var padding = (data[i] == base64Pad);
- // Skip illegal characters and whitespace
- if (c == -1) continue;
-
- // Collect data into leftdata, update bitcount
- leftdata = (leftdata << 6) | c;
- leftbits += 6;
-
- // If we have 8 or more bits, append 8 bits to the result
- if (leftbits >= 8) {
- leftbits -= 8;
- // Append if not padding.
- if (!padding)
- result += String.fromCharCode((leftdata >> leftbits) & 0xff);
- leftdata &= (1 << leftbits) - 1;
- }
- }
-
- // If there are any bits left, the base64 string was corrupted
- if (leftbits)
- throw Components.Exception('Corrupted base64 string');
-
- return result;
-}
-
-if (DEBUG) debug = function(msg) {
- dump(' -- XML-RPC client -- : ' + msg + '\n');
-};
-else debug = function() {}
-
-// vim:sw=4:sr:sta:et:sts:
+++ /dev/null
- pref("network.protocol-handler.app.http","/usr/bin/firefox");
-pref("network.protocol-handler.app.https","/usr/bin/firefox");
-pref("extensions.tiny.serverurl", "http://localhost");
-pref("extensions.tiny.serverport", "8069");
-pref("extensions.tiny.webserverurl", "http://localhost:8080");
-pref("extensions.tiny.webserverport", "8080");
-pref("extensions.tiny.serverdbname", "terp");
-pref("extensions.tiny.username","admin");
-pref("extensions.tiny.password","admin");
-pref("extensions.tiny.senderemail","");
-pref("extensions.tiny.sendername","");
-pref("extensions.tiny.statutdoc","");// add to have a statut to hidde or not the button
-pref("extensions.tiny.message_label","");// add to message in push dialog
-pref("extensions.tiny.receiveremail","");
-pref("extensions.tiny.subject","");
-pref("extensions.tiny.receiveddate","");
-pref("extensions.tiny.partnerid","");
-pref("extensions.tiny.contactid","");
-pref("extensions.tiny.attachvalue","");
-pref("extensions.tiny.cclist","");
-pref("extensions.tiny.messagebody","");
-pref("extensions.tiny.displayName","");
-pref("extensions.tiny.attachmentdata","");
-pref("extensions.tiny.userid",3);
-pref("extensions.tiny.partnername","");
-pref("extensions.tiny.officeno","");
-pref("extensions.tiny.phoneno","");
-pref("extensions.tiny.address","");
-pref("extensions.tiny.listobject","Partner,Account Invoice,Product,Sale Order,Lead and opportunities");
-pref("extensions.tiny.object","res.partner,account.invoice,product.product,sale.order,crm.lead");
-pref("extensions.tiny.imagename","chrome://openerp_plugin/skin/Partner.png,chrome://openerp_plugin/skin/Invoice.png,chrome://openerp_plugin/skin/Product.png,chrome://openerp_plugin/skin/Sale.png,chrome://openerp_plugin/skin/Case.png");
-pref("extensions.tiny.attachmentlength","");
-pref("extensions.tiny.attachment","");
-pref("extensions.tiny.db_list","false");
-pref("extensions.tiny.connect_server","false");
-pref("extensions.tiny.module_install","yes");
-pref("extensions.tiny.serverprotocol", "false");
-
-
-
-pref("mboximport.export.filenames_toascii", false);
-pref("mboximport.export.overwrite", false);
-pref("mboximport.confirm.before_mbox_import", true);
-pref("mboximport.clipboard.always_just_text", false);
-pref("mboximport.export.HTML_as_displayed", false);
-pref("mboximport.exportEML.filename_format", 0);
-pref("mboximport.delay.clean_statusbar", 5000);
-pref("mboximport.subject.max_length", 50);
-pref("mboximport.author.max_length", 50);
-pref("mboximport.recipients.max_length", 50);
-pref("extensions.{3ed8cc52-86fc-4613-9026-c1ef969da4c3}.description", "chrome://mboximport/locale/mboximport.properties");
-pref("mboximport.export.set_filetime", false);
-pref("mboximport.exportEML.use_dir", false);
-pref("mboximport.exportMBOX.use_dir", false);
-pref("mboximport.exportMSG.use_dir", false);
-pref("mboximport.export.filenames_addtime", false);
-pref("mboximport.export_all.warning1", true);
-pref("mboximport.export_all.warning2", true);
-
-pref("mboximport.exportMSG.dir", "/tmp");
-//For debug in console
-pref("browser.dom.window.dump.enabled", true);
-
+++ /dev/null
-// constants
-const APP_DISPLAY_NAME = "OpenERP Thunderbird Plugins";
-const APP_NAME = "OpenERP";
-const APP_VERSION = "1.0";
-const WARNING = "WARNING: You need administrator privileges to install OpenERP Thunderbird Plugin. It will be installed in the application directory for all users.";
-const VERSION_ERROR = "This extension can only be installed in a version higher than 2.0";
-const NOT_WRITABLE_ERROR = "This extension requires write access to the application directory to install properly."
-const locales = [
- "en-US",
- null
-];
-
-// Gecko 1.7 doesn't support custom button labels
-var incompatible = (typeof Install.BUTTON_POS_0 == "undefined");
-if (incompatible)
- alert(VERSION_ERROR);
-
-if (!incompatible) {
- // Check whether all directories can be accessed
- var dirList = [
- getFolder("Components"),
- getFolder(getFolder("Program", "defaults"), "pref")
- ];
- for (var i = 0; i < dirList.length; i++)
- if (!File.isWritable(dirList[i]))
- incompatible = true;
-
- if (incompatible)
- alert(NOT_WRITABLE_ERROR);
-}
-
-if (!incompatible && confirm(WARNING, APP_DISPLAY_NAME)) {
- /* Pre-Install Cleanup (for prior versions) */
-
- // List of files to be checked
- var checkFiles = [
- [getFolder("Components"), "nsXmlRpcClient.js"], // Root component
- [getFolder("Components"), "xml-rpc.xpt"], // Component interface
- ];
-
- // Remove any existing files
- initInstall("pre-install", "/rename", "0.0"); // open dummy-install
- for (var i = 0 ; i < checkFiles.length ; i++) {
- var currentDir = checkFiles[i][0];
- var name = checkFiles[i][1];
- var oldFile = getFolder(currentDir, name);
-
- // Find a name to rename the file into
- var newName = name + "-uninstalled";
- for (var n = 1; File.exists(oldFile) && File.exists(getFolder(currentDir, newName)); n++)
- newName = name + n + "-uninstalled";
-
- if (File.exists(oldFile))
- File.rename(oldFile, newName);
- }
- performInstall(); // commit renamed files
-
- /* Main part of the installation */
-
- var chromeType = DELAYED_CHROME;
-
- var files = [
- ["components/nsXmlRpcClient.js", getFolder("Components")],
- ["components/xml-rpc.xpt", getFolder("Components")],
- ["defaults/preferences/tiny.js", getFolder(getFolder("Program", "defaults"), "pref")],
- ];
-
- // initialize our install
- initInstall(APP_NAME, APP_PACKAGE, APP_VERSION);
-
- // Add files
- for (var i = 0; i < files.length; i++)
- addFile(APP_NAME, APP_VERSION, files[i][0], files[i][1], null);
-
- try {
- var err = registerChrome(CONTENT | chromeType, jar, "content/");
- if (err != SUCCESS)
- throw "Chrome registration for content failed (error code " + err + ").";
-
- err = registerChrome(SKIN | chromeType, jar, "skin/classic/");
- if (err != SUCCESS)
- throw "Chrome registration for skin failed (error code " + err + ").";
-
- for (i = 0; i < locales.length; i++) {
- if (!locales[i])
- continue;
-
- err = registerChrome(LOCALE | chromeType, jar, "locale/" + locales[i] + "/");
- if (err != SUCCESS)
- throw "Chrome registration for " + locales[i] + " locale failed (error code " + err + ").";
- }
-
- var err = performInstall();
- if (err != SUCCESS && err != 999)
- throw "Committing installation failed (error code " + err + ").";
-
- alert("OpenERP Thunderbird Plugin " + APP_VERSION + " is now installed.\n" +
- "It will become active after you restart your browser.");
- }
- catch (ex) {
- alert("Installation failed: " + ex + "\n" +
- "You probably don't have the necessary permissions (log in as system administrator).");
- cancelInstall(err);
- }
-}
+++ /dev/null
-<?xml version="1.0"?>\r
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\r
- xmlns:em="http://www.mozilla.org/2004/em-rdf#">\r
- <Description about="urn:mozilla:install-manifest">\r
- <em:id>thunderbird@openerp.com</em:id>\r
- <em:iconURL>chrome://openerp_plugin/skin/tinyerp-icon.ico</em:iconURL>\r
- <em:name>OpenERP Plugin</em:name>\r
- <em:version>1.0</em:version>\r
- <em:description>OpenERP Thunderbird Integration</em:description>\r
- <em:creator>OpenERP SA</em:creator>\r
- <!-- optional items -->\r
- <em:homepageURL>http://openerp.com</em:homepageURL>\r
- <!-- Thunderbird -->\r
- <em:targetApplication>\r
- <Description>\r
- <em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>\r
- <em:minVersion>2.0</em:minVersion>\r
- <em:maxVersion>9.*</em:maxVersion>\r
- </Description>\r
- </em:targetApplication>\r
- </Description>\r
-</RDF>\r
+++ /dev/null
-make clean
-make
-cp ../openerp_plugin.xpi /home/openerp/
+++ /dev/null
-all: xpi
-
-jar:
- jar cvf chrome/openerp_plugin.jar -C chrome/openerp_plugin/ .
-
-xpi: jar
- zip -r ../openerp_plugin.xpi *
-
-clean:
- rm ../openerp_plugin.xpi
- rm chrome/openerp_plugin.jar
--- /dev/null
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from osv import fields
+from osv import osv
+
+class plugin_thunderbird_installer(osv.osv_memory):
+ _name = 'plugin_thunderbird.installer'
+ _inherit = 'res.config.installer'
+
+ _columns = {
+ 'name':fields.char('File name', size=34),
+ 'pdf_name':fields.char('File name', size=64),
+ 'thunderbird':fields.boolean('Thunderbird Plug-in', help="Allows you to select an object that you would like to add to your email and its attachments."),
+ 'plugin_file':fields.char('Thunderbird Plug-in', size=256, readonly=True, help="Thunderbird plug-in file. Save as this file and install this plug-in in thunderbird."),
+ 'pdf_file':fields.char('Installation Manual', size=264, help="The documentation file :- how to install Thunderbird Plug-in.", readonly=True),
+ 'description':fields.text('Description', readonly=True)
+ }
+
+ _defaults = {
+ 'thunderbird' : True,
+ 'name' : 'openerp_plugin.xpi',
+ 'pdf_file' : 'http://doc.openerp.com/book/2/2_6_Comms/2_6_Comms_thunderbird.html',
+ 'plugin_file' : '/plugin_thunderbird/static/openerp_plugin.xpi',
+ 'description' : """
+Thunderbird plugin installation:
+ 1. Save the Thunderbird plug-in.
+ 2. From the Thunderbird menubar: Tools > Add-ons -> Screwdriver/Wrench Icon -> Install add-on from file...
+ 4. Select the plug-in (the file named openerp_plugin.xpi).
+ 5. Click "Install Now".
+ 6. Restart Thunderbird.
+ 7. From the Thunderbird menubar: OpenERP -> Configuration.
+ 8. Configure your openerp server.
+"""
+ }
+
--- /dev/null
+<openerp>
+ <data>
+
+ <record id="view_thunderbird_installer" model="ir.ui.view">
+ <field name="name">plugin_thunderbird.installer.view</field>
+ <field name="model">plugin_thunderbird.installer</field>
+ <field name="type">form</field>
+ <field name="inherit_id" ref="base.res_config_installer"/>
+ <field name="arch" type="xml">
+ <data>
+ <form position="attributes">
+ <attribute name="string">Install Thunderbird Plug-In</attribute>
+ </form>
+ <separator string="title" position="attributes">
+ <attribute name="string">Install Thunderbird Plug-In</attribute>
+ </separator>
+ <xpath expr="//label[@string='description']" position="attributes">
+ <attribute name="string">This plug-in allows you to link your e-mail to OpenERP's documents. You can attach it to any existing one in OpenERP or create a new one.</attribute>
+ </xpath>
+ <xpath expr="//button[@string='Install Modules']" position="replace">
+ <button colspan="1" icon="gtk-close" special="cancel" string="_Close"/>
+ </xpath>
+ <xpath expr="//button[@string='Cancel']" position="replace">
+ </xpath>
+ <xpath expr="//separator[@string="vsep"]" position="attributes">
+ <attribute name="string"/>
+ <attribute name="rowspan">15</attribute>
+ </xpath>
+ <group colspan="8" position="replace">
+ <group colspan="8" height="450" width="750">
+ <field name="thunderbird" invisible="1"/>
+ <field name="name" invisible="1"/>
+ <field name="pdf_name" invisible="1"/>
+ <newline/>
+
+ <field name="plugin_file" filename="name" widget="url"/>
+ <newline/>
+ <field name="pdf_file" filename="pdf_name" widget="url"/>
+ <newline/>
+ <separator string="Installation and Configuration Steps" colspan="4"/>
+ <field name="description" nolabel="1" colspan="8"/>
+ </group>
+ </group>
+ </data>
+ </field>
+ </record>
+
+ <record id="action_thunderbird_installer" model="ir.actions.act_window">
+ <field name="name">Install Thunderbird Plug-In</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">plugin_thunderbird.installer</field>
+ <field name="view_id" ref="view_thunderbird_installer"/>
+ <field name="view_type">form</field>
+ <field name="view_mode">form</field>
+ <field name="target">new</field>
+ </record>
+ <record id="thunderbird_installer_todo" model="ir.actions.todo">
+ <field name="action_id" ref="action_thunderbird_installer"/>
+ <field name="category_id" ref="base.category_sales_management_config"/>
+ <field name="sequence">3</field>
+ <field name="type">automatic</field>
+ </record>
+
+ <menuitem id="base.menu_base_config_plugins" name="Plugins" parent="base.menu_base_config" sequence="10"/>
+ <menuitem id="menu_base_config_plugins_thunderbird" action="action_thunderbird_installer" parent="base.menu_base_config_plugins" sequence="10"/>
+
+ </data>
+</openerp>
+++ /dev/null
-"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_thunderbird_ir_actions_todo","ir.actions.todo.thunderbird.installer","base.model_ir_actions_todo","base.group_sale_manager",1,0,0,0
--- /dev/null
+interfaces components/xml-rpc.xpt
+component {4d7d15c0-3747-4f7f-b6b3-792a5ea1a9aa} components/nsXmlRpcClient.js
+contract @mozilla.org/xml-rpc/client;1 {4d7d15c0-3747-4f7f-b6b3-792a5ea1a9aa}
+category profile-after-change @mozilla.org/xml-rpc/client;1
+content openerp_plugin jar:chrome/openerp_plugin.jar!/content/
+overlay chrome://messenger/content/messenger.xul chrome://openerp_plugin/content/overlay.xul
+locale openerp_plugin en-US jar:chrome/openerp_plugin.jar!/locale/en-US/
+skin openerp_plugin classic/1.0 jar:chrome/openerp_plugin.jar!/skin/
+#style chrome://global/content/customizeToolbar.xul chrome://openerp_plugin/skin/overlay.css
--- /dev/null
+<?xml version="1.0"?>\r
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>\r
+<?xml-stylesheet href="style.css" type="text/css"?>\r
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/config.dtd">\r
+\r
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\r
+ xmlns:html="http://www.w3.org/1999/xhtml"\r
+ title="&title.label;" onload="load_config_data();" height="500" width="580">\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/js/tiny_xmlrpc.js"></script>\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/js/tools.js"></script>\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/js/config.js"></script>\r
+<tabbox>\r
+ <tabs>\r
+ <tab label="Configuration Settings"/>\r
+ <tab label="About"/>\r
+ </tabs>\r
+ <tabpanels>\r
+ <tabpanel id="configtab">\r
+ <vbox>\r
+ <groupbox id="gpConnection" align ="center" width="530">\r
+ <grid flex="1">\r
+ <columns>\r
+ <column />\r
+ <column />\r
+ <column flex="1"/>\r
+ </columns>\r
+ <rows>\r
+ <row>\r
+ <label align="right" id="url" value="&txturl.label;" width="80" class="text-prompt"/>\r
+ <textbox id="txturl" width="300" readonly="true" />\r
+ <button label="&getdblist.label;" oncommand="openConfigChange();" image="&imagesearch.value;" width="90"/>\r
+ </row>\r
+ <row>\r
+ <label align="right" id="lbldb_list1" control="DBlist" value="&database.label;" width="80" class="text-prompt"/> \r
+ <textbox id="DBlist_text" width="300"/>\r
+ </row>\r
+ <row>\r
+ <label align="right" control="txtusername" value="&username.label;" width="80" class="text-prompt"/>\r
+ <textbox id="txtusername" width="300"/>\r
+ </row>\r
+ <row>\r
+ <label align="right" control="txtpassword" value="&password.label;" width="80" class="text-prompt"/>\r
+ <textbox id="txtpassword" type="password" width="300"/>\r
+ </row>\r
+ </rows>\r
+ </grid>\r
+ \r
+ <separator class="groove-thin" orient="horizontal" width="94"/> \r
+ </groupbox>\r
+ <hbox align="right" >\r
+ <button id="btconnection" label="&connection.label;" oncommand="connection();" image="&imageok.value;" width="100"/>\r
+ </hbox>\r
+ </vbox>\r
+ \r
+ <separator class="groove-thin" orient="horizontal" width="10"/> \r
+ </tabpanel>\r
+ \r
+ <tabpanel id="abouttab">\r
+ <groupbox id="gpAbout" width="570" align="center">\r
+ <caption label="&gpAbout.label;" align="center"/>\r
+\r
+ <vbox style="border:1px solid black" width="560"/>\r
+ <description>&openerp.paresent;</description>\r
+ <image src="chrome://openerp_plugin/skin/logo.png" sizemode="stretch" align="center"/>\r
+\r
+ <description> </description>\r
+ <description> </description>\r
+ <description>&develop.value;</description>\r
+ <image src="chrome://openerp_plugin/skin/developped_by.png" sizemode="stretch" align="center"/>\r
+ <description> </description>\r
+ <description> </description>\r
+ <description>&information.value;</description>\r
+ <description><html:a href="&openerp.value;">&openerp.value;</html:a></description>\r
+ \r
+ <description><html:a href="&axelor.value;">&axelor.value;</html:a></description>\r
+ <description><html:a href="&tinyerp.value;">&tinyerp.value;</html:a></description>\r
+ <description> </description>\r
+ <description> </description>\r
+ <description>Copyright © 2006-TODAY OpenERP SA All Rights Reserved.</description>\r
+ <description>OpenERP is a trademark of the OpenERP SA Company. OpenERP Web is jointly developed by OpenERP SA & Axelor.</description>\r
+ <description>Licenced under the terms of <html:a href="https://tiny.odoo.com/LICENSE.txt"> OpenERP Public License (OEPL) v1.1 (https://tiny.odoo.com/LICENSE.txt)</html:a> </description>\r
+ </groupbox>\r
+ </tabpanel>\r
+ </tabpanels>\r
+</tabbox>\r
+</window>\r
--- /dev/null
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<?xml-stylesheet href="style.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/config_change.dtd">
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml" onload="config_change_load();"
+ title="Openerp Connection" height="190" width="330">
+ <script type="text/javascript" src="chrome://openerp_plugin/content/js/tiny_xmlrpc.js"></script>
+ <script type="text/javascript" src="chrome://openerp_plugin/content/js/tools.js"></script>
+ <script type="text/javascript" src="chrome://openerp_plugin/content/js/config.js"></script>
+ <separator class="groove-thin" orient="horizontal" width="10"/>
+ <grid flex="1">
+ <columns>
+ <column />
+ <column flex="1"/>
+ </columns>
+ <rows>
+ <row>
+ <label id="lblurl" control="txtcurl" value="&lblurl.label;" class="text-prompt"/>
+ <textbox id="txtcurl" width="170" />
+ </row>
+ <row>
+ <label id="lblport" control="txtcport" value="&lblport.label;" class="text-prompt"/>
+ <textbox id="txtcport" width="170" />
+ </row>
+ <row>
+ <label id="dbprotocol" value="&lblprotocol.label;" class="text-prompt" />
+ <menulist id="dbprotocol_list" width="140">
+ <menupopup>
+ <menuitem label="XML-RPC" value="http://"/>
+ <menuitem label="XML-RPCS" value="https://"/>
+ </menupopup>
+ </menulist>
+ </row>
+ </rows>
+ </grid>
+ <hbox align="right">
+ <button label="Close" image="&imagecancel.value;" oncommand="config_close();" />
+ <button label="OK" image="&imageok.value;" oncommand="config_ok()"/>
+ </hbox>
+ <separator class="groove-thin" orient="horizontal" width="10"/>
+</window>
--- /dev/null
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<?xml-stylesheet href="style.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/create.dtd">
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml"
+ title="&title.label;" onload="load_createContact();" id="create_partner_window">
+ <script type="text/javascript" src="chrome://openerp_plugin/content/js/tiny_xmlrpc.js"></script>
+ <script type="text/javascript" src="chrome://openerp_plugin/content/js/tools.js"></script>
+ <script type="text/javascript" src="chrome://openerp_plugin/content/js/create.js"></script>
+ <groupbox id="contact" >
+ <hbox>
+ <textbox class="plain" style="background-color: transparent;" flex="1"
+ multiline="true" readonly="true"
+ onoverflow="this.height = this.inputField.scrollHeight;"
+ value="No existing contact found, you can create a new partner with this contact or link to a existing partner" />
+ </hbox>
+ <hbox>
+ <label align="right" id="partner" value="&selectpartner.value;" width="90" class="text-prompt"/>
+ <textbox id="txtselectpartner" readonly="true" value="" width="170"/>
+ <button label="Link to partner" oncommand="open_window('chrome://openerp_plugin/content/selectpartner.xul', 400, 400);" image="&imagesearch.value;"/>
+ <button label="Clear" oncommand="clear();"/>
+ </hbox>
+ </groupbox>
+ <groupbox id="information" >
+ <caption label="Address Detail" />
+ <grid flex="1">
+ <columns>
+ <column />
+ <column flex="1"/>
+ </columns>
+ <rows>
+ <row>
+ <label align="right" id="name" value="&name.value;" width="90" class="text-prompt"/>
+ <textbox id="txtname" align="right" />
+ </row>
+ <row>
+ <label align="right" id="emailid" value="&email.value;" width="90" class="text-prompt"/>
+ <textbox id="txtemail" align="right"/>
+ </row>
+ </rows>
+ </grid>
+ <separator class="groove-thin" orient="horizontal" width="90"/>
+ </groupbox>
+ <hbox align="right">
+ <button label="cancel" image="&imagecancel.value;" oncommand="close();" />
+ <button label="create partner" image="&imageok.value;" oncommand="createContact();"/>
+ </hbox>
+</window>
--- /dev/null
+function load_config_data() {
+ getDbList('DBlist');
+ document.getElementById("txturl").value = getServer();
+ document.getElementById("txtusername").value = getUsername();
+ document.getElementById("txtpassword").value = getPassword();
+ document.getElementById("DBlist_text").value = getDbName();
+}
+
+function config_close() {
+ window.close("chrome://openerp_plugin/content/config_change.xul", "", "chrome");
+ open_window('chrome://openerp_plugin/content/config.xul', 580,500);
+}
+
+//set the value of the configuration fields
+function config_change_load() {
+ document.getElementById('txtcurl').value = getPreferenceDefault('server_name', 'localhost')
+ document.getElementById('txtcport').value = getPreferenceDefault('serverport', '8069')
+}
+
+
+function config_ok()
+{
+ var protocol = document.getElementById("dbprotocol_list").value
+ if (document.getElementById('txtcurl').value == '' || document.getElementById('txtcport').value == '') {
+ alert("You Must Enter Server Name and a Port!")
+ return false;
+ }
+ setPreference('serverport', document.getElementById('txtcport').value)
+ setPreference('server_name', document.getElementById('txtcurl').value)
+ setServer(document.getElementById("dbprotocol_list").value+document.getElementById('txtcurl').value +":" + document.getElementById('txtcport').value);
+ config_close()
+}
+
+function openConfigChange() {
+ window.close("chrome://openerp_plugin/content/config.xul", "", "chrome");
+ open_window("chrome://openerp_plugin/content/config_change.xul", 350,200);
+}
+
+//xmlrpc request handler for getting the list of database
+var listDbHandler = {
+ onResult: function(client, context, result) {
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var arrMethodList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+ var count = arrMethodList.Count();
+ if (count < 1) {
+ setDBList("false");
+ return
+ }
+
+ setDBList("true");
+ dbname_saved = getPreference("serverdbname")
+
+ var menu1 = document.createElement("menulist");
+ menu1.setAttribute("id","DBlist");
+ menu1.setAttribute("width","300");
+ var menupopup1 = document.createElement("menupopup");
+ menu1.appendChild(menupopup1)
+
+ // Loop through the results, adding items to the list
+ for (i = 0; i < count; i++) {
+ var dbname = arrMethodList.QueryElementAt(i, Components.interfaces.nsISupportsCString).data;
+ menupopup1.appendChild(createMenuItem(dbname, dbname));
+ if (dbname == dbname_saved) {
+ index = i
+ }
+ }
+
+ var db_text_field = document.getElementById("DBlist_text");
+ db_text_field.parentNode.replaceChild(menu1, db_text_field);
+
+ menu1.selectedIndex = index
+ },
+
+
+ onFault: function (client, ctxt, fault) {
+ setDBList("false");
+ },
+
+ onError: function (client, ctxt, status, errorMsg) {
+ setDBList("false");
+ }
+};
+//function to get the database list
+function getDbList(argControl) {
+ setDBList("false");
+ setServerService('xmlrpc/db');
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var xmlRpcClient = getXmlRpc();
+ var cmbDbList = document.getElementById(argControl);
+
+ xmlRpcClient.asyncCall(listDbHandler,cmbDbList,'list',[],0);
+ return [];
+}
+
+
+function check_database() {
+ if (getDBList()=="false") {
+ if (document.getElementById('DBlist_text').value =='') {
+ alert("You Must Enter Database Name.");
+ return false;
+ }
+ return document.getElementById('DBlist_text').value;
+ }
+ else {
+ return document.getElementById('DBlist').value;
+ }
+
+}
+
+function connection() {
+ callback = check_connection(login_success)
+ setPreference('serverdbname', check_database())
+ setServer(document.getElementById('txturl').value);
+ setUsername(document.getElementById('txtusername').value);
+ setPassword(document.getElementById('txtpassword').value);
+ login()
+}
+//function to check the login information
+function login_success() {
+ alert("login successfull");
+ window.close("chrome://openerp_plugin/content/config.xul", "", "chrome");
+}
--- /dev/null
+function load_createContact() {
+ document.getElementById("txtname").value = getSenderName();
+ document.getElementById("txtemail").value = getSenderEmail();
+ setPartnerId(0);
+}
+
+//function to create the xmlrpc supported variables for xmlrpc request
+function dictcontact(a,b){
+ var temp = xmlRpcClient.createType(xmlRpcClient.ARRAY,{});
+ for(i=0;i<a.length;i++){
+ var strkey = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+ strkey.data = a[i]
+ var strvalue = xmlRpcClient.createType(xmlRpcClient.STRING,{});
+ strvalue.data = b[i]
+ var test = xmlRpcClient.createType(xmlRpcClient.ARRAY,{});
+ test.AppendElement(strkey);
+ test.AppendElement(strvalue);
+ temp.AppendElement(test);
+ }
+ return temp;
+}
+
+function selectPartner(){
+ var item = document.getElementById('listPartnerBox').selectedItem
+ if(item) {
+ var label = item.label;
+ setPartnerId(item.value);
+ document.getElementById('txtselectpartner').setAttribute('value', label);
+ window.opener.document.getElementById('txtselectpartner').setAttribute('value', label);
+ }
+}
+
+function clear() {
+ setPartnerId(0);
+ document.getElementById('txtselectpartner').setAttribute('value', '');
+}
+
+
+//xmlrpc request handler for getting the list of partners
+var listPartnerHandler = {
+
+ onResult: function(client, context, result) {
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var arrMethodList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+ // Set the number of results
+ var count = arrMethodList.Count();
+ var close=0;
+ clear_search_box('listPartnerBox')
+ // Loop through the results, adding items to the list
+ var cmbSearchList = document.getElementById('listPartnerBox');
+ for (i = 0; i < count; i++) {
+ var temp = arrMethodList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+ id = temp.QueryElementAt(0, Components.interfaces.nsISupportsPRInt32);
+ name = temp.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+ var listItem = document.createElement("listitem");
+ cmbSearchList.appendItem(name, id)
+ }
+
+ },
+ onFault: function (client, ctxt, fault) {
+ log_message(fault)
+ },
+
+ onError: function (client, ctxt, status, errorMsg) {
+ log_message(errorMsg)
+ }
+}
+
+//function to get the list of partners
+function getPartnerList(){
+ setServerService('xmlrpc/object');
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var xmlRpcClient = getXmlRpc();
+
+ var cmdPartnerList = document.getElementById('listPartnerBox');
+
+ var name = document.getElementById('txtselectpartner').value;
+ var strDbName = get_rpc_string(xmlRpcClient, getPreference("serverdbname"));
+ var struid = get_rpc_int(xmlRpcClient, getPreference('userid', 'INT'));
+ var strpass = get_rpc_string(xmlRpcClient, getPreference("password"));
+ var strmethod = get_rpc_string(xmlRpcClient, 'list_document_get');
+ var strobj = get_rpc_string(xmlRpcClient, 'plugin.handler');
+ var strmodel = get_rpc_string(xmlRpcClient, 'res.partner');
+ var strname = get_rpc_string(xmlRpcClient, name);
+ xmlRpcClient.asyncCall(listPartnerHandler,cmdPartnerList,'execute',[ strDbName,struid,strpass,strobj,strmethod,strmodel, strname ],7);
+}
+
+
+
+//xmlrpc request handler for creating a new contact
+var listCreateContactHandler = {
+ onResult: function(client, context, result) {
+ res = extract_data(result)
+ open_url(res[URL])
+ window.close();
+ },
+ onFault: function (client, ctxt, fault) {
+ log_message(fault)
+ },
+
+ onError: function (client, ctxt, status, errorMsg) {
+ log_message(errorMsg)
+ }
+}
+
+
+//function to create a new contact
+function createContact(){
+ setServerService('xmlrpc/object');
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var xmlRpcClient = getXmlRpc();
+ var strDbName = get_rpc_string(xmlRpcClient, getPreference("serverdbname"));
+ var struid = get_rpc_int(xmlRpcClient, getPreference('userid', 'INT'));
+ var strpass = get_rpc_string(xmlRpcClient, getPreference("password"));
+ var strmethod = get_rpc_string(xmlRpcClient, 'list_document_get');
+ var strobj = get_rpc_string(xmlRpcClient, 'plugin.handler');
+ var strmethod = get_rpc_string(xmlRpcClient, 'contact_create');
+ var strpartnerid = get_rpc_int(xmlRpcClient, getPartnerId());
+ var a = ['name','email'];
+ var b = [document.getElementById("txtname").value, document.getElementById("txtemail").value];
+ var arrofarr = dictcontact(a,b);
+ xmlRpcClient.asyncCall(listCreateContactHandler,null,'execute',[strDbName,struid,strpass,strobj,strmethod,arrofarr, strpartnerid], 7);
+}
--- /dev/null
+function load_contact_dialog() {
+ log_message("load contact dialog")
+ if (getPreference('statutdoc')=='open') {
+ document.getElementById('open_document').hidden=false;
+ document.getElementById('new').hidden=false;
+ document.getElementById('message_label').value="Document found"
+ }
+ else {
+ document.getElementById('open_document').hidden=true;
+ document.getElementById('new').hidden=false;
+ document.getElementById('message_label').value="Document not found"
+ }
+}
--- /dev/null
+//global array creation and declaration\r
+\r
+var MBstrBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].\r
+ getService(Components.interfaces.nsIStringBundleService);\r
+var mboximportbundle = MBstrBundleService.createBundle("chrome://mboximport/locale/mboximport.properties"); \r
+//function to get the required details of the selected email\r
+\r
+function check(fun) {\r
+ cb = function() {\r
+ if(GetNumSelectedMessages() < 1 || GetNumSelectedMessages() > 1) {\r
+ alert("You must select only one mail to archive");\r
+ return false\r
+ }\r
+ return fun()\r
+ }\r
+ if(getPreference('userid', 'INT') == 0 || getmodule_install() == "no") {\r
+ callback = check_connection(cb)\r
+ login()\r
+ return False\r
+ }\r
+ \r
+ return cb()\r
+\r
+}\r
+\r
+var openPartnerHandler = {\r
+ onResult: function(client, context, result) {\r
+ res = extract_data(result)\r
+ if(res[RES_ID]==0) {\r
+ open_window("chrome://openerp_plugin/content/create.xul", 550, 250);\r
+ return;\r
+ } \r
+ open_url(res[URL])\r
+ \r
+ \r
+ \r
+ },\r
+ onFault: function (client, ctxt, fault) {\r
+ log_message(fault);\r
+ },\r
+\r
+ onError: function (client, ctxt, status, errorMsg) {\r
+ log_message(errorMsg)\r
+ }\r
+\r
+}\r
+\r
+function searchPartner(email)\r
+{\r
+ setServerService('xmlrpc/object');\r
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');\r
+\r
+ var xmlRpcClient = getXmlRpc();\r
+ var strDbName = get_rpc_string(xmlRpcClient, getPreference("serverdbname"));\r
+ var struid = get_rpc_int(xmlRpcClient, getPreference('userid', 'INT'));\r
+ var strpass = get_rpc_string(xmlRpcClient, getPreference("password"));\r
+ var strobj = get_rpc_string(xmlRpcClient, 'plugin.handler');\r
+ var strmethod = get_rpc_string(xmlRpcClient, 'partner_get');\r
+ var strname = get_rpc_string(xmlRpcClient, email);\r
+ xmlRpcClient.asyncCall(openPartnerHandler,null,'execute',[ strDbName,struid,strpass,strobj,strmethod,strname ],6);\r
+}\r
+\r
+\r
+function open_partner()\r
+{\r
+ //gives the selected email uri\r
+ var messageUri= gDBView.URIForFirstSelectedMessage;\r
+ \r
+\r
+ var messenger = Components.classes['@mozilla.org/messenger;1'].createInstance(Components.interfaces.nsIMessenger);\r
+\r
+ //gives the selected email object \r
+ var message = messenger.messageServiceFromURI(messageUri).messageURIToMsgHdr(messageUri);\r
+ //functionality to split the author name and email\r
+ if(message.author.charAt(0) == '"'){\r
+ sendername = message.author.split('"')[1].split('"')[0];\r
+ }\r
+ else if(message.author.indexOf('<')!=-1){\r
+ sendername = message.author.split('<')[0];\r
+ }\r
+ else{\r
+ sendername = message.author;\r
+ }\r
+ if(message.author.indexOf('<')!=-1){\r
+ senderemail = message.author.split('<')[1].split('>')[0];\r
+ }\r
+ else{\r
+ senderemail = message.author;\r
+ }\r
+ setPreference('senderemail', senderemail);\r
+ setPreference('sendername', sendername);\r
+ searchPartner(senderemail);\r
+}\r
+\r
+\r
+var listDocumentHandler = {\r
+ onResult: function(client, context, result) {\r
+ res = extract_data(result)\r
+ \r
+ if(res[RES_ID]==0) {\r
+ setPreference('statutdoc','create');\r
+ }\r
+ else {\r
+ setPreference('statutdoc', 'open');\r
+ setPreference('urldoc', res[URL]);\r
+ } \r
+ open_window("chrome://openerp_plugin/content/push_dialog.xul", 480, 110); \r
+\r
+ },\r
+ onFault: function (client, ctxt, fault) {\r
+ log_message(fault);\r
+ },\r
+\r
+ onError: function (client, ctxt, status, errorMsg) {\r
+ log_message(errorMsg)\r
+ }\r
+} \r
+\r
+function open_document() {\r
+ var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);\r
+\r
+ //gives the selected email uri\r
+ var messageUri = gDBView.URIForFirstSelectedMessage;\r
+ \r
+ var branchobj = getPref();\r
+ \r
+ setServerService('xmlrpc/object');\r
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');\r
+ \r
+ var xmlRpcClient = getXmlRpc();\r
+ var strDbName = get_rpc_string(xmlRpcClient, branchobj.getCharPref("serverdbname"));\r
+ var struids = get_rpc_int(xmlRpcClient, branchobj.getIntPref('userid'));\r
+ var strpass = get_rpc_string(xmlRpcClient, branchobj.getCharPref("password"));\r
+ var strmethod = get_rpc_string(xmlRpcClient, 'document_get');\r
+ \r
+ var strobj = get_rpc_string(xmlRpcClient, 'plugin.handler');\r
+ \r
+ var eml_string = getMessage(messageUri);\r
+ setPreference('email_text', eml_string);\r
+ var email = get_rpc_string(xmlRpcClient, eml_string);\r
+ xmlRpcClient.asyncCall(listDocumentHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod, email],6);\r
+}\r
--- /dev/null
+//xmlrpc request handler for list of search object exist in database or not.
+var DocumentTypeHandler = {
+ onResult: function(client, context, result) {
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var modelListRPC = result.QueryInterface(Components.interfaces.nsISupportsArray);
+
+ var menu_popup = document.getElementById("model_list");
+ for(i = 0; i < modelListRPC.Count(); i++) {
+ var temp_array = modelListRPC.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+ var model_value = temp_array.QueryElementAt(0, Components.interfaces.nsISupportsCString);
+ var model_name = temp_array.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+ if(i == 0) {
+ var menuitem = document.getElementById("first_model_list");
+ menuitem.setAttribute("label", model_name);
+ menuitem.setAttribute("value", model_value);
+ }
+ else {
+ menu_popup.appendChild(createMenuItem(model_name, model_value));
+ }
+
+ }
+ },
+
+ onFault: function (client, ctxt, fault) {
+ log_message("Fault getDocument : " + fault)
+ },
+
+ onError: function (client, ctxt, status, errorMsg) {
+ log_message("Error getDocument : " + errorMsg)
+ }
+}
+
+//function to create a new attachment record
+function getDocumentType(){
+ setServerService('xmlrpc/object');
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var xmlRpcClient = getXmlRpc();
+ var strDbName = get_rpc_string(xmlRpcClient, getPreference("serverdbname"));
+ var struid = get_rpc_int(xmlRpcClient, getPreference('userid', 'INT'));
+ var strpass = get_rpc_string(xmlRpcClient, getPreference("password"));
+ var strobj = get_rpc_string(xmlRpcClient, 'plugin.handler');
+ var strmethod = get_rpc_string(xmlRpcClient, 'document_type');
+ xmlRpcClient.asyncCall(DocumentTypeHandler,null,'execute',[strDbName,struid,strpass,strobj,strmethod], 5);
+}
+
+/**
+ * Search Handler : Fill the result of list_document_get in the listbox
+ */
+//xmlrpc request handler for getting the search results for the particular selected check box object
+var listSearchCheckboxHandler = {
+ onResult: function(client, context, result) {
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var arrMethodList = result.QueryInterface(Components.interfaces.nsISupportsArray);
+ // Set the number of results
+ var count = arrMethodList.Count();
+ var close=0;
+ clear_search_box('listSearchBox')
+ if(count == 0){
+ alert("No Records Found");
+ return false;
+ }
+
+ // Loop through the results, adding items to the list
+ var cmbSearchList = document.getElementById('listSearchBox');
+
+ for (i = 0; i < count; i++) {
+ var temp = arrMethodList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
+ id = temp.QueryElementAt(0, Components.interfaces.nsISupportsPRInt32);
+ name = temp.QueryElementAt(1, Components.interfaces.nsISupportsCString);
+ var listItem = document.createElement("listitem");
+ cmbSearchList.appendItem(name, id)
+ }
+ },
+
+ onFault: function (client, ctxt, fault) {
+ log_message(fault)
+ },
+
+ onError: function (client, ctxt, status, errorMsg) {
+ log_message(errorMsg)
+ }
+};
+
+//function to search the records of selected checkbox object
+function searchCheckbox()
+{
+ model_name = document.getElementById('menu_model_list').selectedItem.value;
+ name = document.getElementById('txtvalueobj').value
+
+ setServerService('xmlrpc/object');
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var xmlRpcClient = getXmlRpc();
+ var cmbSearchList = document.getElementById('listSearchBox');
+ var strDbName = get_rpc_string(xmlRpcClient, getPreference("serverdbname"));
+ var struid = get_rpc_int(xmlRpcClient, getPreference('userid', 'INT'));
+ var strpass = get_rpc_string(xmlRpcClient, getPreference("password"));
+ var strmethod = get_rpc_string(xmlRpcClient, 'list_document_get');
+ var strobj = get_rpc_string(xmlRpcClient, 'plugin.handler');
+ var strmodel = get_rpc_string(xmlRpcClient, model_name);
+ var strname = get_rpc_string(xmlRpcClient, name);
+
+ xmlRpcClient.asyncCall(listSearchCheckboxHandler,cmbSearchList,'execute',[ strDbName,struid,strpass,strobj,strmethod, strmodel, strname],7);
+}
+
+
+
+//xmlrpc request handler for creating the record of mail
+var pushHandler = {
+ onResult: function(client, context, result) {
+ res = extract_data(result)
+ alert(res[ADDITIONAL_INFORMATION])
+ open_url(res[URL]);
+ window.close();
+ },
+
+ onFault: function (client, ctxt, fault) {
+ log_message(fault)
+ },
+
+ onError: function (client, ctxt, status, errorMsg) {
+ log_message(errorMsg)
+ }
+}
+
+
+function push(op) {
+ var model_name = document.getElementById('menu_model_list').selectedItem.value;
+ var res_id = 0;
+ if(op == "add") {
+ var item = document.getElementById('listSearchBox').selectedItem
+ if (String(item) == "null") {
+ alert("select at least one Document !")
+ return
+ }
+
+ var res_id = item.value;
+
+ }
+ setServerService('xmlrpc/object');
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var xmlRpcClient = getXmlRpc();
+
+ var strDbName = get_rpc_string(xmlRpcClient, getPreference("serverdbname"));
+ var struid = get_rpc_int(xmlRpcClient, getPreference('userid', 'INT'));
+ var strpass = get_rpc_string(xmlRpcClient, getPreference("password"));
+ var strmethod = get_rpc_string(xmlRpcClient, 'push_message');
+ var strobj = get_rpc_string(xmlRpcClient, 'plugin.handler');
+ var stremail = get_rpc_string(xmlRpcClient, getPreference('email_text'));
+ var strmodel = get_rpc_string(xmlRpcClient, model_name);
+ var strres_id = get_rpc_int(xmlRpcClient, res_id);
+ xmlRpcClient.asyncCall(pushHandler,null,'execute',[strDbName,struid,strpass,strobj,strmethod,strmodel, stremail, strres_id],8);
+}
+
+
--- /dev/null
+/************************************************************
+* OpenERP, Open Source Management Solution
+* Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Affero General Public License as
+* published by the Free Software Foundation, either version 3 of the
+* License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Affero General Public License for more details.
+*
+* You should have received a copy of the GNU Affero General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+***************************************************************/
+
+var xmlRpcClient;
+
+//Service name on server like /common,/db etc...
+var strServerService;
+
+
+var uri = new Array();
+var name = new Array();
+var rpc= {
+ servers: {},
+ addserver: function(name,ip,port,path) {
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ this.servers[name]= {
+ ip: ip,
+ port: port,
+ path: path,
+ avaible: true,
+ sock: Components.classes['@mozilla.org/xml-rpc/client;1'].createInstance(Components.interfaces.nsIXmlRpcClient)};
+ },
+ getany: function(rpcval,n) {
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var t = ['PRUint8','PRUint16','PRInt16','PRInt32','PRBool','Char','CString','Float','Double','PRTime','InputStream','Array','Dictionary'];
+ for (var i=0; i<t.length; i++)
+ try { return [t[i],this.Iget(rpcval,Components.interfaces[((i==10 || i==12)? 'nsI': 'nsISupports')+t[i]],n)]; } catch(e) {}
+ return [false,'error getany','Undefined type'];
+ },
+ onfault: function(t) {
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ return (t.constructor==Array && t.length==3 && !t[0] && (t[1].substr(0,5)=='error' || t[1].substr(0,5)=='fault'))?
+ true : false;
+ },
+ getall: function(rpcval,n) {
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var t = this.getany(rpcval,n);
+ if (this.onfault(t)) return t;
+ if (t[0]=='PRBool') return (t[1]=='true');
+ if (t[0]=='PRInt32') return parseInt(t[1]+'');
+ if (t[0]=='PRTime') {
+ dte= new Date("January 1, 1970, 00:00:00");
+ dte.setUTCMilliseconds(t[1]+'');
+ return dte; }
+ if (t[0]=='Double' || t[0]=='Float') return parseFloat(t[1]+'');
+ if (t[0]=='Char' || t[0]=='CString') return (t[1]+'').replace(/¬/g,'€');
+ if (t[0]=='Array') {
+ var a=[];
+ for (var i=0; i<t[1].Count(); i++) a[i]= this.getall(t[1],i);
+ } else if (t[0]=='Dictionary') {
+ var a={};
+ var keys = t[1].getKeys({});
+ for (var k = 0; k < keys.length; k++)
+ a[keys[k]]= this.getall(t[1],keys[k]);
+ } else return t[1];
+ return a;
+ },
+ Iget: function(rpcval,itype,n) {
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ if (n == undefined) return rpcval.QueryInterface(itype);
+ else if (n==parseInt(n)) return rpcval.QueryElementAt(n,itype);
+ else return rpcval.getValue(n).QueryInterface(itype);
+ },
+ checktype: function(val) {
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ if (val != undefined) {
+ switch (val.constructor) {
+ case Number: return (val==parseInt(val))? 1:4;
+ case Boolean: return 2;
+ case String: return 3;
+ case Date: return 5;
+ case Object: return 7;
+ case Array: return 6;
+
+ }
+ }
+ return 7;
+
+ },
+ set: function(rpcobj,param) {
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ if (param==undefined) return [false,'error set','Undefined parameter'];
+ var itype= this.checktype(param);
+ if (this.onfault(itype)) return itype;
+ var p = this.servers[rpcobj].sock.createType(itype,{});
+ if (itype==6) {
+ if (param.length>0)
+ for (var i=0; i<param.length; i++) p.AppendElement( this.set(rpcobj,param[i]) );
+ } else if (itype==7) {
+ for (var i in param) p.setValue( i, this.set(rpcobj,param[i]) );
+ } else if (itype==4) {
+ p.data=(''+param).replace(',','.');
+ } else p.data=param;
+ return p;
+ },
+ ask: function(rpcobj,method,params,func_out) {
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var a=this.disableNset(rpcobj) ;
+ if (this.onfault(a)) return a;
+ var handler = {
+ onResult: function(client, async, result) {
+ rpc.servers[rpcobj].avaible= true;
+ func_out(rpc.getall(result)); },
+ onFault: function (client, async, faute) {alert("in ask infault"+result)
+ rpc.servers[rpcobj].avaible= true; func_out([false,'fault',faute]); },
+ onError: function (client, async, status, msg) {
+ rpc.servers[rpcobj].avaible= true;
+ if (status=='2147500037') {
+ status= "no network or no server";
+ msg= "1. Check your network connection.";
+ msg+= "\n2. Check your server connection parameters:";
+ msg+= "\n\t"+rpc.servers[rpcobj].ip+":"+rpc.servers[rpcobj].port+"=>"+params[0];
+ msg+= "\n3. Your server may not be launched or connected to the network.";
+ }
+ func_out([false,'error '+status,msg]);
+ } };
+ var p = [];
+ for (var i=0; i<params.length; i++)
+ p[i]= this.set(rpcobj,params[i]);
+ try { this.servers[rpcobj].sock.asyncCall(handler, null, method, p, p.length);
+ } catch(e) {
+ this.servers[rpcobj].avaible= true;
+ this.servers[rpcobj].sock= Components.classes['@mozilla.org/xml-rpc/client;1'].createInstance(Components.interfaces.nsIXmlRpcClient) ;
+ func_out([false,'error catch',e]); }
+ return true;
+ },
+ disableNset: function(rpcobj) {
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ if (this.servers[rpcobj]) {
+ this.servers[rpcobj].avaible= false;//alert('http://'+this.servers[rpcobj].ip+':'+this.servers[rpcobj].port+this.servers[rpcobj].path);
+ server_path=this.servers[rpcobj].ip+':'+this.servers[rpcobj].port+this.servers[rpcobj].path
+ this.servers[rpcobj].sock.init(server_path);
+
+ return true; }
+ return [false,'error disableNset','Server vars not set'];
+ }
+}
+
+var callback = null;
+
+//Sets the preference service
+function getPref(){
+ var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
+ var branchobj = prefService.getBranch("extensions.tiny.");
+ branchobj.QueryInterface(Components.interfaces.nsIPrefBranch2);
+ return branchobj
+}
+
+function getPreference(key, type) {
+ if (!type || type == 'STRING') {
+ return getPref().getCharPref(key);
+ }
+ if (type == 'INT') {
+ return getPref().getIntPref(key);
+ }
+}
+
+function getPreferenceDefault(key, default_value, type) {
+ res = getPreference(key, type)
+ if (!res || res == "")
+ return default_value
+ return res
+}
+
+function setPreference(key, value, type) {
+
+ if (!type || type == 'STRING') {
+ getPref().setCharPref(key, value);
+ }
+ if (type == 'INT') {
+ getPref().setIntPref(key, value);
+ }
+}
+
+
+
+function setServerName(server) {
+ setPreference('server_name', server)
+}
+
+function getServerName(server) {
+ getPreference('server_name')
+}
+
+//set preference value for server port
+function setPort(argPort){
+ getPref().setCharPref('serverport',argPort)
+}
+
+//get server port
+function getPort(){
+ return getPref().getCharPref('serverport');
+}
+
+
+
+
+//set preference value for server url
+function setServer(argServer){
+ getPref().setCharPref('serverurl',argServer);
+}
+
+//set preference value of username for login
+function setUsername(argUsername){
+ getPref().setCharPref('username',argUsername);
+}
+
+//set preference value of password for login
+function setPassword(argPassword){
+ getPref().setCharPref('password',argPassword);
+}
+
+
+//set server service
+function setServerService(argServerService){
+ strServerService = argServerService;
+}
+
+
+
+//set preference value for storing partner id
+function setPartnerId(argPartnerId){
+ getPref().setCharPref('partnerid',argPartnerId)
+}
+
+
+//set preference value for storing user id
+function setUserId(argUserId){
+ getPref().setIntPref('userid',argUserId);
+}
+
+//set database list is displaye or not
+function setDBList(argDBList){
+ getPref().setCharPref('db_list',argDBList)
+}
+
+//set module install or not
+function setmodule_install(argconnect_module){
+ getPref().setCharPref('module_install',argconnect_module)
+}
+
+//get module install or not
+function getmodule_install(){
+ return getPref().getCharPref('module_install');
+}
+
+
+//get partner id
+function getPartnerId(){
+ return getPref().getCharPref('partnerid');
+}
+//get database list is displaye or not
+function getDBList(){
+ return getPref().getCharPref('db_list');
+}
+
+//get serverurl
+function getServer(){
+ return getPref().getCharPref('serverurl');
+}
+
+
+//get database name
+function getDbName(){
+ return getPref().getCharPref('serverdbname');
+}
+
+//get username from config settings
+function getUsername(){
+ return getPref().getCharPref('username');
+}
+
+//get password from config settings
+function getPassword(){
+ return getPref().getCharPref('password');
+}
+
+//get serverservice
+function getServerService(){
+ return strServerService;
+
+}
+
+//get sender email //TO REMOVE
+function getSenderEmail(){
+ return getPref().getCharPref('senderemail');
+}
+
+//get sender name //TO REMOVE
+function getSenderName() {
+ return getPref().getCharPref('sendername');
+}
+
+//get the whole server path
+function getServerUrl(){
+ return getServer()+"/"+getServerService();
+}
+
+
+//Creates and returns and instance of the XML-RPC client
+function getClient() {
+ // Enable correct security
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ return Components.classes['@mozilla.org/xml-rpc/client;1'].createInstance(Components.interfaces.nsIXmlRpcClient);
+}
+
+//returns the xmlrpc client instance
+function getXmlRpc() {
+ if (!xmlRpcClient) {
+ xmlRpcClient = getClient();
+ }
+ // Initialize the client with the URL
+ xmlRpcClient.init(getServerUrl());
+ return xmlRpcClient;
+}
+
+
+/**
+ * module_install handler
+ */
+var listinstallmodulehandler = {
+ onResult: function(client, context, result) {
+ setmodule_install('yes')
+ callback()
+ },
+ onFault: function (client, ctxt, fault) {
+ setmodule_install('no')
+ callback()
+ },
+
+ onError: function (client, ctxt, status, errorMsg) {
+ setmodule_install('no')
+ callback()
+ }
+}
+/**
+ * Check is the plugin module is installed
+ */
+function module_install()
+{
+ setmodule_install("no")
+
+ setServerService('xmlrpc/object');
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var xmlRpcClient = getXmlRpc();
+
+ var strDbName = get_rpc_string(xmlRpcClient, getPreference("serverdbname"));
+ var struid = get_rpc_int(xmlRpcClient, getPreference('userid', 'INT'));
+ var strpass = get_rpc_string(xmlRpcClient, getPreference("password"));
+ var strmethod = get_rpc_string(xmlRpcClient, "is_installed");
+ var strobj = get_rpc_string(xmlRpcClient, "plugin.handler");
+ xmlRpcClient.asyncCall(listinstallmodulehandler,null,'execute',[ strDbName,struid,strpass,strobj,strmethod], 5);
+}
+
+
+//xmlrpc request handler for handling the login information
+var listcreateLoginHandler = {
+ onResult: function(client, context, result) {
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var login = result.QueryInterface(Components.interfaces.nsISupportsPrimitive)
+ if(login.type == 12){
+ login = result.QueryInterface(Components.interfaces.nsISupportsPRInt32)
+ setUserId(login.data);
+ module_install()
+ }
+ else{
+ setUserId(0);
+ callback();
+ }
+ },
+ onFault: function (client, ctxt, fault) {
+ setUserId(0);
+ callback();
+ },
+
+ onError: function (client, ctxt, status, errorMsg) {
+ setUserId(0);
+ callback();
+ }
+}
+
+
+function login(){
+ setServerService('xmlrpc/common');
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var xmlRpcClient = getXmlRpc();
+ var strDbName = get_rpc_string(xmlRpcClient, getPreference("serverdbname"));
+ var strusername = get_rpc_string(xmlRpcClient, getPreference('username'));
+ var strpass = get_rpc_string(xmlRpcClient, getPreference("password"));
+ xmlRpcClient.asyncCall(listcreateLoginHandler,null,'login',[strDbName,strusername,strpass],3);
+}
+
+function get_rpc_string(rpc_client, val) {
+ var str = rpc_client.createType(rpc_client.STRING,{});
+ str.data = val;
+ return str;
+}
+
+function get_rpc_int(rpc_client, val) {
+ var integer = rpc_client.createType(rpc_client.INT,{});
+ integer.data = val;
+ return integer;
+}
+
+
+
--- /dev/null
+function log_message(message) {
+ window.dump("[OPENERP-PLUGIN LOG]: " + message + "\n")
+}
+
+function getMessage(uri) {
+ var content;
+ var MsgService = messenger.messageServiceFromURI(uri);
+ var MsgStream = Components.classes["@mozilla.org/network/sync-stream-listener;1"].createInstance();
+ var MsgStrem_Inputstream = MsgStream.QueryInterface(Components.interfaces.nsIInputStream);
+ var ScriptInput = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance();
+ var ScriptInputStream = ScriptInput.QueryInterface(Components.interfaces.nsIScriptableInputStream);
+ ScriptInputStream.init(MsgStream);
+ try {
+ MsgService.streamMessage(uri,MsgStream, msgWindow, null, false, null);
+ } catch (ex) {
+ return;
+ }
+ ScriptInputStream .available();
+ while (ScriptInputStream .available()) {
+ content = content + ScriptInputStream.read(512);
+ }
+ return content
+
+}
+
+function createMenuItem(aLabel, aValue) {
+ const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+ var item = document.createElementNS(XUL_NS, "menuitem"); // create a new XUL menuitem
+ item.setAttribute("label", aLabel);
+ item.setAttribute("value", aValue);
+ return item;
+}
+
+
+function clear_search_box(element) {
+ var cmbSearchList = document.getElementById(element);
+ count = cmbSearchList.itemCount
+ for(i = 1; i <= count; i++) {
+ cmbSearchList.removeItemAt(count - i)
+ }
+}
+
+function open_url(url) {
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var messenger = Components.classes['@mozilla.org/messenger;1'].createInstance(Components.interfaces.nsIMessenger);
+ messenger.launchExternalURL(url);
+}
+
+function extract_data(result) {
+ var returnArray = new Array();
+
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
+ var res = result.QueryInterface(Components.interfaces.nsISupportsArray);
+ returnArray[0] = res.QueryElementAt(0, Components.interfaces.nsISupportsCString);
+ returnArray[1] = res.QueryElementAt(1, Components.interfaces.nsISupportsPRInt32);
+
+ for(i = 2; i < res.Count(); i++) {
+ returnArray[i] = res.QueryElementAt(i, Components.interfaces.nsISupportsCString);
+ }
+ return returnArray
+}
+
+
+var MODEL = 0;
+var RES_ID = 1;
+var URL = 2;
+var ADDITIONAL_INFORMATION = 3
+
+function check_connection(callback) {
+ return function () {
+ if(getPreference('userid', 'INT') == 0) {
+ alert("Server unreachable or login Failed, please check your connection settings")
+ return
+ }
+ else if (getmodule_install() == "no") {
+ alert("Please install the thunderbird module on your '" + getDbName() +"' database and try again !");
+ return
+ }
+ return callback()
+ }
+}
+
+function open_window(url,width,height) {
+ var win = window.open(url, '', 'chrome,width='+width+',height='+height+',resizable=yes');
+ var w = ((window.screen.availWidth/2)-(width/2));
+ var h=((window.screen.availHeight/2)-(height/2));
+ win.moveTo(w,h);
+}
+
+
+
--- /dev/null
+<?xml version="1.0"?>\r
+<?xml-stylesheet href="chrome://openerp_plugin/skin/overlay.css" type="text/css"?>\r
+<!DOCTYPE overlay SYSTEM "chrome://openerp_plugin/locale/overlay.dtd">\r
+<overlay id="tiny-overlay"\r
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\r
+ xmlns:html="http://www.w3.org/1999/xhtml">\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/js/tiny_xmlrpc.js"></script>\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/js/tools.js"></script>\r
+<script type="text/javascript" src="chrome://openerp_plugin/content/js/overlay.js"></script>\r
+\r
+\r
+<menubar id="mail-menubar" >\r
+ <menu insertafter="messageMenu" id="menu_openerp" label="&openerpMenu.label;" accesskey="&openerpMenu.accesskey;"> \r
+ <menupopup id="taskPopup">\r
+ <menuitem id="tiny-openpartner" label="Contact"\r
+ oncommand="check(open_partner);"\r
+ image="&menuicon.value;"\r
+ class="menuitem-iconic"\r
+ tooltiptext="&openpartnertooltip.value;"\r
+ />\r
+\r
+ <menuitem id="tiny-opendocument" label="Documents"\r
+ oncommand="check(open_document);"\r
+ image="&menuicon.value;"\r
+ class="menuitem-iconic"\r
+ tooltiptext="&opendocumenttooltip.value;"\r
+ />\r
+ <menuitem id="tiny-plugin3" label="Configuration"\r
+ oncommand="open_window('chrome://openerp_plugin/content/config.xul', 580,500);"\r
+ image="&menuicon.settings;"\r
+ class="menuitem-iconic"\r
+ tooltiptext="&pluginconfig.value;"\r
+ />\r
+ </menupopup>\r
+ </menu>\r
+</menubar>\r
+\r
+\r
+<toolbarpalette id="MailToolbarPalette">\r
+ <toolbarbutton id="GA-button2"\r
+ class="toolbarbutton-1"\r
+ image="&partnericon.value;"\r
+ label= "Contact"\r
+ oncommand="check(open_partner);"\r
+ />\r
+</toolbarpalette>\r
+<toolbarpalette id="MailToolbarPalette">\r
+ <toolbarbutton id="GA-button3"\r
+ class="toolbarbutton-1"\r
+ image="&imagearchive.value;"\r
+ label= "Documents"\r
+ oncommand="check(open_document);" />\r
+</toolbarpalette> \r
+\r
+</overlay>\r
--- /dev/null
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<?xml-stylesheet href="style.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/plugin.dtd">
+<window id="pluginwindows" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml"
+ title="&title.label;" onload="getDocumentType()" >
+
+ <script type="text/javascript" src="chrome://openerp_plugin/content/js/tiny_xmlrpc.js"></script>
+ <script type="text/javascript" src="chrome://openerp_plugin/content/js/tools.js"></script>
+ <script type="text/javascript" src="chrome://openerp_plugin/content/js/push.js"></script>
+ <description></description>
+ <vbox>
+ <separator class="groove-thin" orient="horizontal"/>
+ <grid flex="1">
+ <columns>
+ <column />
+ <column />
+ <column flex="1"/>
+ </columns>
+ <rows>
+ <row>
+ <label id="lblex3" align="right" control="section" value="&object.label;" class="text-prompt" />
+ <menulist id="menu_model_list" >
+ <menupopup id="model_list">
+ <menuitem id="first_model_list" value="" label=""/>
+ </menupopup>
+ </menulist>
+ </row>
+ <row>
+ <label id="lblsearch" control="txtvalueobj" value="&search.label;" class="text-prompt"/>
+ <textbox id="txtvalueobj" />
+ <button label="&bsearch.label;" oncommand="searchCheckbox()" image="&imagesearch.value;" accesskey="s" id="search_button"/>
+ </row>
+ </rows>
+ </grid>
+ <hbox >
+ <caption label="&document.label;" id="label_box"/>
+ </hbox>
+ <vbox >
+ <listbox height="200" id="listSearchBox" style="border:1px solid red" seltype="multiple">
+ <listhead>
+ <listheader label="&listSearchBox.header;"/>
+ </listhead>
+ <listcols>
+ <listcol flex="1"/>
+ </listcols>
+ </listbox>
+ </vbox>
+ <hbox align="right" >
+ <button label="&attach.label;" accesskey="u" image="&imagearchive.value;" oncommand="push('add');"/>
+ </hbox>
+ <separator class="groove-thin" orient="horizontal"/>
+ </vbox>
+
+</window>
--- /dev/null
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="style.css" type="text/css"?>
+<!-- Extremely recommended to keep this css include!! -->
+<window id="rootWnd" title="push box" onload="load_contact_dialog();"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+ <script type="text/javascript" src="chrome://openerp_plugin/content/js/tiny_xmlrpc.js"></script>
+ <script type="text/javascript" src="chrome://openerp_plugin/content/js/tools.js"></script>
+ <script type="text/javascript" src="chrome://openerp_plugin/content/js/dialog.js"></script>
+ <script type="text/javascript" src="chrome://openerp_plugin/content/js/overlay.js"></script>
+ <vbox>
+ <hbox height="50">
+ <label value="Message" id="message_label" class="text-border"/>
+ </hbox>
+ <hbox align="right">
+ <button label="Cancel" accesskey="c" oncommand="window.close();"/>
+ <button id="push" label="Push Email" accesskey="a" oncommand="window.close();open_window('chrome://openerp_plugin/content/push.xul', 500,360);"/>
+ <button id="new" label="Create Document" accesskey="d" oncommand="window.close();open_window('chrome://openerp_plugin/content/push_new.xul', 320,100);"/>
+ <button id="open_document" label="Open Document" accesskey="o" oncommand="open_url(getPreference('urldoc'));window.close();"/>
+ </hbox>
+ </vbox>
+</window>
--- /dev/null
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<?xml-stylesheet href="style.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/plugin.dtd">
+<window id="pluginwindows" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml"
+ title="&title.label;" onload="getDocumentType()" >
+
+ <script type="text/javascript" src="chrome://openerp_plugin/content/js/tiny_xmlrpc.js"></script>
+ <script type="text/javascript" src="chrome://openerp_plugin/content/js/tools.js"></script>
+ <script type="text/javascript" src="chrome://openerp_plugin/content/js/push.js"></script>
+ <description></description>
+ <vbox>
+ <separator class="groove-thin" orient="horizontal" width="400"/>
+ <grid flex="1">
+ <columns>
+ <column />
+ <column />
+ <column flex="1"/>
+ </columns>
+ <rows>
+ <row>
+ <label id="lblex3" align="right" width="135" control="section" value="&object.label;" class="text-prompt" />
+ <menulist id="menu_model_list" width="150">
+ <menupopup id="model_list">
+ <menuitem id="first_model_list" value="" label=""/>
+ </menupopup>
+ </menulist>
+ </row>
+ </rows>
+ </grid>
+ <hbox align="right" >
+ <button label="&attach.label;" accesskey="u" image="&imagearchive.value;" oncommand="push();"/>
+ </hbox>
+ <separator class="groove-thin" orient="horizontal" width="480"/>
+ </vbox>
+</window>
--- /dev/null
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/selectpartner.dtd">
+<window id="partnerwindowsid" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml" onload="getPartnerList()"
+ title="&title.label;" height="500" width="375">
+<script type="text/javascript" src="chrome://openerp_plugin/content/js/tiny_xmlrpc.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/js/tools.js"></script>
+<script type="text/javascript" src="chrome://openerp_plugin/content/js/create.js"></script>
+<groupbox id="gpPartner">
+ <hbox>
+ <textbox id="txtselectpartner" class="text-prompt"/>
+ <spacer width="25"/>
+ <button label="&bsearch.label;" image="&imagesearch.value;" oncommand="getPartnerList();"/>
+ </hbox>
+</groupbox>
+<listbox id="listPartnerBox" flex="1" rows="5">
+ <listhead>
+ <listheader label="&listPartnerName.header;"/>
+ </listhead>
+ <listcols>
+ <listcol flex="1"/>
+ </listcols>
+</listbox>
+<description></description>
+<hbox>
+ <spacer width="45"/>
+ <button label="cancel" image="&imagecancel.value;" oncommand="close();" />
+ <button label="link" image="&imageok.value;" oncommand="selectPartner();window.close();"/>
+</hbox>
+
+</window>
--- /dev/null
+.text-prompt {
+ padding-top: .25em;
+ text-align: right;
+}
+
+.text-border {
+ padding: 1em;
+ font-size : 1.2em;
+ font-weight: bold;
+}
\ No newline at end of file
--- /dev/null
+<!ENTITY title.label "Open Contact">
+<!ENTITY name.value "Partner Name:">
+<!ENTITY contactname.value "Contact Name:">
+<!ENTITY street.value "Street:">
+<!ENTITY street2.value "Street2:">
+<!ENTITY zip.value "Zip:">
+<!ENTITY city.value "City:">
+<!ENTITY country.value "Country:">
+<!ENTITY state.value "State:">
+<!ENTITY office.value "Office:">
+<!ENTITY fax.value "Fax:">
+<!ENTITY mobile.value "Mobile:">
+<!ENTITY email.value "Email:">
+<!ENTITY emailid.value "Email ID:">
+<!ENTITY communication.value "Communication:">
+<!ENTITY postaladdress.value "Postal Address:">
+<!ENTITY ok.label "Save">
+<!ENTITY partner.label "Create New Contact :">
+<!ENTITY create.label "New Contact">
+<!ENTITY cancel.label "Close">
+<!ENTITY newpartner.label "New Partner">
+<!ENTITY bsearch.label "Search Contact">
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
+<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
+<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
--- /dev/null
+<!ENTITY title.label "OpenERP Configuration">\r
+<!ENTITY separate.label "Configuration Login for OpenERP!">\r
+<!ENTITY close.label "Close">\r
+<!ENTITY database.label "Database:">\r
+<!ENTITY ok.label "OK">\r
+<!ENTITY connection.label "Connect">\r
+<!ENTITY setconnection.label "Change">\r
+<!ENTITY openconnection.label "Open">\r
+<!ENTITY txturl.label "Server: ">\r
+<!ENTITY txtweburl.label "Server: ">\r
+<!ENTITY txtwebport.label "Port: ">\r
+<!ENTITY image.label "Image : ">\r
+<!ENTITY obj.label "Document : ">\r
+<!ENTITY username.label "Username: ">\r
+<!ENTITY password.label "Password: ">\r
+<!ENTITY setdb.label "Move >">\r
+<!ENTITY getdblist.label "Change">\r
+<!ENTITY gpConnection.label "Connection Parameters">\r
+<!ENTITY webConnection.label "Webserver Parameters">\r
+<!ENTITY listDBListBox.header "Available DBs">\r
+<!ENTITY listDocument.header "Document">\r
+<!ENTITY listDocumentListBox.header "Document Name">\r
+<!ENTITY document.label "Document Name : ">\r
+<!ENTITY documentcreate.label "Add">\r
+<!--<!ENTITY objectdelete.label "Delete Selected Object From The List"> -->\r
+<!ENTITY documentdelete.label "Delete">\r
+<!ENTITY gpArchive.label "Archived Email Attachment Options">\r
+<!ENTITY rdAlwaysAttached.label "Always Send Email Attachments to OpenERP">\r
+<!ENTITY rdPromptAttached.label "Prompt Before Sending Email Attachments">\r
+<!ENTITY rdNeverAttached.label "Never Send Email attachments to OpenERP">\r
+<!ENTITY reserve.value "Copyright © 2006-TODAY OpenERP SA All Rights Reserved.\r
+OpenERP is a trademark of the OpenERP SA Company. OpenERP Web is jointly developed by OpenERP SA and Axelor.\n\r
+Licenced under the terms of OpenERP Public License (OEPL) v1.1 ">\r
+<!ENTITY openerp.value "http://www.openerp.com/">\r
+<!ENTITY axelor.value "http://www.axelor.com">\r
+<!ENTITY tinyerp.value "http://tiny.be/">\r
+\r
+<!ENTITY openerp.paresent "This Thunderbird Plugin for OpenERP presently (2010-today) developed by OpenERP SA.">\r
+\r
+<!ENTITY openerp_s.value "OpenERP">\r
+<!ENTITY axelor_s.value "The Axelor Company">\r
+<!ENTITY tinyerp_s.value "The Tiny Company">\r
+\r
+<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">\r
+<!ENTITY gpAbout.label "OpenERP Thunderbird Plugin :">\r
+<!ENTITY develop.value "Based on original work, copyright 2003-2009, by Tiny & Axelor ">\r
+<!ENTITY information.value "For more information, please visit our website">\r
+<!ENTITY contact.label "Contact Us">\r
+<!ENTITY contact.value "info@axelor.com">\r
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">\r
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">\r
+<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">\r
+<!ENTITY imagemove.value "chrome://openerp_plugin/skin/Move.gif">\r
+<!ENTITY imagemoveleft.value "chrome://openerp_plugin/skin/MoveLeft.png">\r
+<!ENTITY imagemovedown.value "chrome://openerp_plugin/skin/MoveDown.png">\r
+<!ENTITY addfile.label "Load Image">\r
--- /dev/null
+<!ENTITY lblurl.label " Server: ">\r
+<!ENTITY lblport.label " Port: ">\r
+<!ENTITY lblheading.label "Openerp Connection">\r
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">\r
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">\r
+<!ENTITY lblprotocol.label "Protocol Connection: ">\r
--- /dev/null
+<!ENTITY title.label "Create a new Contact">
+<!ENTITY name.value "Contact Name:">
+<!ENTITY street.value "Street:">
+<!ENTITY street2.value "Street2:">
+<!ENTITY zip.value "Zip:">
+<!ENTITY city.value "City:">
+<!ENTITY country.value "Country:">
+<!ENTITY state.value "State:">
+<!ENTITY office.value "Office:">
+<!ENTITY fax.value "Fax:">
+<!ENTITY mobile.value "Mobile:">
+<!ENTITY email.value "Email:">
+<!ENTITY communication.value "Communication:">
+<!ENTITY postaladdress.value "Postal Address:">
+
+
+<!ENTITY selectpartner.value "Partner:">
+<!ENTITY listEmail.header "Email">
+<!ENTITY listName.header "Name">
+<!ENTITY bsearch.label "Search">
+<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">
+<!ENTITY cbxarchive.label "Archive">
+<!ENTITY ok.label "Save">
+<!ENTITY cancel.label "Close">
+<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
+
+<!ENTITY title.label "Select Partner">
+<!ENTITY listPartnerName.header "Partner Name">
+<!ENTITY bsearch.label "Search">
+<!ENTITY create.label "Create">
+<!ENTITY select.label "Select">
+<!ENTITY cancel.label "Close">
+<!ENTITY reload.label "Reload">
+<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
+<!ENTITY imagereload.value "chrome://openerp_plugin/skin/Archive.png">
--- /dev/null
+nomboxfile=není mbox souborem
+folderexists=Není možné importovat: složka se stejným názvem již existuje
+fileexists=Není možné importovat: soubor se stejným názvem již existuje
+nowritable=Není možné importovat: nemáte právo zápisu do složky
+exportOK=Export byl úspěšně dokončen
+isNewsgroup=Tato funkce není dostupná: export složky z IMAP účtů nebo diskuzních \nskupin je možný, pouze pokud je nastavené čtení v režimu Offline
+nofolder=Nebyla vybrána žádná cílová složka
+badfolder=Není možné importovat do této složky (typ IMAP nebo diskuzní skupina)
+exportAccount=Export všech složek
+exportFolder=Export složky
+filePickerImport=Výběr souboru k importu
+filePickerExport=Výběr cílové složky
+extensions.{3ed8cc52-86fc-4613-9026-c1ef969da4c3}.description=Umožňuje import a export souborů ve formátu mbox a eml
+virtualfolder=Toto je virtuální složka. Pro export jejich\nzpráv musíte tyto zprávy nejdříve\nzkopírovat do normální složky.
+searchdir=Vyberte složku, ve které budou vyhledány mbox soubory
+confirmimport=Chcete importovat soubor?
+endscan=Konec prohledávání složek
+internalerror=Není možné provést import, protože nastala neznámá chyba
+exportstart=Probíhá export, čekejte prosím...
+exported=Exportovalo se
+msgs=zpráv z
+nosubjectmsg=bez_predmetu
+messsubdir=zprávy
+badfolder2=Není možné importovat do této složky (IMAP nebo diskuzní skupina nebo virtuální složka)
+temp_error=Není možné importovat: nastala chyba při vytváření dočasného souboru
+importEMLstart=Pobíhá import, čekejte prosím...
+numEML=Naimportovány eml soubory:
+CSVseparator=,
+noEML=No eml file found in this directory
+backupWarning=During this operation, the program could be\nunresponsive for some minutes.\nDo you want to go on?\n
+noWaring=Don't show again this warning
--- /dev/null
+<!ENTITY tinyplugin "Configuration">
+<!ENTITY tinypluginconfig "Push">
+<!ENTITY tinyarchive "Push to OpenERP">
+<!ENTITY imageicon.value "chrome://openerp_plugin/skin/openerp.png">
+<!ENTITY menuicon.settings "chrome://openerp_plugin/skin/settings.png">
+<!ENTITY menuicon.value "chrome://openerp_plugin/skin/openerp.png">
+<!ENTITY partnericon.value "chrome://openerp_plugin/skin/openerp.png">
+<!ENTITY imagearchive.value "chrome://openerp_plugin/skin/openerp.png">
+<!ENTITY tooltip.value "Add To Archive">
+<!ENTITY pluginconfig.value "OpenERP Configuration Settings">
+<!ENTITY pluginconfigvalue.value "Archieve To OpenERP Settings">
+<!ENTITY openerpMenu.label "OpenERP">
+<!ENTITY openerpMenu.accesskey "OE">
+<!ENTITY openpartner.value "Partner">
+<!ENTITY openpartnertooltip.value "Click to Open Partner Realted to Sender Eamil address.">
+<!ENTITY opendocument.value "Document">
+<!ENTITY opendocumenttooltip.value "Click to See the Mail if it is archived to OpenERP.">
+
--- /dev/null
+<!ENTITY title.label "Push To OpenERP">
+<!ENTITY gptinyobj.label "Link to an Existing Document">
+<!ENTITY newobject.label "Create a New Documents">
+<!ENTITY document.label "Documents">
+<!ENTITY bsearch.label "Search">
+<!ENTITY close.label "Close">
+<!ENTITY attach.label "Push">
+<!ENTITY create.label "New Contact">
+<!ENTITY archive.label "Create">
+<!ENTITY attach.label "Attach">
+<!ENTITY cbxcontact.label "Contact">
+<!ENTITY cbxinvoice.label "Invoice">
+<!ENTITY cbxproject.label "Project">
+<!ENTITY cbxpartner.label "Partner">
+<!ENTITY cbxproduct.label "Product">
+<!ENTITY cbxaccount.label "Account">
+<!ENTITY cbxsale.label "Sale">
+<!ENTITY cbxcase.label "Case">
+<!ENTITY cbxtask.label "Task">
+<!ENTITY cbxselectall.label "Select All">
+<!ENTITY object.label "Type of Document :">
+<!ENTITY partner.label "Create New Contact :">
+<!ENTITY search.label "Search :">
+<!ENTITY listSearchBox.header "Name">
+<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
+<!ENTITY imagearchive.value "chrome://openerp_plugin/skin/Archive.png">
+<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
+<!ENTITY gptinyobjexe.label "Documents">
+<!ENTITY newcontact.label "Create a New Contact">
+<!ENTITY listSearchBox.header2 "Document Type">
--- /dev/null
+<!ENTITY title.label "Select Partner">
+<!ENTITY selectpartner.value "Partner">
+<!ENTITY listPartnerName.header "Partner Name">
+<!ENTITY bsearch.label "Search">
+<!ENTITY create.label "Create">
+<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">
+<!ENTITY select.label "Select">
+<!ENTITY cancel.label "Close">
+<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
+<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
+<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
+<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
--- /dev/null
+menuitem#tiny-plugin {\r
+ color: red !important;\r
+}
--- /dev/null
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla XML-RPC Client component.
+ *
+ * The Initial Developer of the Original Code is
+ * Digital Creations 2, Inc.
+ * Portions created by the Initial Developer are Copyright (C) 2000
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Martijn Pieters <mj@digicool.com> (original author)
+ * Samuel Sieb <samuel@sieb.net>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+ * nsXmlRpcClient XPCOM component
+ * Version: $Revision: 1.39 $
+ *
+ * $Id: nsXmlRpcClient.js,v 1.39 2006/10/24 16:02:01 silver%warwickcompsoc.co.uk Exp $
+ */
+
+/*
+ * Constants
+ */
+Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+const XMLRPCCLIENT_CONTRACTID = '@mozilla.org/xml-rpc/client;1';
+const XMLRPCCLIENT_CID =
+ Components.ID('{4d7d15c0-3747-4f7f-b6b3-792a5ea1a9aa}');
+const XMLRPCCLIENT_IID = Components.interfaces.nsIXmlRpcClient;
+
+const XMLRPCFAULT_CONTRACTID = '@mozilla.org/xml-rpc/fault;1';
+const XMLRPCFAULT_CID =
+ Components.ID('{691cb864-0a7e-448c-98ee-4a7f359cf145}');
+const XMLRPCFAULT_IID = Components.interfaces.nsIXmlRpcFault;
+
+const XMLHTTPREQUEST_CONTRACTID = '@mozilla.org/xmlextras/xmlhttprequest;1';
+
+const NSICHANNEL = Components.interfaces.nsIChannel;
+
+const DEBUG = false;
+const DEBUGPARSE = false;
+
+const DOMNode = Components.interfaces.nsIDOMNode;
+/*
+ * Class definitions
+ */
+
+/* The nsXmlRpcFault class constructor. */
+function nsXmlRpcFault() {}
+
+/* the nsXmlRpcFault class def */
+nsXmlRpcFault.prototype = {
+ faultCode: 0,
+ faultString: '',
+
+ init: function(faultCode, faultString) {
+ this.faultCode = faultCode;
+ this.faultString = faultString;
+ },
+
+ toString: function() {
+ return '<XML-RPC Fault: (' + this.faultCode + ') ' +
+ this.faultString + '>';
+ },
+
+ // nsISupports interface
+ QueryInterface: function(iid) {
+ if (!iid.equals(Components.interfaces.nsISupports) &&
+ !iid.equals(XMLRPCFAULT_IID))
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ return this;
+ }
+};
+
+/* The nsXmlRpcClient class constructor. */
+function nsXmlRpcClient() {}
+
+/* the nsXmlRpcClient class def */
+nsXmlRpcClient.prototype = {
+ _serverUrl: null,
+ _useAuth: false,
+
+ classDescription: "nsXmlRpcClient XPCOM component",
+ classID: Components.ID("{4d7d15c0-3747-4f7f-b6b3-792a5ea1a9aa}"),
+ contractID: "@mozilla.org/xml-rpc/client;1",
+
+ init: function(serverURL) {
+ this._serverUrl = serverURL;
+ this._encoding = "UTF-8";
+ },
+
+ setAuthentication: function(username, password){
+ if ((typeof username == "string") &&
+ (typeof password == "string")){
+ this._useAuth = true;
+ this._username = username;
+ this._password = password;
+ }
+ },
+
+ clearAuthentication: function(){
+ this._useAuth = false;
+ },
+
+ setEncoding: function(encoding){
+ this._encoding = encoding;
+ },
+
+ get serverUrl() { return this._serverUrl; },
+
+ // Internal copy of the status
+ _status: null,
+ _listener: null,
+
+ asyncCall: function(listener, context, methodName, methodArgs, count) {
+ debug('asyncCall');
+ // Check for call in progress.
+ if (this._inProgress)
+ return;
+ //throw Components.Exception('Call in progress!');
+
+ // Check for the server URL;
+ if (!this._serverUrl)
+ throw Components.Exception('Not initialized');
+
+ this._inProgress = true;
+
+ // Clear state.
+ this._foundFault = false;
+ this._passwordTried = false;
+ this._result = null;
+ this._fault = null;
+ this._status = null;
+ this._responseStatus = null;
+ this._responseString = null;
+ this._listener = listener;
+ this._seenStart = false;
+ this._context = context;
+
+ debug('Arguments: ' + methodArgs);
+
+ // Generate request body
+ var xmlWriter = new XMLWriter(this._encoding);
+ this._generateRequestBody(xmlWriter, methodName, methodArgs);
+
+ var requestBody = xmlWriter.data;
+
+ debug('Request: ' + requestBody);
+
+ this.xmlhttp = Components.classes[XMLHTTPREQUEST_CONTRACTID]
+ .createInstance(Components.interfaces.nsIXMLHttpRequest);
+ if (this._useAuth) {
+ this.xmlhttp.open('POST', this._serverUrl, true,
+ this._username, this._password);
+ } else {
+ this.xmlhttp.open('POST', this._serverUrl);
+ }
+ this.xmlhttp.onload = this._onload;
+ this.xmlhttp.onerror = this._onerror;
+ this.xmlhttp.parent = this;
+ this.xmlhttp.setRequestHeader('Content-Type','text/xml');
+ this.xmlhttp.send(requestBody);
+ var chan = this.xmlhttp.channel.QueryInterface(NSICHANNEL);
+ chan.notificationCallbacks = this;
+ },
+
+ _onload: function(e) {
+ var result;
+ var parent = e.target.parent;
+ parent._inProgress = false;
+ parent._responseStatus = e.target.status;
+ parent._responseString = e.target.statusText;
+ if (!e.target.responseXML) {
+ if (e.target.status) {
+ try {
+ parent._listener.onError(parent, parent._context,
+ Components.results.NS_ERROR_FAILURE,
+ 'Server returned status ' + e.target.status);
+ } catch (ex) {
+ debug('Exception in listener.onError: ' + ex);
+ }
+ } else {
+ try {
+ parent._listener.onError(parent, parent._context,
+ Components.results.NS_ERROR_FAILURE,
+ 'Unknown network error');
+ } catch (ex) {
+ debug('Exception in listener.onError: ' + ex);
+ }
+ }
+ return;
+ }
+ try {
+ e.target.responseXML.normalize();
+ result = parent.parse(e.target.responseXML);
+ } catch (ex) {
+ try {
+ parent._listener.onError(parent, parent._context,
+ ex.result, ex.message);
+ } catch (ex) {
+ debug('Exception in listener.onError: ' + ex);
+ }
+ return;
+ }
+ if (parent._foundFault) {
+ parent._fault = result;
+ try {
+ parent._listener.onFault(parent, parent._context, result);
+ } catch(ex) {
+ debug('Exception in listener.onFault: ' + ex);
+ }
+ } else {
+ parent._result = result.value;
+ try {
+ parent._listener.onResult(parent, parent._context,
+ result.value);
+ } catch (ex) {
+ debug('Exception in listener.onResult: ' + ex);
+ }
+ }
+ },
+
+ _onerror: function(e) {
+ var parent = e.target.parent;
+ parent._inProgress = false;
+ try {
+ parent._listener.onError(parent, parent._context,
+ Components.results.NS_ERROR_FAILURE,
+ 'Unknown network error');
+ } catch (ex) {
+ debug('Exception in listener.onError: ' + ex);
+ }
+ },
+
+ _foundFault: false,
+
+ _fault: null,
+ _result: null,
+ _responseStatus: null,
+ _responseString: null,
+
+ get fault() { return this._fault; },
+ get result() { return this._result; },
+ get responseStatus() { return this._responseStatus; },
+ get responseString() { return this._responseString; },
+
+ /* Convenience. Create an appropriate XPCOM object for a given type */
+ INT: 1,
+ BOOLEAN: 2,
+ STRING: 3,
+ DOUBLE: 4,
+ DATETIME: 5,
+ ARRAY: 6,
+ STRUCT: 7,
+ BASE64: 8, // Not part of nsIXmlRpcClient interface, internal use.
+ createType: function(type, uuid) {
+ const SUPPORTSID = '@mozilla.org/supports-';
+ switch(type) {
+ case this.INT:
+ uuid.value = Components.interfaces.nsISupportsPRInt32
+ return createInstance(SUPPORTSID + 'PRInt32;1',
+ 'nsISupportsPRInt32');
+
+ case this.BOOLEAN:
+ uuid.value = Components.interfaces.nsISupportsPRBool
+ return createInstance(SUPPORTSID + 'PRBool;1',
+ 'nsISupportsPRBool');
+
+ case this.STRING:
+ uuid.value = Components.interfaces.nsISupportsCString
+ return createInstance(SUPPORTSID + 'cstring;1',
+ 'nsISupportsCString');
+
+ case this.DOUBLE:
+ uuid.value = Components.interfaces.nsISupportsDouble
+ return createInstance(SUPPORTSID + 'double;1',
+ 'nsISupportsDouble');
+
+ case this.DATETIME:
+ uuid.value = Components.interfaces.nsISupportsPRTime
+ return createInstance(SUPPORTSID + 'PRTime;1',
+ 'nsISupportsPRTime');
+
+ case this.ARRAY:
+ uuid.value = Components.interfaces.nsISupportsArray
+ return createInstance(SUPPORTSID + 'array;1',
+ 'nsISupportsArray');
+
+ case this.STRUCT:
+ uuid.value = Components.interfaces.nsIDictionary
+ return createInstance('@mozilla.org/dictionary;1',
+ 'nsIDictionary');
+
+ default: throw Components.Exception('Unsupported type');
+ }
+ },
+
+ // nsISupports interface
+ QueryInterface: function(iid) {
+ if (!iid.equals(Components.interfaces.nsISupports) &&
+ !iid.equals(XMLRPCCLIENT_IID) &&
+ !iid.equals(Components.interfaces.nsIInterfaceRequestor))
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ return this;
+ },
+
+ // nsIInterfaceRequester interface
+ getInterface: function(iid, result){
+ if (iid.equals(Components.interfaces.nsIAuthPrompt)){
+ return this;
+ }
+ Components.returnCode = Components.results.NS_ERROR_NO_INTERFACE;
+ return null;
+ },
+
+ // nsIAuthPrompt interface
+ _passwordTried: false,
+ promptUsernameAndPassword: function(dialogTitle, text, passwordRealm,
+ savePassword, user, pwd){
+
+ if (this._useAuth){
+ if (this._passwordTried){
+ return false;
+ }
+ user.value = this._username;
+ pwd.value = this._password;
+ this._passwordTried = true;
+ return true;
+ }
+ return false;
+ },
+
+ /* Generate the XML-RPC request body */
+ _generateRequestBody: function(writer, methodName, methodArgs) {
+ writer.startElement('methodCall');
+
+ writer.startElement('methodName');
+ writer.write(methodName);
+ writer.endElement('methodName');
+
+ writer.startElement('params');
+ for (var i = 0; i < methodArgs.length; i++) {
+ writer.startElement('param');
+ this._generateArgumentBody(writer, methodArgs[i]);
+ writer.endElement('param');
+ }
+ writer.endElement('params');
+
+ writer.endElement('methodCall');
+ },
+
+ /* Write out a XML-RPC parameter value */
+ _generateArgumentBody: function(writer, obj) {
+ writer.startElement('value');
+ var sType = this._typeOf(obj);
+ switch (sType) {
+ case 'PRUint8':
+ case 'PRUint16':
+ case 'PRInt16':
+ case 'PRInt32':
+ obj=obj.QueryInterface(Components.interfaces['nsISupports' +
+ sType]);
+ writer.startElement('i4');
+ writer.write(obj.toString());
+ writer.endElement('i4');
+ break;
+
+ case 'PRBool':
+ obj=obj.QueryInterface(Components.interfaces.nsISupportsPRBool);
+ writer.startElement('boolean');
+ writer.write(obj.data ? '1' : '0');
+ writer.endElement('boolean');
+ break;
+
+ case 'Char':
+ case 'CString':
+ obj=obj.QueryInterface(Components.interfaces['nsISupports' +
+ sType]);
+ writer.startElement('string');
+ writer.write(obj.toString());
+ writer.endElement('string');
+ break;
+
+ case 'Float':
+ case 'Double':
+ obj=obj.QueryInterface(Components.interfaces['nsISupports' +
+ sType]);
+ writer.startElement('double');
+ writer.write(obj.toString());
+ writer.endElement('double');
+ break;
+
+ case 'PRTime':
+ obj = obj.QueryInterface(
+ Components.interfaces.nsISupportsPRTime);
+ var date = new Date(obj.data)
+ writer.startElement('dateTime.iso8601');
+ writer.write(iso8601Format(date));
+ writer.endElement('dateTime.iso8601');
+ break;
+
+ case 'InputStream':
+ obj = obj.QueryInterface(Components.interfaces.nsIInputStream);
+ obj = toScriptableStream(obj);
+ writer.startElement('base64');
+ streamToBase64(obj, writer);
+ writer.endElement('base64');
+ break;
+
+ case 'Array':
+ obj = obj.QueryInterface(
+ Components.interfaces.nsISupportsArray);
+ writer.startElement('array');
+ writer.startElement('data');
+ for (var i = 0; i < obj.Count(); i++)
+ this._generateArgumentBody(writer, obj.GetElementAt(i));
+ writer.endElement('data');
+ writer.endElement('array');
+ break;
+
+ case 'Dictionary':
+ obj = obj.QueryInterface(Components.interfaces.nsIDictionary);
+ writer.startElement('struct');
+ var keys = obj.getKeys({});
+ for (var k = 0; k < keys.length; k++) {
+ writer.startElement('member');
+ writer.startElement('name');
+ writer.write(keys[k]);
+ writer.endElement('name');
+ this._generateArgumentBody(writer, obj.getValue(keys[k]));
+ writer.endElement('member');
+ }
+ writer.endElement('struct');
+ break;
+
+ default:
+ throw Components.Exception('Unsupported argument', null, null,
+ obj);
+ }
+
+ writer.endElement('value');
+ },
+
+ /* Determine type of a nsISupports primitive, array or dictionary. */
+ _typeOf: function(obj) {
+ // XPConnect alows JS to pass in anything, because we are a regular
+ // JS object to it. So we have to test rigorously.
+ if (typeof obj != 'object') return 'Unknown';
+
+ // Anything else not nsISupports is not allowed.
+ if (typeof obj.QueryInterface != 'function') return 'Unknown';
+
+ // Now we will have to eliminate by trying all possebilities.
+ try {
+ obj.QueryInterface(Components.interfaces.nsISupportsPRUint8);
+ return 'PRUint8';
+ } catch(e) {}
+
+ try {
+ obj.QueryInterface(Components.interfaces.nsISupportsPRUint16);
+ return 'PRUint16';
+ } catch(e) {}
+
+ try {
+ obj.QueryInterface(Components.interfaces.nsISupportsPRInt16);
+ return 'PRInt16';
+ } catch(e) {}
+
+ try {
+ obj.QueryInterface(Components.interfaces.nsISupportsPRInt32);
+ return 'PRInt32';
+ } catch(e) {}
+
+ try {
+ obj.QueryInterface(Components.interfaces.nsISupportsPRBool);
+ return 'PRBool';
+ } catch(e) {}
+
+ try {
+ obj.QueryInterface(Components.interfaces.nsISupportsChar);
+ return 'Char';
+ } catch(e) {}
+
+ try {
+ obj.QueryInterface(Components.interfaces.nsISupportsCString);
+ return 'CString';
+ } catch(e) {}
+
+ try {
+ obj.QueryInterface(Components.interfaces.nsISupportsFloat);
+ return 'Float';
+ } catch(e) {}
+
+ try {
+ obj.QueryInterface(Components.interfaces.nsISupportsDouble);
+ return 'Double';
+ } catch(e) {}
+
+ try {
+ obj.QueryInterface(Components.interfaces.nsISupportsPRTime);
+ return 'PRTime';
+ } catch(e) {}
+
+ try {
+ obj.QueryInterface(Components.interfaces.nsIInputStream);
+ return 'InputStream';
+ } catch(e) {}
+
+ try {
+ obj.QueryInterface(Components.interfaces.nsISupportsArray);
+ return 'Array';
+ } catch(e) {}
+
+ try {
+ obj.QueryInterface(Components.interfaces.nsIDictionary);
+ return 'Dictionary';
+ } catch(e) {}
+
+ // Not a supported type
+ return 'Unknown';
+ },
+
+ // Response parsing state
+ _valueStack: [],
+ _currValue: null,
+ _cdata: null,
+
+ parse: function(doc) {
+ var node = doc.firstChild;
+ var result;
+ if (node.nodeType == DOMNode.TEXT_NODE)
+ node = node.nextSibling;
+ if ((node.nodeType != DOMNode.ELEMENT_NODE) ||
+ (node.nodeName != 'methodResponse')) {
+ throw Components.Exception('Expecting a methodResponse', null, null,
+ doc);
+ }
+ node = node.firstChild;
+ if (node.nodeType == DOMNode.TEXT_NODE)
+ node = node.nextSibling;
+ if (node.nodeType != DOMNode.ELEMENT_NODE)
+ throw Components.Exception('Expecting a params or fault', null,
+ null, doc);
+ if (node.nodeName == 'params') {
+ node = node.firstChild;
+ if (node.nodeType == DOMNode.TEXT_NODE)
+ node = node.nextSibling;
+ if ((node.nodeType != DOMNode.ELEMENT_NODE) ||
+ (node.nodeName != 'param')) {
+ throw Components.Exception('Expecting a param', null, null,
+ doc);
+ }
+ result = this.parseValue(node.firstChild);
+ } else if (node.nodeName == 'fault') {
+ this._foundFault = true;
+ result = this.parseFault(node.firstChild);
+ } else {
+ throw Components.Exception('Expecting a params or fault', null,
+ null, doc);
+ }
+ debug('Parse finished');
+ return result;
+ },
+
+ parseValue: function(node) {
+ var cValue = new Value();
+ if (node && (node.nodeType == DOMNode.TEXT_NODE))
+ node = node.nextSibling;
+ if (!node || (node.nodeType != DOMNode.ELEMENT_NODE) ||
+ (node.nodeName != 'value')) {
+ throw Components.Exception('Expecting a value', null, null, node);
+ }
+ node = node.firstChild;
+ if (!node)
+ return cValue;
+ if (node.nodeType == DOMNode.TEXT_NODE){
+ if (!node.nextSibling) {
+ cValue.value = node.nodeValue;
+ return cValue;
+ } else {
+ node = node.nextSibling;
+ }
+ }
+ if (node.nodeType != DOMNode.ELEMENT_NODE)
+ throw Components.Exception('Expecting a value type', null, null,
+ node);
+ switch (node.nodeName) {
+ case 'string':
+ cValue.value = this.parseString(node.firstChild);
+ break;
+ case 'i4':
+ case 'int':
+ cValue.type = this.INT;
+ cValue.value = this.parseString(node.firstChild);
+ break;
+ case 'boolean':
+ cValue.type = this.BOOLEAN;
+ cValue.value = this.parseString(node.firstChild);
+ break;
+ case 'double':
+ cValue.type = this.DOUBLE;
+ cValue.value = this.parseString(node.firstChild);
+ break;
+ case 'dateTime.iso8601':
+ cValue.type = this.DATETIME;
+ cValue.value = this.parseString(node.firstChild);
+ break;
+ case 'base64':
+ cValue.type = this.BASE64;
+ cValue.value = this.parseString(node.firstChild);
+ break;
+ case 'struct':
+ cValue.type = this.STRUCT;
+ this.parseStruct(cValue, node.firstChild);
+ break;
+ case 'array':
+ cValue.type = this.ARRAY;
+ this.parseArray(cValue, node.firstChild);
+ break;
+ default:
+ throw Components.Exception('Expecting a value type', null, null,
+ node);
+ }
+ return cValue;
+ },
+
+ parseString: function(node) {
+ value = '';
+ while (node) {
+ if (node.nodeType != DOMNode.TEXT_NODE)
+ throw Components.Exception('Expecting a text node', null, null,
+ node);
+ value += node.nodeValue;
+ node = node.nextSibling;
+ }
+ return value;
+ },
+
+ parseStruct: function(struct, node) {
+ while (node) {
+ if (node.nodeType == DOMNode.TEXT_NODE)
+ node = node.nextSibling;
+ if (!node)
+ return;
+ if ((node.nodeType != DOMNode.ELEMENT_NODE) ||
+ (node.nodeName != 'member')) {
+ throw Components.Exception('Expecting a member', null, null,
+ node);
+ }
+ this.parseMember(struct, node.firstChild);
+ node = node.nextSibling;
+ }
+ },
+
+ parseMember: function(struct, node) {
+ var cValue;
+ if (node.nodeType == DOMNode.TEXT_NODE)
+ node = node.nextSibling;
+ if (!node || (node.nodeType != DOMNode.ELEMENT_NODE) ||
+ (node.nodeName != 'name')) {
+ throw Components.Exception('Expecting a name', null, null, node);
+ }
+ struct.name = this.parseString(node.firstChild);
+ cValue = this.parseValue(node.nextSibling);
+ struct.appendValue(cValue.value);
+ },
+
+ parseArray: function(array, node) {
+ if (node.nodeType == DOMNode.TEXT_NODE)
+ node = node.nextSibling;
+ if (!node || (node.nodeType != DOMNode.ELEMENT_NODE) ||
+ (node.nodeName != 'data')) {
+ throw Components.Exception('Expecting array data', null, null, node);
+ }
+ for (node = node.firstChild; node; node = node.nextSibling) {
+ if (node.nodeType == DOMNode.TEXT_NODE)
+ continue;
+ array.appendValue(this.parseValue(node).value);
+ }
+ },
+
+ parseFault: function(node) {
+ var fault = createInstance(XMLRPCFAULT_CONTRACTID, 'nsIXmlRpcFault');
+ var cValue = this.parseValue(node);
+ if ((cValue.type != this.STRUCT) ||
+ (!cValue.value.hasKey('faultCode')) ||
+ (!cValue.value.hasKey('faultString'))) {
+ throw Components.Exception('Invalid fault', null, null, node);
+ }
+ fault.init(cValue.value.getValue('faultCode').data,
+ cValue.value.getValue('faultString').data);
+ return fault;
+ }
+};
+
+if (XPCOMUtils.generateNSGetFactory)
+ var NSGetFactory = XPCOMUtils.generateNSGetFactory([nsXmlRpcClient]);
+else
+ var NSGetModule = XPCOMUtils.generateNSGetModule([nsXmlRpcClient]);
+
+
+/* The XMLWriter class constructor */
+function XMLWriter(encoding) {
+ if (!encoding)
+ encoding = "UTF-8";
+ this.data = '<?xml version="1.0" encoding="' + encoding + '"?>';
+}
+
+/* The XMLWriter class def */
+XMLWriter.prototype = {
+ data: '',
+
+ startElement: function(element) {
+ this.data += '<' + element + '>';
+ },
+
+ endElement: function(element) {
+ this.data += '</' + element + '>';
+ },
+
+ write: function(text) {
+ for (var i = 0; i < text.length; i++) {
+ var c = text[i];
+ switch (c) {
+ case '<':
+ this.data += '<';
+ break;
+ case '&':
+ this.data += '&';
+ break;
+ default:
+ this.data += c;
+ }
+ }
+ },
+
+ markup: function(text) { this.data += text }
+};
+
+/* The Value class contructor */
+function Value() { this.type = this.STRING; };
+
+/* The Value class def */
+Value.prototype = {
+ INT: nsXmlRpcClient.prototype.INT,
+ BOOLEAN: nsXmlRpcClient.prototype.BOOLEAN,
+ STRING: nsXmlRpcClient.prototype.STRING,
+ DOUBLE: nsXmlRpcClient.prototype.DOUBLE,
+ DATETIME: nsXmlRpcClient.prototype.DATETIME,
+ ARRAY: nsXmlRpcClient.prototype.ARRAY,
+ STRUCT: nsXmlRpcClient.prototype.STRUCT,
+ BASE64: nsXmlRpcClient.prototype.BASE64,
+
+ _createType: nsXmlRpcClient.prototype.createType,
+
+ name: null,
+
+ _value: null,
+ get value() { return this._value; },
+ set value(val) {
+ // accepts [0-9]+ or x[0-9a-fA-F]+ and returns the character.
+ function entityTrans(substr, code) {
+ return String.fromCharCode("0" + code);
+ }
+
+ switch (this.type) {
+ case this.STRING:
+ val = val.replace(/&#([0-9]+);/g, entityTrans);
+ val = val.replace(/&#(x[0-9a-fA-F]+);/g, entityTrans);
+ val = val.replace(/</g, '<');
+ val = val.replace(/>/g, '>');
+ val = val.replace(/&/g, '&');
+ this._value.data = val;
+ break;
+
+ case this.BOOLEAN:
+ this._value.data = (val == 1);
+ break;
+
+ case this.DATETIME:
+ this._value.data = Date.UTC(val.slice(0, 4),
+ val.slice(4, 6) - 1, val.slice(6, 8), val.slice(9, 11),
+ val.slice(12, 14), val.slice(15));
+ break;
+
+ case this.BASE64:
+ this._value.data = base64ToString(val);
+ break;
+
+ default:
+ this._value.data = val;
+ }
+ },
+
+ _type: null,
+ get type() { return this._type; },
+ set type(type) {
+ this._type = type;
+ if (type == this.BASE64)
+ this._value = this._createType(this.STRING, {});
+ else this._value = this._createType(type, {});
+ },
+
+ appendValue: function(val) {
+ switch (this.type) {
+ case this.ARRAY:
+ this.value.AppendElement(val);
+ break;
+
+ case this.STRUCT:
+ this.value.setValue(this.name, val);
+ break;
+ }
+ }
+};
+
+/*
+ * Objects
+ */
+
+/* nsXmlRpcClient Module (for XPCOM registration) */
+var nsXmlRpcClientModule = {
+ registerSelf: function(compMgr, fileSpec, location, type) {
+ compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
+
+ compMgr.registerFactoryLocation(XMLRPCCLIENT_CID,
+ 'XML-RPC Client JS component',
+ XMLRPCCLIENT_CONTRACTID,
+ fileSpec,
+ location,
+ type);
+ compMgr.registerFactoryLocation(XMLRPCFAULT_CID,
+ 'XML-RPC Fault JS component',
+ XMLRPCFAULT_CONTRACTID,
+ fileSpec,
+ location,
+ type);
+ },
+
+ getClassObject: function(compMgr, cid, iid) {
+ if (!cid.equals(XMLRPCCLIENT_CID) && !cid.equals(XMLRPCFAULT_CID))
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+
+ if (!iid.equals(Components.interfaces.nsIFactory))
+ throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
+
+ if (cid.equals(XMLRPCCLIENT_CID))
+ return nsXmlRpcClientFactory
+ else return nsXmlRpcFaultFactory;
+ },
+
+ canUnload: function(compMgr) { return true; }
+};
+
+/* nsXmlRpcClient Class Factory */
+var nsXmlRpcClientFactory = {
+ createInstance: function(outer, iid) {
+ if (outer != null)
+ throw Components.results.NS_ERROR_NO_AGGREGATION;
+
+ if (!iid.equals(XMLRPCCLIENT_IID) &&
+ !iid.equals(Components.interfaces.nsISupports))
+ throw Components.results.NS_ERROR_INVALID_ARG;
+
+ return new nsXmlRpcClient();
+ }
+}
+
+/* nsXmlRpcFault Class Factory */
+var nsXmlRpcFaultFactory = {
+ createInstance: function(outer, iid) {
+ if (outer != null)
+ throw Components.results.NS_ERROR_NO_AGGREGATION;
+
+ if (!iid.equals(XMLRPCFAULT_IID) &&
+ !iid.equals(Components.interfaces.nsISupports))
+ throw Components.results.NS_ERROR_INVALID_ARG;
+
+ return new nsXmlRpcFault();
+ }
+}
+
+/*
+ * Functions
+ */
+/* module initialisation */
+function NSGetModule(comMgr, fileSpec) { return nsXmlRpcClientModule; }
+
+/* Create an instance of the given ContractID, with given interface */
+function createInstance(contractId, intf) {
+ return Components.classes[contractId]
+ .createInstance(Components.interfaces[intf]);
+}
+
+/* Get a pointer to a service indicated by the ContractID, with given interface */
+function getService(contractId, intf) {
+ return Components.classes[contractId]
+ .getService(Components.interfaces[intf]);
+}
+
+/* Convert an inputstream to a scriptable inputstream */
+function toScriptableStream(input) {
+ var SIStream = Components.Constructor(
+ '@mozilla.org/scriptableinputstream;1',
+ 'nsIScriptableInputStream', 'init');
+ return new SIStream(input);
+}
+
+/* format a Date object into a iso8601 datetime string, UTC time */
+function iso8601Format(date) {
+ var datetime = date.getUTCFullYear();
+ var month = String(date.getUTCMonth() + 1);
+ datetime += (month.length == 1 ? '0' + month : month);
+ var day = date.getUTCDate();
+ datetime += (day < 10 ? '0' + day : day);
+
+ datetime += 'T';
+
+ var hour = date.getUTCHours();
+ datetime += (hour < 10 ? '0' + hour : hour) + ':';
+ var minutes = date.getUTCMinutes();
+ datetime += (minutes < 10 ? '0' + minutes : minutes) + ':';
+ var seconds = date.getUTCSeconds();
+ datetime += (seconds < 10 ? '0' + seconds : seconds);
+
+ return datetime;
+}
+
+/* Convert a stream to Base64, writing it away to a string writer */
+const BASE64CHUNK = 255; // Has to be dividable by 3!!
+function streamToBase64(stream, writer) {
+ while (stream.available()) {
+ var data = [];
+ while (data.length < BASE64CHUNK && stream.available()) {
+ var d = stream.read(1).charCodeAt(0);
+ // reading a 0 results in NaN, compensate.
+ data = data.concat(isNaN(d) ? 0 : d);
+ }
+ writer.write(toBase64(data));
+ }
+}
+
+/* Convert data (an array of integers) to a Base64 string. */
+const toBase64Table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' +
+ '0123456789+/';
+const base64Pad = '=';
+function toBase64(data) {
+ var result = '';
+ var length = data.length;
+ var i;
+ // Convert every three bytes to 4 ascii characters.
+ for (i = 0; i < (length - 2); i += 3) {
+ result += toBase64Table[data[i] >> 2];
+ result += toBase64Table[((data[i] & 0x03) << 4) + (data[i+1] >> 4)];
+ result += toBase64Table[((data[i+1] & 0x0f) << 2) + (data[i+2] >> 6)];
+ result += toBase64Table[data[i+2] & 0x3f];
+ }
+
+ // Convert the remaining 1 or 2 bytes, pad out to 4 characters.
+ if (length%3) {
+ i = length - (length%3);
+ result += toBase64Table[data[i] >> 2];
+ if ((length%3) == 2) {
+ result += toBase64Table[((data[i] & 0x03) << 4) + (data[i+1] >> 4)];
+ result += toBase64Table[(data[i+1] & 0x0f) << 2];
+ result += base64Pad;
+ } else {
+ result += toBase64Table[(data[i] & 0x03) << 4];
+ result += base64Pad + base64Pad;
+ }
+ }
+
+ return result;
+}
+
+/* Convert Base64 data to a string */
+const toBinaryTable = [
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,
+ 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1, 0,-1,-1,
+ -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,
+ 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,
+ -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
+ 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1
+];
+function base64ToString(data) {
+ var result = '';
+ var leftbits = 0; // number of bits decoded, but yet to be appended
+ var leftdata = 0; // bits decoded, but yet to be appended
+
+ // Convert one by one.
+ for (var i = 0; i < data.length; i++) {
+ var c = toBinaryTable[data.charCodeAt(i) & 0x7f];
+ var padding = (data[i] == base64Pad);
+ // Skip illegal characters and whitespace
+ if (c == -1) continue;
+
+ // Collect data into leftdata, update bitcount
+ leftdata = (leftdata << 6) | c;
+ leftbits += 6;
+
+ // If we have 8 or more bits, append 8 bits to the result
+ if (leftbits >= 8) {
+ leftbits -= 8;
+ // Append if not padding.
+ if (!padding)
+ result += String.fromCharCode((leftdata >> leftbits) & 0xff);
+ leftdata &= (1 << leftbits) - 1;
+ }
+ }
+
+ // If there are any bits left, the base64 string was corrupted
+ if (leftbits)
+ throw Components.Exception('Corrupted base64 string');
+
+ return result;
+}
+
+if (DEBUG) debug = function(msg) {
+ dump(' -- XML-RPC client -- : ' + msg + '\n');
+};
+else debug = function() {}
+
+// vim:sw=4:sr:sta:et:sts:
--- /dev/null
+ pref("network.protocol-handler.app.http","/usr/bin/firefox");
+pref("network.protocol-handler.app.https","/usr/bin/firefox");
+pref("extensions.tiny.serverurl", "http://localhost");
+pref("extensions.tiny.serverport", "8069");
+pref("extensions.tiny.webserverurl", "http://localhost:8080");
+pref("extensions.tiny.webserverport", "8080");
+pref("extensions.tiny.serverdbname", "terp");
+pref("extensions.tiny.username","admin");
+pref("extensions.tiny.password","admin");
+pref("extensions.tiny.senderemail","");
+pref("extensions.tiny.sendername","");
+pref("extensions.tiny.statutdoc","");// add to have a statut to hidde or not the button
+pref("extensions.tiny.message_label","");// add to message in push dialog
+pref("extensions.tiny.receiveremail","");
+pref("extensions.tiny.subject","");
+pref("extensions.tiny.receiveddate","");
+pref("extensions.tiny.partnerid","");
+pref("extensions.tiny.contactid","");
+pref("extensions.tiny.attachvalue","");
+pref("extensions.tiny.cclist","");
+pref("extensions.tiny.messagebody","");
+pref("extensions.tiny.displayName","");
+pref("extensions.tiny.attachmentdata","");
+pref("extensions.tiny.userid",3);
+pref("extensions.tiny.partnername","");
+pref("extensions.tiny.officeno","");
+pref("extensions.tiny.phoneno","");
+pref("extensions.tiny.address","");
+pref("extensions.tiny.listobject","Partner,Account Invoice,Product,Sale Order,Lead and opportunities");
+pref("extensions.tiny.object","res.partner,account.invoice,product.product,sale.order,crm.lead");
+pref("extensions.tiny.imagename","chrome://openerp_plugin/skin/Partner.png,chrome://openerp_plugin/skin/Invoice.png,chrome://openerp_plugin/skin/Product.png,chrome://openerp_plugin/skin/Sale.png,chrome://openerp_plugin/skin/Case.png");
+pref("extensions.tiny.attachmentlength","");
+pref("extensions.tiny.attachment","");
+pref("extensions.tiny.db_list","false");
+pref("extensions.tiny.connect_server","false");
+pref("extensions.tiny.module_install","yes");
+pref("extensions.tiny.serverprotocol", "false");
+
+
+
+pref("mboximport.export.filenames_toascii", false);
+pref("mboximport.export.overwrite", false);
+pref("mboximport.confirm.before_mbox_import", true);
+pref("mboximport.clipboard.always_just_text", false);
+pref("mboximport.export.HTML_as_displayed", false);
+pref("mboximport.exportEML.filename_format", 0);
+pref("mboximport.delay.clean_statusbar", 5000);
+pref("mboximport.subject.max_length", 50);
+pref("mboximport.author.max_length", 50);
+pref("mboximport.recipients.max_length", 50);
+pref("extensions.{3ed8cc52-86fc-4613-9026-c1ef969da4c3}.description", "chrome://mboximport/locale/mboximport.properties");
+pref("mboximport.export.set_filetime", false);
+pref("mboximport.exportEML.use_dir", false);
+pref("mboximport.exportMBOX.use_dir", false);
+pref("mboximport.exportMSG.use_dir", false);
+pref("mboximport.export.filenames_addtime", false);
+pref("mboximport.export_all.warning1", true);
+pref("mboximport.export_all.warning2", true);
+
+pref("mboximport.exportMSG.dir", "/tmp");
+//For debug in console
+pref("browser.dom.window.dump.enabled", true);
+
--- /dev/null
+// constants
+const APP_DISPLAY_NAME = "OpenERP Thunderbird Plugins";
+const APP_NAME = "OpenERP";
+const APP_VERSION = "1.0";
+const WARNING = "WARNING: You need administrator privileges to install OpenERP Thunderbird Plugin. It will be installed in the application directory for all users.";
+const VERSION_ERROR = "This extension can only be installed in a version higher than 2.0";
+const NOT_WRITABLE_ERROR = "This extension requires write access to the application directory to install properly."
+const locales = [
+ "en-US",
+ null
+];
+
+// Gecko 1.7 doesn't support custom button labels
+var incompatible = (typeof Install.BUTTON_POS_0 == "undefined");
+if (incompatible)
+ alert(VERSION_ERROR);
+
+if (!incompatible) {
+ // Check whether all directories can be accessed
+ var dirList = [
+ getFolder("Components"),
+ getFolder(getFolder("Program", "defaults"), "pref")
+ ];
+ for (var i = 0; i < dirList.length; i++)
+ if (!File.isWritable(dirList[i]))
+ incompatible = true;
+
+ if (incompatible)
+ alert(NOT_WRITABLE_ERROR);
+}
+
+if (!incompatible && confirm(WARNING, APP_DISPLAY_NAME)) {
+ /* Pre-Install Cleanup (for prior versions) */
+
+ // List of files to be checked
+ var checkFiles = [
+ [getFolder("Components"), "nsXmlRpcClient.js"], // Root component
+ [getFolder("Components"), "xml-rpc.xpt"], // Component interface
+ ];
+
+ // Remove any existing files
+ initInstall("pre-install", "/rename", "0.0"); // open dummy-install
+ for (var i = 0 ; i < checkFiles.length ; i++) {
+ var currentDir = checkFiles[i][0];
+ var name = checkFiles[i][1];
+ var oldFile = getFolder(currentDir, name);
+
+ // Find a name to rename the file into
+ var newName = name + "-uninstalled";
+ for (var n = 1; File.exists(oldFile) && File.exists(getFolder(currentDir, newName)); n++)
+ newName = name + n + "-uninstalled";
+
+ if (File.exists(oldFile))
+ File.rename(oldFile, newName);
+ }
+ performInstall(); // commit renamed files
+
+ /* Main part of the installation */
+
+ var chromeType = DELAYED_CHROME;
+
+ var files = [
+ ["components/nsXmlRpcClient.js", getFolder("Components")],
+ ["components/xml-rpc.xpt", getFolder("Components")],
+ ["defaults/preferences/tiny.js", getFolder(getFolder("Program", "defaults"), "pref")],
+ ];
+
+ // initialize our install
+ initInstall(APP_NAME, APP_PACKAGE, APP_VERSION);
+
+ // Add files
+ for (var i = 0; i < files.length; i++)
+ addFile(APP_NAME, APP_VERSION, files[i][0], files[i][1], null);
+
+ try {
+ var err = registerChrome(CONTENT | chromeType, jar, "content/");
+ if (err != SUCCESS)
+ throw "Chrome registration for content failed (error code " + err + ").";
+
+ err = registerChrome(SKIN | chromeType, jar, "skin/classic/");
+ if (err != SUCCESS)
+ throw "Chrome registration for skin failed (error code " + err + ").";
+
+ for (i = 0; i < locales.length; i++) {
+ if (!locales[i])
+ continue;
+
+ err = registerChrome(LOCALE | chromeType, jar, "locale/" + locales[i] + "/");
+ if (err != SUCCESS)
+ throw "Chrome registration for " + locales[i] + " locale failed (error code " + err + ").";
+ }
+
+ var err = performInstall();
+ if (err != SUCCESS && err != 999)
+ throw "Committing installation failed (error code " + err + ").";
+
+ alert("OpenERP Thunderbird Plugin " + APP_VERSION + " is now installed.\n" +
+ "It will become active after you restart your browser.");
+ }
+ catch (ex) {
+ alert("Installation failed: " + ex + "\n" +
+ "You probably don't have the necessary permissions (log in as system administrator).");
+ cancelInstall(err);
+ }
+}
--- /dev/null
+<?xml version="1.0"?>\r
+<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\r
+ xmlns:em="http://www.mozilla.org/2004/em-rdf#">\r
+ <Description about="urn:mozilla:install-manifest">\r
+ <em:id>thunderbird@openerp.com</em:id>\r
+ <em:iconURL>chrome://openerp_plugin/skin/tinyerp-icon.ico</em:iconURL>\r
+ <em:name>OpenERP Plugin</em:name>\r
+ <em:version>1.0</em:version>\r
+ <em:description>OpenERP Thunderbird Integration</em:description>\r
+ <em:creator>OpenERP SA</em:creator>\r
+ <!-- optional items -->\r
+ <em:homepageURL>http://openerp.com</em:homepageURL>\r
+ <!-- Thunderbird -->\r
+ <em:targetApplication>\r
+ <Description>\r
+ <em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>\r
+ <em:minVersion>2.0</em:minVersion>\r
+ <em:maxVersion>9.*</em:maxVersion>\r
+ </Description>\r
+ </em:targetApplication>\r
+ </Description>\r
+</RDF>\r
--- /dev/null
+make clean
+make
+cp ../openerp_plugin.xpi /home/openerp/
--- /dev/null
+all: xpi
+
+jar:
+ jar cvf chrome/openerp_plugin.jar -C chrome/openerp_plugin/ .
+
+xpi: jar
+ zip -r ../openerp_plugin.xpi *
+
+clean:
+ rm ../openerp_plugin.xpi
+ rm chrome/openerp_plugin.jar
+++ /dev/null
-<openerp>
- <data>
-
- <record id="view_thunderbird_installer" model="ir.ui.view">
- <field name="name">thunderbird.installer.view</field>
- <field name="model">thunderbird.installer</field>
- <field name="type">form</field>
- <field name="inherit_id" ref="base.res_config_installer"/>
- <field name="arch" type="xml">
- <data>
- <form position="attributes">
- <attribute name="string">Install Thunderbird Plug-In</attribute>
- </form>
- <separator string="title" position="attributes">
- <attribute name="string">Install Thunderbird Plug-In</attribute>
- </separator>
- <xpath expr="//label[@string='description']" position="attributes">
- <attribute name="string">This plug-in allows you to link your e-mail to OpenERP's documents. You can attach it to any existing one in OpenERP or create a new one.</attribute>
- </xpath>
- <xpath expr="//button[@string='Install Modules']" position="replace">
- <button colspan="1" icon="gtk-close" special="cancel" string="_Close"/>
- </xpath>
- <xpath expr="//button[@string='Cancel']" position="replace">
- </xpath>
- <xpath expr="//separator[@string="vsep"]" position="attributes">
- <attribute name="string"/>
- <attribute name="rowspan">15</attribute>
- </xpath>
- <group colspan="8" position="replace">
- <group colspan="8" height="450" width="750">
- <field name="thunderbird" invisible="1"/>
- <field name="name" invisible="1"/>
- <field name="pdf_name" invisible="1"/>
- <newline/>
-
- <field name="plugin_file" filename="name" widget="url"/>
- <newline/>
- <field name="pdf_file" filename="pdf_name" widget="url"/>
- <newline/>
- <separator string="Installation and Configuration Steps" colspan="4"/>
- <field name="description" nolabel="1" colspan="8"/>
- </group>
- </group>
- </data>
- </field>
- </record>
-
- <record id="action_thunderbird_installer" model="ir.actions.act_window">
- <field name="name">Install Thunderbird Plug-In</field>
- <field name="type">ir.actions.act_window</field>
- <field name="res_model">thunderbird.installer</field>
- <field name="view_id" ref="view_thunderbird_installer"/>
- <field name="view_type">form</field>
- <field name="view_mode">form</field>
- <field name="target">new</field>
- </record>
-
- <record id="thunderbird_installer_todo" model="ir.actions.todo">
- <field name="action_id" ref="action_thunderbird_installer"/>
- <field name="category_id" ref="base.category_sales_management_config"/>
- <field name="sequence">3</field>
- <field name="type">automatic</field>
- </record>
-
-
- <record id="action_thunderbird_wizard" model="ir.actions.act_window">
- <field name="name">Install Thunderbird Plug-In</field>
- <field name="type">ir.actions.act_window</field>
- <field name="res_model">thunderbird.installer</field>
- <field name="view_id" ref="view_thunderbird_installer"/>
- <field name="view_type">form</field>
- <field name="view_mode">form</field>
- <field name="target">new</field>
- <field name="context">{'menu':True}</field>
- </record>
-
- <menuitem id="base.menu_base_config_plugins" name="Plugins" parent="base.menu_base_config" sequence="10"/>
- <menuitem id="menu_base_config_plugins_thunderbird" action="action_thunderbird_wizard" parent="base.menu_base_config_plugins" sequence="10"/>
-
- </data>
-</openerp>