Commit b73fef93 authored by Axel Brand's avatar Axel Brand Committed by daeva

i'm so sorry, this should fix things again...

git-svn-id: http://svn.igniterealtime.org/svn/repos/openfire/trunk@13573 b35dd754-fafc-0310-a699-88a17e54d16e
parent d64959a0

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

<?xml version="1.0" encoding="UTF-8"?>
<!--
Plugin configuration file for the admin console. This file must
live in the root of the plugin's directory.
-->
<plugin>
<class>org.jivesoftware.openfire.container.AdminConsolePlugin</class>
</plugin>
\ No newline at end of file
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Broadcast Plugin Changelog</title>
<style type="text/css">
BODY {
font-size : 100%;
}
BODY, TD, TH {
font-family : tahoma, verdana, arial, helvetica, sans-serif;
font-size : 0.8em;
}
H2 {
font-size : 10pt;
font-weight : bold;
padding-left : 1em;
}
A:hover {
text-decoration : none;
}
H1 {
font-family : tahoma, arial, helvetica, sans-serif;
font-size : 1.4em;
font-weight: bold;
border-bottom : 1px #ccc solid;
padding-bottom : 2px;
}
TT {
font-family : courier new;
font-weight : bold;
color : #060;
}
PRE {
font-family : courier new;
font-size : 100%;
}
</style>
</head>
<body>
<h1>
Broadcast Plugin Changelog
</h1>
<p><b>1.8.2</b> -- April 19, 2010</p>
<ul>
<li>Requires Openfire 3.7.0.</li>
<li>[<a href='http://www.igniterealtime.org/issues/browse/OF-127'>OF-127</a>] - Prepend string to broadcast messages.</li>
</ul>
<p><b>1.8.1</b> -- April 1, 2010</p>
<ul>
<li>Requires Openfire 3.7.0.</li>
<li>[<a href='http://www.igniterealtime.org/issues/browse/OF-359'>OF-359</a>] - Allows broadcasting to all (online and offline) users.</li>
</ul>
<p><b>1.8.0</b> -- December 1, 2009</p>
<ul>
<li>Now requires Openfire 3.7.0.</li>
<li>Applied Java generics.</li>
<li>[<a href='http://www.igniterealtime.org/issues/browse/OF-53'>OF-53</a>] - Replace custom logging implementation with a third party library.</li>
</ul>
<p><b>1.7.0</b> -- November 16, 2007</p>
<ul>
<li>Now requires Openfire 3.4.1.</li>
</ul>
<p><b>1.6.0</b> -- April 12, 2007</p>
<ul>
<li>Now requires Openfire 3.3.0.</li>
</ul>
<p><b>1.5.2</b> -- October 24, 2006</p>
<ul>
<li>Error messages now include the "from" attribute so that they are valid packets.</li>
</ul>
<p><b>1.5.1</b> -- October 06, 2006</p>
<ul>
<li>Updated to use compression offered by Openfire 3.1</li>
</ul>
<p><b>1.5.0</b> -- March 06, 2006</p>
<ul>
<li>Added service discovery support.</li>
<li>Improved presence management.</li>
<li>Fixed NPE when sending packet to the service itself.</li>
</ul>
<p><b>1.4.0</b> -- March 02, 2006</p>
<ul>
<li>Broadcast service can now be added as a roster contact.</li>
<li>Fixed checking to figure out if a user belongs to a group.</li>
<li>Fixed checking to figure out if a user was allowed to send a message to a group.</li>
</ul>
<p><b>1.3.1</b> -- December 15, 2005</p>
<ul>
<li>Now requires Openfire 2.4.0</li>
</ul>
<p><b>1.3</b> -- December 1, 2005</p>
<ul>
<li>Now requires Openfire 2.3.1</li>
</ul>
<p><b>1.2</b> -- April 11, 2005</p>
<ul>
<li>Now requires Openfire 2.1.3</li>
<li>Listens for properties being set and removed.
</ul>
<p><b>1.1</b> -- Feb 21, 2005</p>
<ul>
<li>Updated to new plugin API.</li>
</ul>
<p><b>1.0</b> -- Jan 15, 2005</p>
<ul>
<li>Initial release. </li>
</ul>
</body>
</html>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!--
Plugin configuration for the broadcast plugin.
-->
<plugin>
<class>org.jivesoftware.openfire.plugin.BroadcastPlugin</class>
<name>Broadcast</name>
<description>Broadcasts messages to users.</description>
<author>Jive Software</author>
<version>1.8.2</version>
<date>4/19/2010</date>
<url>http://www.igniterealtime.org</url>
<minServerVersion>3.7.0</minServerVersion>
</plugin>
\ No newline at end of file
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Broadcast Plugin Readme</title>
<style type="text/css">
BODY {
font-size : 100%;
}
BODY, TD, TH {
font-family : tahoma, verdana, arial, helvetica, sans-serif;
font-size : 0.8em;
}
H2 {
font-size : 10pt;
font-weight : bold;
}
A:hover {
text-decoration : none;
}
H1 {
font-family : tahoma, arial, helvetica, sans-serif;
font-size : 1.4em;
font-weight: bold;
border-bottom : 1px #ccc solid;
padding-bottom : 2px;
}
TT {
font-family : courier new;
font-weight : bold;
color : #060;
}
PRE {
font-family : courier new;
font-size : 100%;
}
</style>
</head>
<body>
<h1>
Broadcast Plugin Readme
</h1>
<h2>Overview</h2>
<p>
The broadcast plugin broadcasts messages to all users in the system or to specific groups. It's
primarily useful for sending announcements or notifications.
</p>
<h2>Installation</h2>
<p>Copy broadcast.jar into the plugins directory of your Openfire installation. The
plugin will then be automatically deployed. To upgrade to a new version, copy the new
broadcast.jar file over the existing file.</p>
<h2>Configuration</h2>
The broadcast plugin is configured via Openfire system properties. These can
be configured under Server/Server Manager/System Properties:
<ul>
<li><tt>plugin.broadcast.serviceName</tt> -- the name of the broadcast service. If no value
is set, the default is "broadcast".</li>
<li><tt>plugin.broadcast.disableGroupPermissions</tt> -- true to allow any user to
broadcast a message to a group. When false, only group members or administrators can
broadcast messages to a group. The default value is false.</li>
<li><tt>plugin.broadcast.groupMembersAllowed</tt> -- true to also allow group members
to send broadcast messages to groups they belong to. When false, only administrators can
send broadcast messages to a group. The default value is true. Note that the property value
of <tt>plugin.broadcast.disableGroupPermissions</tt> can effectively override this value
by letting anyone send broadcast messages to groups.</li>
<li><tt>plugin.broadcast.allowedUsers</tt> -- the comma-delimitted list of users allowed
to broadcast messages to all connected users at once. When this property isn't set,
anyone is allowed to broadcast messages to all users. Users should be specified by their
bare JID (e.g. john@myserver.com)</li>
<li><tt>plugin.broadcast.all2offline</tt> -- true to deliver broadcast messages sent
to all@[serviceName].[serverName] to online and offline users. When false or not
set only online users get the messages as described below.</li>
<li><tt>plugin.broadcast.messagePrefix</tt> -- Add a prefix for all broadcast
messages. Set this to "(broadcast)" to prepend "(broadcast)&nbsp;".
</li>
</ul>
<h2>Using the Plugin</h2>
To send a broadcast message, send a message to all@[serviceName].[serverName] or
[group]@[serviceName].[serverName]. For example, if your server is called foo and the
default service name is being used, a message to all@broadcast.foo would be broadcast to
all users connected to the server. For the group staff, a message to staff@broadcast.foo would
be sent to all users in the group staff that are currently online or offline.
<p>
Note: for maximum compatability between group implementations, it's recommended that you use
lower-case group names in conjunction with the broadcast plugin.
</p>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Client Control Plugin Changelog</title>
<style type="text/css">
BODY {
font-size : 100%;
}
BODY, TD, TH {
font-family : tahoma, verdana, arial, helvetica, sans-serif;
font-size : 0.8em;
}
H2 {
font-size : 10pt;
font-weight : bold;
padding-left : 1em;
}
A:hover {
text-decoration : none;
}
H1 {
font-family : tahoma, arial, helvetica, sans-serif;
font-size : 1.4em;
font-weight: bold;
border-bottom : 1px #ccc solid;
padding-bottom : 2px;
}
TT {
font-family : courier new;
font-weight : bold;
color : #060;
}
PRE {
font-family : courier new;
font-size : 100%;
}
</style>
</head>
<body>
<h1>
Client Control Plugin Changelog
</h1>
<p><b>1.1.0</b> -- December 1, 2009</p>
<ul>
<li>Now requires Openfire 3.7.0.</li>
<li>Applied Java generics.</li>
<li>[<a href='http://www.igniterealtime.org/issues/browse/OF-53'>OF-53</a>] - Replace custom logging implementation with a third party library.</li>
</ul>
<p><b>1.0.3</b> -- August 27, 2008</p>
<ul>
<li>Upgraded for Openfire 3.6.0 API.</li>
</ul>
<p><b>1.0.2</b> -- June 20, 2008</p>
<ul>
<li>Authentication is no longer required to download new Spark version.</li>
</ul>
<p><b>1.0.1</b> -- May 26, 2008</p>
<ul>
<li>Authentication is no longer required to download new Spark version.</li>
<li>Updated client name from Gaim to Pidgin.</li>
<li>Added missing icons.</li>
<li>Improved readme documentation.</li>
</ul>
<p><b>1.0.0</b> -- May 13, 2008</p>
<ul>
<li>Functionality ported from Openfire Enterprise, now Open Source.</li>
</ul>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<!-- Main plugin class -->
<class>org.jivesoftware.openfire.plugin.ClientControlPlugin</class>
<!-- Plugin meta-data -->
<name>Client Control</name>
<description>Controls clients allowed to connect and available features</description>
<author>Jive Software</author>
<version>1.1.0</version>
<date>12/1/2009</date>
<minServerVersion>3.7.0</minServerVersion>
<databaseKey>clientcontrol</databaseKey>
<databaseVersion>0</databaseVersion>
<!-- UI extension -->
<adminconsole>
<tab id="tab-server">
<sidebar id="client" name="${admin.sidebar.client.name}" description="${admin.sidebar.client.description}">
<item id="client-features" name="${admin.item.client-features.name}"
url="client-features.jsp"
description="${admin.item.client-features.description}"/>
<item id="client-version" name="${admin.item.client-version.name}"
url="permitted-clients.jsp"
description="${admin.item.client-version.description}"/>
<item id="groupchat-bookmarks" name="${admin.item.groupchat-bookmarks.name}"
url="groupchat-bookmarks.jsp"
description="${admin.item.groupchat-bookmarks.description}"/>
<item id="url-bookmarks" name="${admin.item.url-bookmarks.name}"
url="url-bookmarks.jsp"
description="${admin.item.url-bookmarks.description}"/>
<item id="spark-version" name="${admin.item.spark-version.name}"
url="spark-form.jsp"
description="${admin.item.spark-version.description}"/>
<item id="spark-download" name="${admin.item.spark-download.name}"
url="spark-download.jsp"
description="${admin.item.spark-download.description}"/>
</sidebar>
</tab>
</adminconsole>
</plugin>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Client Control Plugin Readme</title>
<style type="text/css">
BODY {
font-size : 100%;
}
BODY, TD, TH {
font-family : tahoma, verdana, arial, helvetica, sans-serif;
font-size : 0.8em;
}
H2 {
font-size : 10pt;
font-weight : bold;
}
A:hover {
text-decoration : none;
}
H1 {
font-family : tahoma, arial, helvetica, sans-serif;
font-size : 1.4em;
font-weight: bold;
border-bottom : 1px #ccc solid;
padding-bottom : 2px;
}
TT {
font-family : courier new;
font-weight : bold;
color : #060;
}
PRE {
font-family : courier new;
font-size : 100%;
}
#datatable TH {
color : #fff;
background-color : #2A448C;
text-align : left;
}
#datatable TD {
background-color : #FAF6EF;
}
#datatable .name {
background-color : #DCE2F5;
}
</style>
</head>
<body>
<h1>
Client Control Plugin Readme
</h1>
<h2>Overview</h2>
<p>
The client control plugin allows to specify which XMPP clients are allowed to connect to the server; which
client features are enabled; manage groupchat and URL bookmarks and control which Spark version should be
used by clients.
</p>
<p><i>Note: Filtering clients that are allowed to connect to the server depends on the identity presented
by the client. Therefore, a client that was modified to appear as another XMPP client may connect to the
server. However, only sophisticated and knowledgeable users may be able to do such modification.
</i></p>
<h2>Installation</h2>
<p>
Copy clientControl.jar into the plugins directory of your Openfire installation.
The plugin will then be automatically deployed. To upgrade to a new version,
copy the new clientControl.jar file over the existing file.
</p>
<p><i>Note: Installations using the spark manager plugin will need to uninstall the plugin before installing
this new plugin.
</i></p>
<h2>Upgrading from Enterprise</h2>
<p>
If you are upgrading from the Enterprise plugin, and wish to keep your old
bookmarks, you will need to manually run some database scripts to
perform the migration. Note, if you don't care about your previous
bookmarks, you don't have to worry about these steps.
</p>
<p>
First, you will need to shut down your Openfire server and remove the
enterprise plugin. To do this, perform the following steps:
<ol>
<li>Shut down your Openfire server</li>
<li>Remove the <b>enterprise.jar</b> file and the <b>enterprise</b> directory from the plugins directory in your Openfire install root</li>
<li>Install this plugin, <b>clientControl.jar</b> by copying it into the plugins directory.</li>
<li>At this point, you will need to start up Openfire and let it extract and install the <b>clientControl</b> plugin. You can watch for this to occur by looking under the Plugins tab in the Openfire admin console. Once it appears in the list, continue to the next step.</li>
<li>Shut the server back down again.</li>
<li>Go into your plugins/clientControl/database directory. There you will see
some scripts prefixed with <b>import_</b>. Log into your database, switch
to the Openfire's database as you configured during setup (you can find
this information in conf/openfire.xml if you don't remember it), and run
the script that matches the database you are using. Note that the embedded
database is hsqldb and you can use the script in bin/extra from the Openfire
install root (bin/extra/embedded-db-viewer.sh or
bin/extra/embedded-db-viewer.bat, depending on whether you are using Windows)
to access your embedded database.</li>
<li>Once the script has completed, you can start Openfire back up and all of your settings should be the way they were when you were running the Enterprise plugin.</li>
</ol>
</p>
</body>
</html>
-- $Revision$
-- $Date$
INSERT INTO ofVersion (name, version) VALUES ('clientcontrol', 0);
CREATE TABLE ofBookmark (
bookmarkID INTEGER NOT NULL,
bookmarkType VARCHAR(50) NOT NULL,
bookmarkName VARCHAR(255) NOT NULL,
bookmarkValue VARCHAR(1024) NOT NULL,
isGlobal INTEGER NOT NULL,
CONSTRAINT ofBookmark_pk PRIMARY KEY (bookmarkID)
);
CREATE TABLE ofBookmarkPerm (
bookmarkID INTEGER NOT NULL,
bookmarkType INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
CONSTRAINT ofBookmarkPerm_pk PRIMARY KEY(bookmarkID, name, bookmarkType)
);
CREATE TABLE ofBookmarkProp (
bookmarkID INTEGER NOT NULL,
name VARCHAR(100) NOT NULL,
propValue LONG VARCHAR NOT NULL,
CONSTRAINT ofBookmarkProp_pk PRIMARY KEY (bookmarkID, name)
);
// $Revision$
// $Date$
INSERT INTO ofVersion (name, version) VALUES ('clientcontrol', 0);
CREATE TABLE ofBookmark (
bookmarkID BIGINT NOT NULL,
bookmarkType VARCHAR(50) NOT NULL,
bookmarkName VARCHAR(255) NOT NULL,
bookmarkValue VARCHAR(1024) NOT NULL,
isGlobal INT NOT NULL,
CONSTRAINT ofBookmark_pk PRIMARY KEY (bookmarkID)
);
CREATE TABLE ofBookmarkPerm (
bookmarkID BIGINT NOT NULL,
bookmarkType INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
CONSTRAINT ofBookmarkPerm_pk PRIMARY KEY(bookmarkID, name, bookmarkType)
);
CREATE TABLE ofBookmarkProp (
bookmarkID BIGINT NOT NULL,
name VARCHAR(100) NOT NULL,
propValue LONGVARCHAR NOT NULL,
CONSTRAINT ofBookmarkProp_pk PRIMARY KEY (bookmarkID, name)
);
# $Revision$
# $Date$
INSERT INTO ofVersion (name, version) VALUES ('clientcontrol', 0);
CREATE TABLE ofBookmark (
bookmarkID BIGINT NOT NULL,
bookmarkType VARCHAR(50) NOT NULL,
bookmarkName VARCHAR(255) NOT NULL,
bookmarkValue VARCHAR(255) NOT NULL,
isGlobal INT NOT NULL,
PRIMARY KEY (bookmarkID)
);
CREATE TABLE ofBookmarkPerm (
bookmarkID BIGINT NOT NULL,
bookmarkType TINYINT NOT NULL,
name VARCHAR(255) NOT NULL,
PRIMARY KEY(bookmarkID, name, bookmarkType)
);
CREATE TABLE ofBookmarkProp (
bookmarkID BIGINT NOT NULL,
name VARCHAR(100) NOT NULL,
propValue TEXT NOT NULL,
PRIMARY KEY (bookmarkID, name)
);
-- $Revision$
-- $Date$
INSERT INTO ofVersion (name, version) VALUES ('clientcontrol', 0);
CREATE TABLE ofBookmark (
bookmarkID INTEGER NOT NULL,
bookmarkType VARCHAR2(50) NOT NULL,
bookmarkName VARCHAR2(255) NOT NULL,
bookmarkValue VARCHAR2(1024) NOT NULL,
isGlobal INT NOT NULL,
CONSTRAINT ofBookmark_pk PRIMARY KEY (bookmarkID)
);
CREATE TABLE ofBookmarkPerm (
bookmarkID INTEGER NOT NULL,
bookmarkType NUMBER(2) NOT NULL,
name VARCHAR2(255) NOT NULL,
CONSTRAINT ofBookmarkPerm_pk PRIMARY KEY(bookmarkID, name, bookmarkType)
);
CREATE TABLE ofBookmarkProp (
bookmarkID INTEGER NOT NULL,
name VARCHAR2(100) NOT NULL,
propValue LONG NOT NULL,
CONSTRAINT ofBookmarkProp_pk PRIMARY KEY (bookmarkID, name)
);
-- $Revision$
-- $Date$
INSERT INTO ofVersion (name, version) VALUES ('clientcontrol', 0);
CREATE TABLE ofBookmark (
bookmarkID INTEGER NOT NULL,
bookmarkType VARCHAR(50) NOT NULL,
bookmarkName VARCHAR(255) NOT NULL,
bookmarkValue VARCHAR(1024) NOT NULL,
isGlobal INTEGER NOT NULL,
CONSTRAINT ofBookmark_pk PRIMARY KEY (bookmarkID)
);
CREATE TABLE ofBookmarkPerm (
bookmarkID INTEGER NOT NULL,
bookmarkType SMALLINT NOT NULL,
name VARCHAR(255) NOT NULL,
CONSTRAINT ofBookmarkPerm_pk PRIMARY KEY(bookmarkID, name, bookmarkType)
);
CREATE TABLE ofBookmarkProp (
bookmarkID INTEGER NOT NULL,
name VARCHAR(100) NOT NULL,
propValue TEXT NOT NULL,
CONSTRAINT ofBookmarkProp_pk PRIMARY KEY (bookmarkID, name)
);
/* $Revision$ */
/* $Date$ */
INSERT INTO ofVersion (name, version) VALUES ('clientcontrol', 0);
CREATE TABLE ofBookmark (
bookmarkID BIGINT NOT NULL,
bookmarkType VARCHAR(50) NOT NULL,
bookmarkName NVARCHAR(255) NOT NULL,
bookmarkValue NVARCHAR(1024) NOT NULL,
isGlobal INT NOT NULL,
CONSTRAINT ofBookmark_pk PRIMARY KEY (bookmarkID)
);
CREATE TABLE ofBookmarkPerm (
bookmarkID BIGINT NOT NULL,
bookmarkType TINYINT NOT NULL,
name NVARCHAR(255) NOT NULL,
CONSTRAINT ofBookmarkPerm_pk PRIMARY KEY(bookmarkID, name, bookmarkType)
);
CREATE TABLE ofBookmarkProp (
bookmarkID BIGINT NOT NULL,
name NVARCHAR(100) NOT NULL,
propValue NTEXT NOT NULL,
CONSTRAINT ofBookmarkProp_pk PRIMARY KEY (bookmarkID, name)
);
TRUNCATE TABLE ofBookmark;
INSERT INTO ofBookmark
(bookmarkID, bookmarkType, bookmarkName, bookmarkValue, isGlobal)
SELECT bookmarkID, bookmarkType, bookmarkName, bookmarkValue, isGlobal
FROM entBookmark;
TRUNCATE TABLE ofBookmarkPerm;
INSERT INTO ofBookmarkPerm
(bookmarkID, bookmarkType, name)
SELECT bookmarkID, bookmarkType, name
FROM entBookmarkPerm;
TRUNCATE TABLE ofBookmarkProp;
INSERT INTO ofBookmarkProp
(bookmarkID, name, propValue)
SELECT bookmarkID, name, propValue
FROM entBookmarkProp;
\ No newline at end of file
TRUNCATE TABLE ofBookmark;
INSERT INTO ofBookmark
(bookmarkID, bookmarkType, bookmarkName, bookmarkValue, isGlobal)
SELECT bookmarkID, bookmarkType, bookmarkName, bookmarkValue, isGlobal
FROM entBookmark;
TRUNCATE TABLE ofBookmarkPerm;
INSERT INTO ofBookmarkPerm
(bookmarkID, bookmarkType, name)
SELECT bookmarkID, bookmarkType, name
FROM entBookmarkPerm;
TRUNCATE TABLE ofBookmarkProp;
INSERT INTO ofBookmarkProp
(bookmarkID, name, propValue)
SELECT bookmarkID, name, propValue
FROM entBookmarkProp;
\ No newline at end of file
TRUNCATE TABLE ofBookmark;
INSERT INTO ofBookmark
(bookmarkID, bookmarkType, bookmarkName, bookmarkValue, isGlobal)
SELECT bookmarkID, bookmarkType, bookmarkName, bookmarkValue, isGlobal
FROM entBookmark;
TRUNCATE TABLE ofBookmarkPerm;
INSERT INTO ofBookmarkPerm
(bookmarkID, bookmarkType, name)
SELECT bookmarkID, bookmarkType, name
FROM entBookmarkPerm;
TRUNCATE TABLE ofBookmarkProp;
INSERT INTO ofBookmarkProp
(bookmarkID, name, propValue)
SELECT bookmarkID, name, propValue
FROM entBookmarkProp;
\ No newline at end of file
TRUNCATE TABLE ofBookmark;
INSERT INTO ofBookmark
(bookmarkID, bookmarkType, bookmarkName, bookmarkValue, isGlobal)
SELECT bookmarkID, bookmarkType, bookmarkName, bookmarkValue, isGlobal
FROM entBookmark;
TRUNCATE TABLE ofBookmarkPerm;
INSERT INTO ofBookmarkPerm
(bookmarkID, bookmarkType, name)
SELECT bookmarkID, bookmarkType, name
FROM entBookmarkPerm;
TRUNCATE TABLE ofBookmarkProp;
INSERT INTO ofBookmarkProp
(bookmarkID, name, propValue)
SELECT bookmarkID, name, propValue
FROM entBookmarkProp;
commit;
TRUNCATE TABLE ofBookmark;
INSERT INTO ofBookmark
(bookmarkID, bookmarkType, bookmarkName, bookmarkValue, isGlobal)
SELECT bookmarkID, bookmarkType, bookmarkName, bookmarkValue, isGlobal
FROM entBookmark;
TRUNCATE TABLE ofBookmarkPerm;
INSERT INTO ofBookmarkPerm
(bookmarkID, bookmarkType, name)
SELECT bookmarkID, bookmarkType, name
FROM entBookmarkPerm;
TRUNCATE TABLE ofBookmarkProp;
INSERT INTO ofBookmarkProp
(bookmarkID, name, propValue)
SELECT bookmarkID, name, propValue
FROM entBookmarkProp;
\ No newline at end of file
TRUNCATE TABLE ofBookmark;
INSERT INTO ofBookmark
(bookmarkID, bookmarkType, bookmarkName, bookmarkValue, isGlobal)
SELECT bookmarkID, bookmarkType, bookmarkName, bookmarkValue, isGlobal
FROM entBookmark;
TRUNCATE TABLE ofBookmarkPerm;
INSERT INTO ofBookmarkPerm
(bookmarkID, bookmarkType, name)
SELECT bookmarkID, bookmarkType, name
FROM entBookmarkPerm;
TRUNCATE TABLE ofBookmarkProp;
INSERT INTO ofBookmarkProp
(bookmarkID, name, propValue)
SELECT bookmarkID, name, propValue
FROM entBookmarkProp;
\ No newline at end of file
##
## Client Control Resource Bundle
##
## Additional locales can be specified by creating a new resource file in this
## directory using the following conventions:
##
## clientcontrol_i18n "_" language "_" country ".properties"
## clientcontrol_i18n "_" language ".properties"
##
## e.g.
## clientcontrol_i18n_en.propertis <- English resources
## clientcontrol_i18n_en_US.properties <- American US resources
## clientcontrol_i18n_de.properties <- German resources
## clientcontrol_i18n_ja.properties <- Japanese resources
##
## Please note that the two digit language code should be lower case, and the
## two digit country code should be in uppercase. Often, it is not necessary to
## specify the country code.
##
## A full list of language codes can be found at
## http://www-old.ics.uci.edu/pub/ietf/http/related/iso639.txt
## and a full list of country codes can be found at
## http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html
##
## In property strings that are parameterized, single quotes can be used to
## quote the "{" (curly brace) if necessary. A real single quote is represented by ''.
##
## REVISION HISTORY (by version):
##
## 1.0.0
## Initial Release
##
# Enterprise
login.title = Admin Console
error.exception = Exception:
plugin.name=Client Control
plugin.description=Client Control for Openfire.
admin.sidebar.client.name=Client Management
admin.sidebar.client.description=Manage Client Features and Spark Deployments
admin.item.client-features.name=Client Features
admin.item.client-features.description=Click to enable and disable client features.
admin.item.client-version.name=Permitted Clients
admin.item.client-version.description=Click to configure which client applications can connect to \
your server.
admin.item.groupchat-bookmarks.name=Group Chat Bookmarks
admin.item.groupchat-bookmarks.description=Click to manage group chat bookmarks for users.
admin.item.url-bookmarks.name=URL Bookmarks
admin.item.url-bookmarks.description=Click to manage URL bookmarks for users.
admin.item.spark-version.name=Spark Version
admin.item.spark-version.description=Click to set the Spark client version for each platform.
admin.item.spark-download.name=Download Spark
admin.item.spark-download.description=Download Spark.
# Enteprise Spark Manager
client.features.title = Client Features
client.feature = Feature
client.features.spark.only = (Spark Only)
client.features.update.features = Client feature permissions have been updated.
client.features.info = Use the form below to enable or disable client features. \
Note: Some of the client restrictions only apply to the Spark client.
client.features.broadcasting = Broadcasting
client.features.broadcasting.description = Allow for broadcasting of messages to specified groups or entire roster.
client.features.enabled = Enabled
client.features.disabled = Disabled
client.features.filetransfer = File Transfer
client.features.filetransfer.description = Allow for sending of files from one user to another.
client.features.groupchat = Group Chat
client.features.groupchat.description = Allow for joining of Group Chat rooms.
client.features.vcard = Avatar/VCard
client.features.vcard.description = Allow users to change their profiles and avatars.
client.features.save.settings = Save Settings
permitted.client.title = Permitted Clients
permitted.client.description = Use the form below to restrict client access.
permitted.client.success = Client version settings have been updated.
permitted.client.legend = Clients Allowed to Connect
permitted.client.all.clients = All Clients
permitted.client.all.clients.description = Allow all XMPP clients to connect. This is the recommended \
setting unless you have strict client control requirements.
permitted.client.specific.clients = Specify Client(s)
permitted.client.add.other.client = Add Other Client
permitted.client.save.settings = Save Settings
permitted.client.add = Add
permitted.client.remove = remove
permitted.client.tooltip = Specify the name of the client which is returned by the Software Version check. \
The name you specify must be<br>part of the string returned by the fetch call.
permitted.client.website=website
spark.version.title = Spark Version
spark.version.instructions = Set the specific version of the Spark IM client users can use \
with your system for each operating system. If you deploy a new version, users will be \
automatically notified to upgrade.
spark.version.form.builds = Place builds in the following directory:
spark.version.form.upload = Upload Spark Client:
spark.version.form.button = Upload Spark
spark.version.form.confirmation.build = Build information updated successfully.
spark.version.form.confirmation.upload = New spark file uploaded.
spark.version.form.clients.active = Active
spark.version.form.clients.name = Client Name
spark.version.form.clients.date = Date
spark.version.form.clients.nobuilds = No builds available.
spark.version.form.clients.windows = Windows Clients
spark.version.form.clients.mac = Mac Clients
spark.version.form.clients.nix = Linux/Unix Clients
spark.version.form.optional = Optional Message
spark.version.form.optional.instructions = Use the text area below to specify a message that \
each client will see during the download of a new build.
spark.version.form.update = Update Spark Versions
spark.download.title = Spark Download
spark.download.instructions = To download Spark directly, use the following links:
spark.download.nobuild = No build available.
spark.download.windows = Windows:
spark.download.mac = Mac OSX:
spark.download.nix = Linux/Unix:
spark.download.emailtemplate = Email Template
spark.download.emailtemplate.instructions = You can use the following text as a template for \
notifying users about where to download the Spark IM client.
spark.download.emailtemplate.template.part1 = We've deployed a new instant messaging system based \
on the Openfire server and Spark IM client that has strong security and a lot of great \
features. Getting up and running only takes a few minutes. Download the installer from:
spark.download.emailtemplate.template.part2 = Once you've performed the initial installation, \
the client will automatically notify you when updates are available.
spark.download.emailtemplate.template.part3 = When the client starts, enter your username and password along with the server name {0}.
spark.download.emailtemplate.template.part4 = Please contact me for your username and password.
# Enterprise Bookmarks
users = Users
groups = Groups
options = Options
cancel = Cancel
create = Create
group.chat.bookmark.title = Group Chat Bookmarks
group.chat.bookmark.description = Create bookmarks for group chat rooms below. Each bookmark can be assigned to particular individuals or groups (or all users).
group.chat.bookmark.created = Group chat bookmark has been created.
group.chat.bookmark.removed = Group chat bookmark removed.
group.chat.bookmark.name = Group Chat Name
group.chat.bookmark.address = Group Chat Address
group.chat.bookmark.autojoin = Auto-Join
group.chat.bookmark.users = user(s)
group.chat.bookmark.groups = group(s)
group.chat.bookmark.none = You do not currently have any group chat bookmarks. Click the 'add group chat bookmark' to add a new group chat room.
group.chat.bookmark.add = Add Group Chat Bookmark
bookmark.edit = Edit Bookmark
bookmark.create = Create Bookmark
bookmark.created = A new bookmark has been created.
bookmark.url.name = URL Name
bookmark.url.name.description = eg. Our Internal Website
bookmark.url = URL
bookmark.url.manager.title = URL Bookmark Manager
bookmark.url.manager.description = Allows creation of URL Bookmarks in a users IM client. URL Bookmarks allow \
for quick access to frequently used links, directly from their client.
bookmark.url.success = A URL Bookmark has been created.
bookmark.url.deleted = URL Bookmark deleted.
bookmark.url.users = Users
bookmark.url.groups = Groups
bookmark.url.rss = RSS
bookmark.url.options = Options
bookmark.url.no.bookmarks = You do not currently have any URL Bookmarks. Click the 'add url bookmark' to add a new url bookmark.
bookmark.url.add = Add URL Bookmark
bookmark.create.rss.feed = RSS Feed:
bookmark.create.all.users = All Users
bookmark.url.error = Please specify a url to use.
bookmark.browse.users = Browse Users
bookmark.browse.groups = Browse Groups
bookmark.users.groups.error = You must specify users and/or groups to create a valid bookmark.
bookmark.save.changes = Save Changes
bookmark.urlName.error = Please specify the name of the url.
bookmark.groupchat.name.error = Please specify the group chat name.
bookmark.groupchat.address.error = Please specify a valid address of the group chat room.
bookmark.url.create.description = Create a new URL bookmark using the form below.
bookmark.groupchat.create.description = Create a new group chat room bookmark using the form below.
bookmark.url.edit.description = Edit URL bookmark using the form below.
bookmark.groupchat.edit.description = Edit group chat room bookmark using the form below.
bookmark.delete.confirm = Delete this bookmark?
bookmark.delete.confirm.prompt = Are you sure you want to remove this bookmark?
bookmark.delete.url.urlname = URL Name:
bookmark.delete.url.url = URL:
bookmark.delete.url.users = Users:
bookmark.delete.url.groups = Groups:
bookmark.delete.url.submit = Delete
bookmark.delete.url.cancel = Cancel
bookmark.delete.chat.groupname = Group Chat Name:
bookmark.delete.chat.address = Group Chat Address:
bookmark.delete.chat.users = Users:
bookmark.delete.chat.groups = Groups:
bookmark.delete.chat.autojoin = Auto-Join:
bookmark.delete.chat.submit = Delete
bookmark.delete.chat.cancel = Cancel
\ No newline at end of file
/**
* Copyright (C) 2008 Jive Software. All rights reserved.
*
* 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.
*/
package org.jivesoftware.openfire.plugin;
import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;
import org.jivesoftware.openfire.plugin.spark.SparkManager;
import org.jivesoftware.openfire.plugin.spark.BookmarkInterceptor;
import org.jivesoftware.openfire.plugin.spark.TaskEngine;
import org.jivesoftware.openfire.plugin.spark.manager.SparkVersionManager;
import org.jivesoftware.openfire.plugin.spark.manager.FileTransferFilterManager;
import org.jivesoftware.util.JiveGlobals;
import java.io.File;
import java.io.FileFilter;
/**
* Client control plugin.
*
* @author Matt Tucker
*/
public class ClientControlPlugin implements Plugin {
private SparkManager sparkManager;
private BookmarkInterceptor bookmarkInterceptor;
private SparkVersionManager sparkVersionManager;
private FileTransferFilterManager fileTransferFilterManager;
private TaskEngine taskEngine;
/**
* Constructs a new client control plugin.
*/
public ClientControlPlugin() {
}
// Plugin Interface
public void initializePlugin(PluginManager manager, File pluginDirectory) {
System.out.println("Starting Client Control Plugin");
// Check if we Enterprise is installed and stop loading this plugin if found
File pluginDir = new File(JiveGlobals.getHomeDirectory(), "plugins");
File[] jars = pluginDir.listFiles(new FileFilter() {
public boolean accept(File pathname) {
String fileName = pathname.getName().toLowerCase();
return (fileName.equalsIgnoreCase("enterprise.jar"));
}
});
if (jars.length > 0) {
// Do not load this plugin since Enterprise is still installed
System.out.println("Enterprise plugin found. Stopping Client Control Plugin");
throw new IllegalStateException("This plugin cannot run next to the Enterprise plugin");
}
taskEngine = TaskEngine.getInstance();
sparkManager = new SparkManager(taskEngine);
sparkManager.start();
// Create and start the bookmark interceptor, which adds server-managed bookmarks when
// a user requests their bookmark list.
bookmarkInterceptor = new BookmarkInterceptor();
bookmarkInterceptor.start();
// Create and start the Spark version manager
sparkVersionManager = new SparkVersionManager();
sparkVersionManager.start();
fileTransferFilterManager = new FileTransferFilterManager();
fileTransferFilterManager.start();
}
public FileTransferFilterManager getFileTransferFilterManager() {
return fileTransferFilterManager;
}
public void destroyPlugin() {
if (sparkManager != null) {
sparkManager.stop();
sparkManager.shutdown();
sparkManager = null;
}
if (bookmarkInterceptor != null) {
bookmarkInterceptor.stop();
bookmarkInterceptor = null;
}
if (sparkVersionManager != null) {
sparkVersionManager.shutdown();
sparkVersionManager = null;
}
if (fileTransferFilterManager != null) {
fileTransferFilterManager.stop();
fileTransferFilterManager = null;
}
taskEngine.shutdown();
}
}
/**
* Copyright (C) 1999-2008 Jive Software. All rights reserved.
*
* 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.
*/
package org.jivesoftware.openfire.plugin.spark;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.jivesoftware.database.DbConnectionManager;
import org.jivesoftware.util.NotFoundException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Manages global bookmarks. Bookmarks are defined by
* <a href="http://www.jabber.org/jeps/jep-0048.html">JEP-0048</a>. Users can define and
* manage their own bookmarks. Global bookmarks add to a user's own bookmarks and are
* defined by system administrators to apply to all users, groups, or sets of users.
*
* @see Bookmark
* @author Derek DeMoro
*/
public class BookmarkManager {
private static final Logger Log = LoggerFactory.getLogger(BookmarkManager.class);
private static final String DELETE_BOOKMARK = "DELETE FROM ofBookmark where bookmarkID=?";
private static final String SELECT_BOOKMARKS = "SELECT bookmarkID from ofBookmark";
/**
* Returns the specified bookmark.
*
* @param bookmarkID the ID of the bookmark.
* @return the bookmark.
* @throws NotFoundException if the bookmark could not be found or loaded.
*/
public Bookmark getBookmark(long bookmarkID) throws NotFoundException {
// TODO add caching
return new Bookmark(bookmarkID);
}
/**
* Returns all bookmarks.
*
* @return the collection of bookmarks.
*/
public static Collection<Bookmark> getBookmarks() {
// TODO: add caching.
List<Bookmark> bookmarks = new ArrayList<Bookmark>();
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(SELECT_BOOKMARKS);
rs = pstmt.executeQuery();
while (rs.next()) {
long bookmarkID = rs.getLong(1);
try {
Bookmark bookmark = new Bookmark(bookmarkID);
bookmarks.add(bookmark);
}
catch (NotFoundException nfe) {
Log.error(nfe.getMessage(), nfe);
}
}
}
catch (SQLException e) {
Log.error(e.getMessage(), e);
}
finally {
DbConnectionManager.closeConnection(rs, pstmt, con);
}
return bookmarks;
}
/**
* Deletes a bookmark with the specified bookmark ID.
*
* @param bookmarkID the ID of the bookmark to remove from the database.
*/
public static void deleteBookmark(long bookmarkID) {
Connection con = null;
PreparedStatement pstmt = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(DELETE_BOOKMARK);
pstmt.setLong(1, bookmarkID);
pstmt.execute();
}
catch (SQLException e) {
Log.error(e.getMessage(), e);
}
finally {
DbConnectionManager.closeConnection(pstmt, con);
}
}
}
<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<!-- Servlets -->
<servlet>
<servlet-name>SparkDownload</servlet-name>
<servlet-class>org.jivesoftware.openfire.plugin.spark.manager.SparkDownloadServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Servlet mappings -->
<servlet-mapping>
<servlet-name>SparkDownload</servlet-name>
<url-pattern>/getspark</url-pattern>
</servlet-mapping>
</web-app>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment