diff options
Diffstat (limited to '')
-rw-r--r-- | etherpad/src/etherpad/control/pro/admin/pro_admin_control.js | 6 | ||||
-rw-r--r-- | etherpad/src/etherpad/pne/pne_utils.js | 41 | ||||
-rw-r--r-- | etherpad/src/static/css/pad2_ejs.css | 4 | ||||
-rw-r--r-- | etherpad/src/static/js/broadcast_slider.js | 2 | ||||
-rw-r--r-- | etherpad/src/templates/pad/exporthtml.ejs | 28 | ||||
-rw-r--r-- | etherpad/src/templates/pro/admin/pro-config.ejs | 55 | ||||
-rw-r--r-- | etherpad/src/themes/default/templates/pro/admin/admin-template.ejs | 2 | ||||
-rw-r--r-- | infrastructure/com.etherpad.openofficeservice/importexport.scala | 110 | ||||
-rw-r--r-- | infrastructure/lib/java_uno-3.2.0.jar | bin | 0 -> 4205 bytes | |||
-rw-r--r-- | infrastructure/lib/juh-3.2.0.jar | bin | 0 -> 55517 bytes | |||
-rw-r--r-- | infrastructure/lib/jurt-3.2.0.jar | bin | 0 -> 108138 bytes | |||
-rw-r--r-- | infrastructure/lib/ridl-3.2.0.jar | bin | 0 -> 256497 bytes | |||
-rw-r--r-- | infrastructure/lib/unoil-3.2.0.jar | bin | 0 -> 1415707 bytes | |||
-rw-r--r-- | infrastructure/net.appjet.oui/execution.scala | 1 |
14 files changed, 194 insertions, 55 deletions
diff --git a/etherpad/src/etherpad/control/pro/admin/pro_admin_control.js b/etherpad/src/etherpad/control/pro/admin/pro_admin_control.js index 6d482ce..1364176 100644 --- a/etherpad/src/etherpad/control/pro/admin/pro_admin_control.js +++ b/etherpad/src/etherpad/control/pro/admin/pro_admin_control.js @@ -48,17 +48,11 @@ function _getLeftnavItems() { _PRO, [ [_PRO, null, "Admin"], [_PNE_ONLY, "pne-dashboard", "Server Dashboard"], - [_PNE_ONLY, "pne-license-manager/", "Manage License"], [_PRO, "account-manager/", "Manage Accounts"], [_PRO, "recover-padtext", "Recover Pad Text"], [_PRO, null, "Configuration"], [_PRO, [[_PNE_ONLY, "pne-config", "Private Server Configuration"], [_PRO, "pro-config", "Application Configuration"]]], - [_PNE_ONLY, null, "Documentation"], - [_PNE_ONLY, "/ep/pne-manual/", "Administrator's Manual"], - [_ONDEMAND_ONLY, null, "Billing"], - [_ONDEMAND_ONLY, "billing/", "Payment Information"], - [_ONDEMAND_ONLY, "billing/invoices", "Past Invoices"], ] ]; return nav; diff --git a/etherpad/src/etherpad/pne/pne_utils.js b/etherpad/src/etherpad/pne/pne_utils.js index bc105bd..073ad2a 100644 --- a/etherpad/src/etherpad/pne/pne_utils.js +++ b/etherpad/src/etherpad/pne/pne_utils.js @@ -117,6 +117,7 @@ function saveDbVersion() { var _eepneAllowedConfigVars = [ 'configFile', + 'etherpad.soffice', 'etherpad.useMySQL', 'etherpad.SQL_JDBC_DRIVER', 'etherpad.SQL_JDBC_URL', @@ -134,54 +135,14 @@ var _eepneAllowedConfigVars = [ ]; function isServerLicensed() { - var licenseInfo = licensing.getLicense(); - if (!licenseInfo) { - return false; - } - if (licensing.isVersionTooOld()) { - return false; - } - if (licensing.isExpired()) { - return false; - } return true; } function enableTrackingAgain() { - delete appjet.cache.noMorePneTracking; } function pneTrackerHtml() { - if (!isPNE()) { - return ""; - } - if (appjet.cache.noMorePneTracking) { - return ""; - } - - var div = DIV({style: "height: 1px; width: 1px; overflow: hidden;"}); - - var licenseInfo = licensing.getLicense(); - var key = null; - if (licenseInfo) { - key = md5(licenseInfo.key).substr(0, 16); - } - - function trackData(name, value) { - var imgurl = "http://etherpad.com/ep/tpne/t?"; - if (key) { - imgurl += ("k="+key+"&"); - } - imgurl += (encodeURIComponent(name) + "=" + encodeURIComponent(value)); - div.push(IMG({src: imgurl})); - } - - trackData("ping", "1"); - trackData("dbdriver", appjet.config['etherpad.SQL_JDBC_DRIVER']); - trackData("request.url", request.url); - appjet.cache.noMorePneTracking = true; - return div; } diff --git a/etherpad/src/static/css/pad2_ejs.css b/etherpad/src/static/css/pad2_ejs.css index 08e95d2..df367c4 100644 --- a/etherpad/src/static/css/pad2_ejs.css +++ b/etherpad/src/static/css/pad2_ejs.css @@ -166,9 +166,9 @@ a#hidetopmsg { position: absolute; right: 5px; bottom: 5px; } { position:absolute; top: 6px; - left: 570px; + right: 7px; height: 24px; - width:15px; + width:23px; } #editbarsavetable td, #editbartable td diff --git a/etherpad/src/static/js/broadcast_slider.js b/etherpad/src/static/js/broadcast_slider.js index 255d7f2..8977e3d 100644 --- a/etherpad/src/static/js/broadcast_slider.js +++ b/etherpad/src/static/js/broadcast_slider.js @@ -138,7 +138,7 @@ var global = this; swatchtd.append(swatch); tr.append(swatchtd); var nametd = $('<td></td>'); - nametd.html(author.name || "unnamed"); + nametd.text(author.name || "unnamed"); tr.append(nametd); $("#authorstable").append(tr); } else { diff --git a/etherpad/src/templates/pad/exporthtml.ejs b/etherpad/src/templates/pad/exporthtml.ejs new file mode 100644 index 0000000..288a595 --- /dev/null +++ b/etherpad/src/templates/pad/exporthtml.ejs @@ -0,0 +1,28 @@ +<% /* Copyright 2009 Google Inc. + +Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> +<HEAD> + <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8"> + <TITLE></TITLE> + <STYLE TYPE="text/css"> + <!-- + @page { margin: 0.79in } + P { margin-bottom: 0.08in } + --> + </STYLE> +</HEAD> +<BODY LANG="en-US" DIR="LTR"> +<%= pre ? '<PRE>' : '' %><%= content %><%= pre ? '</PRE>' : '' %> +</BODY> +</HTML>
\ No newline at end of file diff --git a/etherpad/src/templates/pro/admin/pro-config.ejs b/etherpad/src/templates/pro/admin/pro-config.ejs new file mode 100644 index 0000000..32cb610 --- /dev/null +++ b/etherpad/src/templates/pro/admin/pro-config.ejs @@ -0,0 +1,55 @@ +<% /* Copyright 2009 Google Inc. + +Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS-IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ %> +<h3 class="top">Application Configuration</h3> + +<%= messageDiv() %> + +<form action="<%= request.path %>" method="post"> + +<table id="t-pro-config"> + <tr> + <th width="50%" valign="top">Site Name (appears in + the header of all pages):</th> + <td width="50%" valign="top"> + <input type="text" name="siteName" value="<%= + config.siteName %>" id="siteName" /> + </td> + </tr> + + <tr> + <th valign="top">Always require all users on this domain to use secure + (HTTPS) connections?</th> + <td valign="top"> + <input type="checkbox" id="alwaysHttps" name="alwaysHttps" + <%= config.alwaysHttps ? 'checked="on"' : '' %> /> + </td> + </tr> + + <tr> + <th valign="top">Default pad text:</th> + <td valign="top"> + <textarea name="defaultPadText" id="defaultPadText"><%= + config.defaultPadText %></textarea> + </td> + </tr> + + <tr> + <td colspan="2" style="text-align: right;"> + <input type="submit" name="save" value="Apply" /> + </td> + </tr> +</table> + +</form> + diff --git a/etherpad/src/themes/default/templates/pro/admin/admin-template.ejs b/etherpad/src/themes/default/templates/pro/admin/admin-template.ejs index 0964e33..e1a7736 100644 --- a/etherpad/src/themes/default/templates/pro/admin/admin-template.ejs +++ b/etherpad/src/themes/default/templates/pro/admin/admin-template.ejs @@ -16,9 +16,11 @@ limitations under the License. */ %><% helpers.setHtmlTitle("Etherpad Administra <div class="fpcontent"> <table id="admin-layout-table"> <tr> + <% if (validLicense) { %> <td width="1%" id="admin-leftnav"> <%= renderAdminLeftNav() %> </td> + <% } %> <td width="99%" id="admin-right"> <%= getAdminContent() %> </td> diff --git a/infrastructure/com.etherpad.openofficeservice/importexport.scala b/infrastructure/com.etherpad.openofficeservice/importexport.scala index f5150ad..606cff9 100644 --- a/infrastructure/com.etherpad.openofficeservice/importexport.scala +++ b/infrastructure/com.etherpad.openofficeservice/importexport.scala @@ -21,14 +21,24 @@ import net.appjet.common.sars.{SarsServer,SarsMessageHandler}; import java.io.{DataInputStream,DataOutputStream}; import java.io.{File,FileOutputStream,ByteArrayInputStream,ByteArrayOutputStream}; +/* Libraries needed for OO.org Conversion */ +import com.sun.star.bridge.{XBridge,XBridgeFactory}; +import com.sun.star.beans.{PropertyValue,XPropertySet}; +import com.sun.star.connection.{NoConnectException,XConnection,XConnector}; +import com.sun.star.container.XNamed; +import com.sun.star.document.{XExporter,XFilter}; +import com.sun.star.frame.{XComponentLoader,XStorable}; +import com.sun.star.lang.{XComponent,XMultiComponentFactory}; +import com.sun.star.uno.{UnoRuntime,XComponentContext}; + class OOSException(m: String) extends RuntimeException(m); class UnsupportedFormatException(format: String) extends OOSException("Unsupported format: "+format); object TemporaryFailure extends OOSException("Temporary failure"); -// stub object here. Please replace if you'd like to use openoffice! object OpenOfficeServerUtility { def checkServerAvailability(host: String, port: Int): Boolean = { - return false; + // Assume the server is running; this is the responsibility of the user + return true; } def runOpenOfficeServer(path: String, host: String, port: Int, timeout: Int, wait: Boolean) { // nothing @@ -36,12 +46,82 @@ object OpenOfficeServerUtility { } class OpenOfficeFileConverter { + var host: String = "localhost"; + var port: Int = 8100; + def setOpenOfficeServerDetails(host: String, port: Int) { - // nothing + this.host = host; + this.port = port; } def convertFile(src: File, dst: File, converter: String, extension: String): Boolean = { - return false; + try { + val fromFile: String = "file:///" + src.getAbsolutePath(); + val toFile: String = "file:///" + dst.getAbsolutePath(); + + val cnx: String = "socket,host="+this.host+",port="+this.port+""; + val xRemoteContext: XComponentContext = com.sun.star.comp.helper.Bootstrap.createInitialComponentContext(null); + val x: Object = xRemoteContext.getServiceManager().createInstanceWithContext("com.sun.star.connection.Connector", xRemoteContext); + val xConnector: XConnector = UnoRuntime.queryInterface(classOf[XConnector], x).asInstanceOf[XConnector]; + val connection: XConnection = xConnector.connect(cnx); + + if(connection == null) { + throw new OOSException("Connection failure"); + } + val x2: Object = xRemoteContext.getServiceManager().createInstanceWithContext("com.sun.star.bridge.BridgeFactory", xRemoteContext); + val xBridgeFactory: XBridgeFactory = UnoRuntime.queryInterface(classOf[XBridgeFactory], x2).asInstanceOf[XBridgeFactory]; + val xBridge: XBridge = xBridgeFactory.createBridge("", "urp", connection, null); + val x3: Object = xBridge.getInstance("StarOffice.ServiceManager"); + if (x3 == null) { + throw new OOSException("Failed to get bridge"); + } + + val xMultiComponentFactory: XMultiComponentFactory = UnoRuntime.queryInterface(classOf[XMultiComponentFactory], x3).asInstanceOf[XMultiComponentFactory]; + val xProperySet: XPropertySet = UnoRuntime.queryInterface(classOf[XPropertySet], xMultiComponentFactory).asInstanceOf[XPropertySet]; + val oDefaultContext: Object = xProperySet.getPropertyValue("DefaultContext"); + val xComponentContext: XComponentContext = UnoRuntime.queryInterface(classOf[XComponentContext], oDefaultContext).asInstanceOf[XComponentContext]; + + val desktopObj: Object = xMultiComponentFactory.createInstanceWithContext("com.sun.star.frame.Desktop", xComponentContext); + val xcomponentloader: XComponentLoader = UnoRuntime.queryInterface(classOf[XComponentLoader], desktopObj).asInstanceOf[XComponentLoader]; + + if(xcomponentloader == null) { + throw new OOSException("XComponent Loader could not be loaded"); + } + + val loadProps: Array[PropertyValue] = new Array[PropertyValue](2); + loadProps(0) = new PropertyValue(); + loadProps(0).Name = "Hidden"; + loadProps(0).Value = boolean2Boolean(false); + + loadProps(1) = new PropertyValue(); + loadProps(1).Name = "UpdateDocMode"; + loadProps(1).Value = "1"; + + val component: XComponent = xcomponentloader.loadComponentFromURL(fromFile,"_blank", 0, loadProps); + + if (component == null) { + throw new OOSException("Failed to load document"); + } + + val convProps: Array[PropertyValue] = new Array[PropertyValue](2); + convProps(0) = new PropertyValue(); + convProps(0).Name = "FilterName"; + convProps(0).Value = converter; + + val xstorable: XStorable = UnoRuntime.queryInterface(classOf[XStorable],component).asInstanceOf[XStorable]; + if (xstorable == null) { + throw new OOSException("Storable could not be loaded"); + } + xstorable.storeToURL(toFile, convProps); + component.dispose(); + return true; + } + catch { + case e => { + e.printStackTrace(); + throw new OOSException("Unknown exception occurred: "+e.getMessage()); + } + } } } @@ -69,6 +149,14 @@ object OpenOfficeService { soffice = exec; } + var openOfficeServerHost: String = "localhost"; + var openOfficeServerPort: Int = 8100; + + def setOpenOfficeServer(host: String, port: Int) { + openOfficeServerHost = host; + openOfficeServerPort = port; + } + def convertFile(from: String, to: String, bytes: Array[byte]): Array[byte] = { if (from == to) { return bytes; @@ -77,8 +165,18 @@ object OpenOfficeService { val tempFile = createTempFile(bytes, from); val outFile = createTempFile(null, to); - val openOfficeServerHost = "localhost"; - val openOfficeServerPort = 8100; + /* + Just hardcoding server and port here. + If you intend to use an Openoffice.org instance on a network machine, + do it at your risk. + + Just, remember to setOpenOfficeServer from etherpad/importexport/importexport.js, + Also, remember that OO.org is reading and writing files over file:/// URI. So, make sure that + you can access the files from network machine. Hint, NFS. Not Need for Speed game, you idiot, + Network File System. + + */ + if (! OpenOfficeServerUtility.checkServerAvailability(openOfficeServerHost, openOfficeServerPort)) { try { OpenOfficeServerUtility.runOpenOfficeServer(soffice, openOfficeServerHost, openOfficeServerPort, 20000, true); diff --git a/infrastructure/lib/java_uno-3.2.0.jar b/infrastructure/lib/java_uno-3.2.0.jar Binary files differnew file mode 100644 index 0000000..1f23dd0 --- /dev/null +++ b/infrastructure/lib/java_uno-3.2.0.jar diff --git a/infrastructure/lib/juh-3.2.0.jar b/infrastructure/lib/juh-3.2.0.jar Binary files differnew file mode 100644 index 0000000..5345fe2 --- /dev/null +++ b/infrastructure/lib/juh-3.2.0.jar diff --git a/infrastructure/lib/jurt-3.2.0.jar b/infrastructure/lib/jurt-3.2.0.jar Binary files differnew file mode 100644 index 0000000..50f2346 --- /dev/null +++ b/infrastructure/lib/jurt-3.2.0.jar diff --git a/infrastructure/lib/ridl-3.2.0.jar b/infrastructure/lib/ridl-3.2.0.jar Binary files differnew file mode 100644 index 0000000..de46acb --- /dev/null +++ b/infrastructure/lib/ridl-3.2.0.jar diff --git a/infrastructure/lib/unoil-3.2.0.jar b/infrastructure/lib/unoil-3.2.0.jar Binary files differnew file mode 100644 index 0000000..b1e77aa --- /dev/null +++ b/infrastructure/lib/unoil-3.2.0.jar diff --git a/infrastructure/net.appjet.oui/execution.scala b/infrastructure/net.appjet.oui/execution.scala index f4f4d9e..dc17c29 100644 --- a/infrastructure/net.appjet.oui/execution.scala +++ b/infrastructure/net.appjet.oui/execution.scala @@ -39,6 +39,7 @@ import Util.enumerationToRichEnumeration; class RequestWrapper(val req: HttpServletRequest) { req.setCharacterEncoding("UTF-8"); +// REMOVED_COS_OF_COS ... ? // private lazy val parameterNames = // (for (i <- Conversions.convertSet(req.getParameterMap.keySet().asInstanceOf[java.util.Set[String]])) yield i).toList.toArray // private def parameterValues(k: String) = req.getParameterValues(k); |