Return to Jive Software

New releases today: 5/20/09

 

NOTE:  The changes in this release apply to Postgres and MySQL only.  If you are running your system on Oracle or SQL Server Databases please wait until the June 8th release to upgrade.

 

This release is an off-schedule release to address a potential community database corruption issue, there are two changes  that were added to both 3.0.3 and 2.5.12:

  • CS-13219: Merging and deleting communities can cause lft/rgt tree value corruption
  • CS-13268: sgroup.askjoin German translation updated (affect German resource bundle only)

 

Downloads are available via your purchases page.

Jive SBS 3.0.3

Full Documentation

Changelog

Clearspace 2.5.12

Full Documentation

Changelog

1,939 Views 0 Comments Permalink

Introducing the CTF

 

When Jive SBS released this March with the newly developed Content Type Framework (CTF), it unlocked a world of limitless possibilities.  Perhaps one of the greatest (and most overlooked) features in the Jive SBS 3.0 release, the CTF allows business owners the ability to dream big without taking a big hit to the wallet by providing developers with simple, easy-to-use hooks for creating new content types like events, ideas, forms and more.  Customizations that would have previously taken several months or longer can be condensed into far shorter development cycles and can now all be done inside of a plugin.  This has the added benefit of reducing long-term cost of ownership, as it ensures developers will be insulated from core product changes, making upgrades and patch release updates a breeze.

 

Naturally, given all of the benefits of the framework, we couldn't resist taking advantage of it ourselves!  In the latest release of the Supportal we introduced a new customer environment tracking feature built on top of the CTF that we hope will shape our customer support experience in the months and years to come.

 

 

What is a customer environment?

 

Simply put, it is a collection of structured data that gives Support details on your setup, e.g., which version of the product you are using, the database you're hooked up to, and special configuration options that you use.  When published, they look similar to a document:

 

environment_view.png

 

Because the environment form is built on top of the CTF, commenting, tagging, search and other extras are all features that essentially come along for free.  The editing experience is just like a regular form:

 

environment_edit.png

 

Once an environment has been created, you'll want to use it when creating new cases in the Supportal:

 

environment_to_case.png

 

 

Why should I create an environment?

 

I'm glad you asked!  Well, first off, if you're an Enterprise SaaS customer, we already have you covered, so no need to worry.  Jive Support will create an environment document for you with the correct details and name it clearly so you know which one to use when creating new support cases.  If you're hosting the software internally, consider these benefits:

 

  • Faster Response Times
    Once you fill out an environment, we'll never again have to ask you which version you're running on or what Java options you're using!  Less back and forth with our Support Engineers means less time spent gathering details and more time on fixing problems and answering questions.  Plus, if you have multiple environments that you manage, the environment tracking feature clarifies which one your case pertains to for both your colleagues and our support team. 

  • Transparency
    We're all about keeping people in the loop and environment tracking does just that.  If your system admin goes on vacation, you won't be struggling to find the information you need to help our Support team resolve the problem.  Plus, if a technical person needs to come up to speed on a case you have submitted, all of the details are available in one central place. 

  • Improved Customer Support in the Future
    When you associate an environment to your case, you're helping us build a repository of information that enables us to identify areas of collective strength and weakness.  Environment tracking opens the door for advanced reporting capabilities that were previously impossible or very difficult at the least.  It also allows us to make better decisions about the direction of the product.

 

 

Is my data safe?

 

When you create an environment, it will only be visible within your secure customer space in the Supportal, so only those with access to your secure space will be able to see the information, even if your case is made public.  And we're not evil, so we'll never share your data with third parties.  Your data is safe with us!

 

Now, after all this, if you still have concerns about creating an environment to associate with your next case, please let us know why! We're hope you're happy with our constant improvements to our Support tool and invite all feedback, either on this blog post or in our Support Feedback space.

 

Thanks and enjoy!

 

 

Additional Reading

 

If you're still reading, you must be a developer saying "I'm excited about creating my own custom content type!  Where do I start?"  For a deeper look at custom content types, start here.  After you have browsed through the documentation, download the example memo content type plugin from our public plugins SVN repository:

 

https://svn.jivesoftware.com/svn/dev/repos/jive/plugins/memo-type-example/trunk/

 

The memo custom content type is a simple example that demonstrates the power of the Content Type Framework.  Check it out and start playing!

2,185 Views 0 Comments Permalink Tags: support, supportal, environment, sbs, custom_content_type, customer_environment, environment_tracking, ctf, content_type_framework

New releases today: 5/11/09

Downloads are available via your purchases page.

Jive SBS 3.0.2

Full Documentation

Changelog

Clearspace 2.5.11

Full Documentation

Changelog


1,741 Views 0 Comments Permalink Tags: jive_sbs, 3.0.2, 2.5.11

Welcome to Jive SBS! We just upgraded our Jivespace community to SBS 3.0.1, and along with it upgraded the Supportal customization, adding a few new features and improvements.

 

If you see any issues, please post a discussion in our Supportal Feedback space or create a public case there, and we'll get it addressed quickly.

 

Now, on to the new features:

 

An updated Open Cases widget allows prioritizing by the customer

We previously allowed you to view your open cases, but sometimes when you have a few open cases it can be helpful to rank them in importance--both for you and your company, but for us as well. Have a look at it here, and it will automatically be in your account's secure space next time you log in!

 

http://content.screencast.com/users/klassikstile/folders/Jing/media/021663a7-277a-4f3f-a755-08d636bfc98c/2009-04-06_1501.png

 

Account Member Management falls into the hands of the Customer

Prior to this Supportal upgrade, if you wanted to add or remove someone from your secure space, you needed to ask Support to do so. Well, with the upgraded Supportal, you can now put this power into the hands of someone that is currently a part of your account. There is still one manual step, asking Support to appoint one of your users as 'user admin' for your account. Once designated, the user admin can add and remove users, as well as add/remove the admin privilege should that assignment need to change. You can see the link to manage account members on the Group Membership Widget on your secure space overview. Don't see it? Ask Support to add it to your account space today!

 

 

First integrated Environment tracking on cases

Are you tired of Support continually asking what version you're running, or similar questions? Well, we're tired of asking it too ! We've now taken the first step to associating Environments to each and every one of your cases. That way, if the version does matter, we can simply take a look at the environment you have associated with the case and dive right into troubleshooting. What's the catch? We are going to need you to keep these as current as possible in order to make this all work smoothly. We are hoping to evolve this to be able to eliminate the Product drop down and solely use Environments in the future. We welcome your feedback and help in shaping this new feature in the Supportal. Please visit our Supportal Feedback space to do this.

 

environments.png

 

Lastly, some new UI when creating a case

As you can see from the screenshot above, we've added some indication of what fields are required when creating a new case, and something you may also not notice is that we have taken away the 'Stage' detail as it was not useful to us.

 

Again, please let us know if you see any issues, and we hope you enjoy the new Supportal and the overall upgrade to SBS!

1,918 Views 5 Comments Permalink Tags: jivespace, upgrade, supportal, sbs

New releases today: 4/13/09

Downloads are available via your purchases page. You can expect the next patch release to be available in 4 weeks

Jive SBS 3.0.1

Full Documentation

Changelog

Clearspace 2.5.10

Full Documentation

Changelog

Clearspace 2.0.15

Full Documentation

Changelog

Please be aware, this is the final patch release for 2.0.x.  For more information, please refer to this post.

1,971 Views 1 Comments Permalink

We got a lot of good feedback from customers when we announced the 3.0 builds and platform changes. As a result, we've added back support for the MySQL and SQLServer databases. I'd like to take a minute to address some of the feedback and explain some of the background for this move.

 

As background, we've changed the way we package and ship our software. I just published an in-depth look at the benefits of this move - a good read if you're looking to understand more.

 

The package we've built is available on Linux and Solaris and runs on the following databases: MySQL, Postgres, Oracle, and MS SQLServer. The application itself is available as an installable package and bundles an application server, Java runtime, the app itself, and a set of optimized preconfigurations (example: tuned JVM settings).

 

Why make this move? A number of reasons. We talk to customers often and the consistent number one priorities are performance, scalability, stability, and the support experience. We get a lot of great feature and improvement ideas but those top priorities are the air customers breathe. Based on that, we try to move the needle in these areas significantly for each release. For example, for the 2.5 release we managed a 40% performance improvement overall. In 3.0 the numbers aren't quite as dramatic but we've added new features and performance has not suffered. As we looked up and down our architecture it became clear that some new thinking was needed.

 

The application has evolved past the point where it can be distributed as a standalone WAR file (however, to be clear - a WAR does still exist in the bundle). The context in which it runs is vitally important, especially for things like performance but also for features. We need the ability to depend on the environment we run in and there is a lot of variance in server-side Java deployments.

 

On the support side, we've seen too many misconfigurations in the environment. For example, sometimes we see issues where a customer is unable to change the parameters of the VM either to allocate more heap memory or to change the GC settings - these kinds of things are vitally important to the Jive app. Another big challenge is just access to the right log/debug files - none of this is consistent among appservers. Also, oftentimes the best information is a Java heap dump and we've seen the ability to get that information be a real challenge. In the new package, we've distributed a script that grabs every relevant log file and heap dump and zips it up in a way that can easily be sent to our support team. We feel this will dramatically improve the time-to-resolve issues.

 

What doesn't change? It's important to note that development, customizations, plugins, themes, etc don't change in at all. For example, how you deploy a plugin is exactly the same. Clustering also works in the same way. This is not an appliance, nor is it a black box. (Note, an appliance is something we'd consider as an option for future deployments - let us know if you have feedback on this approach).

 

We believe there are a lot of benefits to this approach. Ultimately, this foundation will allow us to develop some very unique features while delivering continued huge performance and scalability gains. We definitely recognize some customers will have problems migrating to this platform and we're more than willing to make it work for you - just let us know.

 

(One final note: within a week we will announce when the extra database support will be available.)

 

If you have questions, comment on this post or feel free to drop me a line at bill@jivesoftware.com.

3,195 Views 14 Comments Permalink Tags: platform, 3.0, sbs

New releases today: 3/19/09

Downloads are available via your purchases page

Clearspace 2.5.9

Full Documentation

Clearspace 2.0.14

Full Documentation

You can expect the next patch release to be available in 4 weeks

Please be aware, the next patch release for 2.0.x will be the last release before 2.0.x transitions to its legacy phase.  For more information, please refer to this post.

Fixed Issues in 2.5.9

  •            
  • [CS-11727] Pasting a link into the editor in a non pre / blockquote block doesn't change to a persistent link
  • [CS-12161] Backport - Improve logic in CommunityProxy.getCommunityCount() to better support large numbers of communities     
  • [CS-11875] Browsing spaces (/community) causes the page to load indefinitely with a large # of spaces             
  • [CS-11793] Typo error in plugin upload: atleast          
  • [CS-11792] Recent content hovering of a guest avatar fails with system error             
  • [CS-11776] Escaped characters from wiki syntax are showing the escape backslash after content is converted to 2.5 format            
  • [CS-11739] Email templates have some hardcoded locale settings for i18n keys             
  • [CS-11593] Body content conversion process can fail with some 1.10 content if the APPLY_CUSTOMER_SPECIFIC_CONTENT_CONVERSION variable is set to true             
  • [CS-11546] Inconsistencies in page titles             
  • [CS-11522] social group cannot be deleted if it contains a banned member            
  • [CS-11473] Organizational relationship -> filter by user name showing incorrect results.             
  • [CS-11454] applying a new license should not change system properties            
  • [CS-11375] Guest messages with name property don't show name in thread list or recent content             
  • [CS-11352] UserService disable / enable annotations are reversed             
  • [CS-11343] UserContainerManager is null when running through setup             
  • [CS-11301] Compare versions has scrollbar in IE7 that cuts off last line of text             
  • [CS-11282] IPInterceptor email subject and body needs real text            
  • [CS-11281] Report abuse on thread changes modification date             
  • [CS-11260] More context links dropped when linking via RTE            
  • [CS-11191] Approving/Rejecting content reported as abusive sends a confusing email to the content author            
  • [CS-11123] Default peoples page view: cannot set to sort by name          
  • [CS-11120] Accepting connection request can result in erroneous friend graph for requesting party.             
  • [CS-11104] Moderation: rejected messages still show-up for admins/moderators             
  • [CS-11075] Thread paginator does not take moderated messages into account when determining how many pages to show             
  • [CS-11061] Migration from MSSQL server to postgres is not migrating document bodies             
  • [CS-11060] Upgrade from 1.10.x to 2.5.x documents with wiki links to other documents and no title, title gets changed to URL of document on edit             
  • [CS-11034] Setting max number of Message Attachments < 3 causes Social Group image creation error  - Bullfrog            
  • [CS-10989] Tabs: cursor interprets as text instead of link for IE            
  • [CS-10714] Can't invite users to projects            
  • [CS-10658] Time zone selection under 'Your Preferences' does not change with locale.             
  • [CS-10626] Punctuation from UTF8 languages is not recognized as valid in poll options            
  • [CS-10587] <BODY></BODY> on Live Writer is breaking BLOG            
  • [CS-10554] Tags that contain double quotes cause the Javascript on the view tags page to give errors             
  • [CS-10460] Editing the space name and display name or deleting a space should clear the community cache             
  • [CS-10423] Wiki documents containing unbalanced HTML tags fail to upgrade from 1.10 to 2.5             
  • [CS-10422] StackOverflowException encountered in WikiLexer during upgrade             
  • [CS-10417] Keyboard navigation in the RTE is buggy at times             
  • [CS-10390] Recent content only has 100 items            
  • [CS-10417] Keyboard navigation in the RTE is buggy at times            
  • [CS-10390] Recent content only has 100 items           
  • [CS-10386] IP Interceptor email not being sent due to a typo             
  • [CS-10382] XSS on DOCs IE6             
  • [CS-10372] Email Visible setting not saving changes             
  • [CS-10368] Responding to email and adding a gateway address as recipient creates blank guest post            
  • [CS-10320] LDAP user First and Last name fields get merged into First Name on Clearspace             
  • [CS-10319] The discussions and document tabs on a community home page are not lining up with other tabs in IE             
  • [CS-10302] Invitation to Group doesn't work if user previous left group            
  • [CS-10300] userproxy incorrectly delegates isSetNameVisibleSupported to isSetNameSupported            
  • [CS-10246] JiveCompressionFilter.isLesserIE null pointer exception if no user-agent is set            
  • [CS-10215] Restarting the server will change an email gateway's IMAP folder to INBOX, and reset SSL enabled to false             
  • [CS-10209] Search -> More options still has box for Discussions and Documents even when those features are disabled             
  • [CS-10208] On User Profile Invite Friends to Join Link Has Incorrect Parameters             
  • [CS-10176] Report abuse on a thread makes the last post by information incorrect until a new message is posted             
  • [CS-10164] Incoming link to document still shows after document isn't linked anymore             
  • [CS-10136] Images are not displaying correctly if resized and/or sitting in a table cell             
  • [CS-10133] User Search in Admin Console doesn't paginate             
  • [CS-10105] Inconsistent result filter behavior with extended properties             
  • [CS-10098] Document page does not open in a highly populated database             
  • [CS-10074] Spotlight search is not looking for tags            
  • [CS-10059] XSS on blog Comments as Guest          
  • [CS-10049] Suggested tags and popular tags list contains tags from all spaces rather than just the one the user is in             
  • [CS-10001] XSS on Blog trackbacks            
  • [CS-9987] System error viewing to PDF a document with international characters            
  • [CS-9934] The Browse Spaces page is very non performant when there are a large number of spaces            
  • [CS-9895] Index rebuilds continuously due to overflow            
  • [CS-9755] Default Status Level show null as a large image            
  • [CS-9754] Missing status level image: statusicon-46.gif and statusicon-52.gif            
  • [CS-9751] TOC macro hidden after initial publish            
  • [CS-9748] Reset Password allows you to go under 6 character minimum            
  • [CS-9746] Changing a user's username will result in incorrect path to their blog           
  • [CS-9702] modification date on containers isn't be updated when new messages or new blog posts or new comments are posted            
  • [CS-9661] Attachments are deleted from the database            
  • [CS-9603] You View tab broken when using non-English locale            
  • [CS-9594] Excell 2007 icon not showing on the binary body            
  • [CS-9484] Display bug in Admin Console Discussion Management IE            
  • [CS-9483] Give the tag display page for a space the option to be recursive            
  • [CS-9445] Html code macros containing object/param tags fails to render            
  • [CS-9417] Minor information disclousre in /clearspace/people            
  • [CS-9338] Out of memory error in tomcat when sending private messages in clustered environment            
  • [CS-9117] Wrong translation of verb "to be" in email template in Spanish           
  • [CS-9106] Plugin based macros are not properly applying their properties           
  • [CS-8940] all watches are created as expirable which means watches on users, spaces, groups, projects and communities are getting deleted           
  • [CS-8827] HTML emails are not processed correctly via email gateway            
  • [CS-8687] Updating Formatted Text Widget Will Fail if Widget Text is Too Long Votes: 1
  • [CS-8317] Upgrade "Restart Needed" screen should have link back to site.          
  • [CS-7896] Senior Cluster Node Not Showing Recent Content Beyond Front Page            
  • [CS-7654] Jump to Blog is displaying error, if blog address is longer than 40 characters.
  •       
2,407 Views 21 Comments Permalink Tags: 2.5.9, 2.0.14

I'm happy to announce that the Jive SBS 3.0 build we blogged about last week is now available for download and is fully supported. Now you can download the new build from your purchases or evaluation page. (Note to current customers - a link to the 3.0 builds will automatically appear for you this week - in the meantime, try the evaluation build.)

 

Documentation, and a brief description of what's new, improved, and changed, can be found in the Jive SBS 3.0 documentation site. Release notes are also available.

 

Also of note this release is a change to the way the application is packaged and distributed. We now ship a fully configured and optimized runtime for Linux and Solaris along with the application (note - the Solaris build will be available in Q2). This means there's no need to configure the Java runtime or an application server - it's all bundled. This significantly reduces the time to install the application and means customers can take advantage of the most optimal configurations. For more information, please read the system requirements documentation.

 

Finally, we have a number of customers using Jive in different languages - here is the release schedule:

 

3.0.0 (3/16/09)
3.0.1 (4/13/09)
3.0.2 (5/11/09)
3.0.3 (6/8/09)
  • English
  • Spanish
  • French
  • Simplified Chinese
  • German
  • Italian
  • Japanese

 

 

 

Update: based on feedback on this post and other feedback we've decided to continue support for the MySQL and SQLServer databases. Specific dates for these changes will be announced within a week. For more details, please read the new blog post: More Details on the Jive 3.0 Platform.



4,445 Views 65 Comments Permalink Tags: download, build, 3.0

Effective April 13th, 2009, Clearspace 2.0.X will enter Legacy product support phase. Version 2.0.15 will be the final scheduled maintenance release.

During the Legacy phase Jive will no longer be performing scheduled maintenance releases.  Customers still running on 2.0.x are encouraged to upgrade to the latest version of the product and should contact support for assistance with any problems encountered during upgrade.  Jive Software may continue to provide critical bug fix releases to customers on Legacy versions with current support contracts on an as needed basis.  In order to issue a patch for a Legacy version, the customer reported issue must be critical; I.E. loss of major functionality, the site is down, or customer is unable to upgrade.

If you have any questions on how this may affect your installation of Clearspace, please log a case in your account community in Jive's Support Portal, or send an email to support@jivesoftware.com. Jive is committed to our customers success and their realizing the increased value and capabilities of our most recent releases.  If you wish to discuss any assistance or planning around your upgrade, please email us at ps@jivesoftware.com.

Information on our support policy can be found here Jive Support Services

3,167 Views 0 Comments Permalink Tags: legacy_support

One very important feature of the Supportal that can sometimes be overlooked is the ability to make a case public.  A public case is just a case that shows as a discussion thread in a community that can be viewed by anyone.

 

The Supportal makes it easy to change a case from just being a normal case in your secure account space into a public case that can benefit the whole Clearspace user base.  Let's take a look at how this is done:

A private case

Let's suppose that you've already created a case in your secure account space.  As a customer, when you view the case, the case fields will look like this:

blogpost_privatecase.png

Notice the "public" check box is not checked.  Also, notice that the breadcrumbs at the top show that the case thread is in the secure account space as expected.

 

A public case

Being a good citizen of the broader Clearspace user community, you see that this question or issue that you had in this case is something that others may encounter as well.  Making this case public would help others out because if they are searching for an answer to the same question, this case thread will then show in their search results and they can find that answer quickly.  Who knows, maybe they will then return the favor by making a case they have public as well which could benefit you later on down the road .

 

Ok, so you look at the content of the case thread and ensure that there is nothing there that is sensitive information, and you decide to make the case public.  How is this done?  With just two easy steps:

  1. Click the "public" check box to indicate you want the case publicly viewable.
  2. After clicking the check box, you'll see a combo box showing the possible communities that you can put the public case in.  Choose whatever community makes most sense for the content of the case thread.

 

Now, click the "Update Case" button.  Looks like nothing changed right?

blogpost_publiccase.png

 

Take a look at the breadcrumbs.  Notice that this discussion thread is now listed as being in the public community that you selected above.

blogpost_publicbreadcrumb.png

Also, notice that the case now has a box that says "This is a public case which is tied to your support account.  Your community is located here:"  The "Account Community" link takes you back to the homepage for your secure account space.

 

But wait.  You still want this to show as a case in your list of cases in your secure account space so you can easily reference it for yourself later right?  No problem.

blogpost_community.png

blogpost_casestab.png

The case appears as expected in the list of cases in your secure account space, but it actually resides in a public community now.  You can manage the case as you would any other private case, but the content of that case is now benefiting the whole community!

 

The code

Making the case a publicly viewable case was easy enough right?  Surely, the code behind the scenes must be complicated!

 

Not at all!

 

When the "Public" check box is checked, some Javascript on the page fires to show the communities that the case thread can be moved to:

function changeVisibility()
{
    if (document.getElementById('publicCase').checked==true) {
        document.getElementById('publicCommunityTag1').style.display="table-row";
    }
    else {
        document.getElementById('publicCommunityTag1').style.display="none";
    }
}

The list of community options that are show in the community drop down is populated in the action class with this code:

public List<Community> getPublicCommunityOptions() {
    List<Community> availCommunities = new ArrayList<Community>();
    Community root = communityManager.getRootCommunity();
    for (Community c : communityManager.getRecursiveCommunities(root)) {
        if (!accountManager.isAccountContainer(c)) {
            availCommunities.add(c);
        }
    }
    return availCommunities;
}

The call to accountManager.isAccountContainer(c) calls a custom class in the Supportal that basically just checks to see if the community has an extended property set that marks it as a secure account space or not.  If the community is not an account space, it is eligible for putting public cases into.

 

Here is the code from the method responsible for doing the move:

private void moveCaseThread(ForumThread caseThread, long targetContainerID) {
     try {
          Community publicCommunity = communityManager.getCommunity(targetContainerID);
          forumManager.moveThread(caseThread, publicCommunity);
      }

The first line gets the Community object for the community that the discussion thread is going to be moved to (the one that was selected in our example above).  The second line is what causes the move of the discussion thread to occur.

 

What about the code responsible for having the public case still show in the open cases widget?

 

We store the account that the case was created in originally as an extended property on the ForumThread object.  So, to get all the threads associated with a private account community, we use this SQL:

SELECT threadID FROM jiveThreadProp WHERE name='caseAccountID' AND propValue=<PRIVATE_ACCOUNT_ID> ORDER BY threadID DESC

This gives us a list of the thread ids for all threads that are associated with <PRIVATE_ACCOUNT_ID> no matter what community that thread actually lives in.

 

That's really pretty much all there is to it.

 

 

So the next time you open a new case with Jive Software Support, ask yourself, "Would the broader Clearspace user community benefit from the question and answer I just had?"  If the answer is "yes," (and really, when is the answer not "yes?" ), make it public!

3,502 Views 1 Comments Permalink Tags: customize, supportal, public_case

New releases today: 2/09/09

Downloads are available via your purchases page

Clearspace 2.5.7

Full Documentation

Clearspace 2.0.13

Full Documentation

You can expect the next release of Clearspace in roughly 4 weeks.

 

If you're looking for 1.10 downloads, please note, that version has transitioned into legacy support, please read this blog post for more information: Announcing: Jive Clearspace Version 1.X Enters Legacy Support Phase January 12th 2009

2,968 Views 2 Comments Permalink

Last episode I explained how we create the secure spaces and setup permissions (see How do the account spaces get created anyway? Is it private?). This post deals with the default widgets that come with a newly created community, and how we had to customize this functionality to meet our requirements.

 

defaultLayout.png

 

I. How it's done out of the box

 

To do this, let's first take a look at how it would be done out of the box:

 

  1. Create a new community
  2. Then get re-directed to the newly created community

          Here, community.ftl will call CommunityAction's getWidgetLayout via:

 

 

<#if widgetLayout?exists>
    <div id="jive-body-main">
        <div id="jive-widget-content">
            <div id="thread.watch.notify" class="jive-info-box" style="display:none">
            </div>

            <#include "/template/global/include/form-message.ftl" />

            <#include "${widgetLayout.freemarkerTemplate}" />

        </div>
    </div>
</#if>

And within getWidgetLayout() you'll see that if we haven't customized a community and a layout doesn't exist yet, we'll just copy the default:

 

public WidgetLayout getWidgetLayout() {
        try {
            if (!isHasCustomized()) {
                // if no draft widget frames exist, then no default layout exists
                if (widgetManager.getWidgetFrames(getCommunity()).size() == 0) {
                    copyDefaultLayout();
                }
                .....

 

 

And to copy the default, we do this:

 

 

/**
* Copy the default layout (large left, small right) to the current community.
*/
     protected void copyDefaultLayout() {
          WidgetManager widgetManagerUnproxied = (widgetManager instanceof WidgetManagerProxy) ? ((WidgetManagerProxy)widgetManager).getUnproxiedObject() : widgetManager;
 
          try {
               WidgetLayoutDescriptor wld = widgetManagerUnproxied.getWidgetLayoutByName(TwoColumnLargeLeftColumnLayout.class.getName());
               WidgetLayout wl = widgetManagerUnproxied.getWidgetLayout(wld);
               widgetManagerUnproxied.addWidgetLayout(getCommunity(), wl);
          .....             

 

 

 

And at that point, you'll have the default layout with no widgets, and so further down the line you'll see a call to getWidgetFrames, and similarly to above it will copy the default:

 

 

public Map<Integer, List<WidgetFrame>> getWidgetFrames() {
        if (!isHasCustomized()) {
            if (widgetManager.getWidgetFrames(getCommunity()).size() == 0) {
                copyDefaultFrames();
            }
          .....

 

 

which will add the default widgets:

 

/**
     * Copy the default widget frames to the current community:
     *  <ul>
     *      <li>Left: Sub-Spaces</li>
     *      <li>Left: Projects</li>
     *      <li>Left: Recent Activity</li>
     *      <li>Right: Actions</li>
     *      <li>Right: Top Members</li>
     *      <li>Right: Tag Cloud</li>
     *  </ul>
     */
    protected void copyDefaultFrames() {
        try {
            WidgetManager widgetManagerUnproxied = (widgetManager instanceof WidgetManagerProxy) ? ((WidgetManagerProxy)widgetManager).getUnproxiedObject() : widgetManager;
 
            // column 1
            int row = 0;
            if (widgetManagerUnproxied.getWidgetByName(SubCommunitiesWidget.class.getName()) != null) {
                widgetManagerUnproxied.addWidgetFrame(WidgetUtils.createWidgetFrameBean(getCommunity(), SubCommunitiesWidget.class.getName(), 1, row++));
            }
            if (isProjectsEnabled()) {
                if (widgetManagerUnproxied.getWidgetByName(CommunityProjectsWidget.class.getName()) != null) {
                    widgetManagerUnproxied.addWidgetFrame(WidgetUtils.createWidgetFrameBean(getCommunity(), CommunityProjectsWidget.class.getName(), 1, row++));
                }
            }
            if (widgetManagerUnproxied.getWidgetByName(RecentContentWidget.class.getName()) != null) {
                widgetManagerUnproxied.addWidgetFrame(WidgetUtils.createWidgetFrameBean(getCommunity(), RecentContentWidget.class.getName(), 1, row));
            }
 
            // column 2, start row back at 0
            row = 0;
            if (widgetManagerUnproxied.getWidgetByName(CommunityActionsWidget.class.getName()) != null) {
                widgetManagerUnproxied.addWidgetFrame(WidgetUtils.createWidgetFrameBean(getCommunity(), CommunityActionsWidget.class.getName(), 2, row++));
            }
            if (widgetManagerUnproxied.getWidgetByName(TopMembersWidget.class.getName()) != null) {
                widgetManagerUnproxied.addWidgetFrame(WidgetUtils.createWidgetFrameBean(getCommunity(), TopMembersWidget.class.getName(), 2, row++));
            }
            if (widgetManagerUnproxied.getWidgetByName(TagCloudWidget.class.getName()) != null) {
                widgetManagerUnproxied.addWidgetFrame(WidgetUtils.createWidgetFrameBean(getCommunity(), TagCloudWidget.class.getName(), 2, row));
            }
        }
        ......

 

 

II. How do the objects interact, and how are they displayed?

Sometimes these widget layouts, widget layout descriptors, widgets, widget frames, etc can get kind of confusing. I hope this illustration and ftl explanation can help paint a better picture, and deepen the understanding.

 

As an overview, you have the layout (red - WidgetLayout), the layout descriptor (blue - WidgetLayoutDescriptor) which tells how to display the widgets (green - WidgetFrames, contain widgets). A bit more technical tidbits from the database side of things, the container in jiveWidgetFrame is essentially the column, and the frameIndex is essentially the row. See more here:http://www.jivesoftware.com/builds/docs/clearspace/latest/DatabaseSchemaGuide.html#jiveWidgetFrame

defaultLayout_explain_b.png

 

We saw above how it will grab the widget layout, but I didn't show it returning from that method. This can be seen as the red box in the picture above (the layout)

 

<#if widgetLayout?exists>
    <div id="jive-body-main">
        <div id="jive-widget-content">
            <div id="thread.watch.notify" class="jive-info-box" style="display:none">
            </div>

            <#include "/template/global/include/form-message.ftl" />

            <#include "${widgetLayout.freemarkerTemplate}" />

        </div>
    </div>
</#if>

 

 

public WidgetLayout getWidgetLayout() {
        try {
            if (!isHasCustomized()) {
                // if no draft widget frames exist, then no default layout exists
                if (widgetManager.getWidgetFrames(getCommunity()).size() == 0) {
                    copyDefaultLayout();
                }
                return widgetManager.getWidgetLayout(getCommunity());

 

 

After returning the layout, we look to the layout FTL (which for this particular layout is ls.ftl) and CommunityAction for what happens next (this is the blue box above, the layout descriptor). Each different layout FTL asks for the widget frames associated with it, and will have them available via the CommunityAction. For our example, it looks for the widget frames in the left container, and then the right container.

 

This loads the widgets in the left container (green A)...

 

<div id="jive-body-layout-ls">
    <div class="jive-body-layout-l">
        <div id="jive-widget-container_1" class="jive-widget-container jive-widget-container-large">
         <#if widgetFrames?exists && widgetFrames.containsKey(1?int)>
             <#list widgetFrames.get(1?int) as widgetFrame>
                 <#if widgets?exists>
                     <@jive.editWidgetFrame widgetFrame=widgetFrame />
                 <#else>
                     <@jive.displayWidgetFrame widgetFrame=widgetFrame size=enums["com.jivesoftware.community.widget.Widget$ContainerSize"].LARGE />
                 </#if>
             </#list>
         </#if>
        </div>
    </div>

 

 

....and the rest of the file loads the widgets in the right container (green B)

    <div class="jive-body-layout-s">
         <div id="jive-widget-container_2" class="jive-widget-container jive-widget-container-small">
         <#if widgetFrames?exists && widgetFrames.containsKey(2?int)>
             <#list widgetFrames.get(2?int) as widgetFrame>
                 <#if widgets?exists>
                     <@jive.editWidgetFrame widgetFrame=widgetFrame />
                 <#else>
                     <@jive.displayWidgetFrame widgetFrame=widgetFrame size=enums["com.jivesoftware.community.widget.Widget$ContainerSize"].SMALL />
                 </#if>
             </#list>
         </#if>
         </div>
    </div>
</div>

 

 

They widgetFrames are available from this call to the widgetManager in CommunityAction.getWidgetFrames():

return widgetManager.getPublishedWidgetFrames(getCommunity());

 

And that's it! The widgets are displayed.

 

 

III. How we customized this

As you've seen, it's all initiated by NOT having anything setup the first time you are directed to the community.ftl file. So, we needed to ensure that there was a widget layout, and within that widget layout there are widget frames. So, during our secure space creation we need to hook into this ourselves. Have a look at how we're doing it:

 

1. Get a list of all the widgets in the system

 

Map<WidgetDescriptor, Widget> widgets = widgetManager.getAvailableWidgets();

2. Identify the two widgets we want to add initially, and loop through all the available widgets and hold onto them

 

Widget actionWidget = null;
Widget openCasesWidget = null;
for(Iterator<WidgetDescriptor> it = widgets.keySet().iterator(); it.hasNext(); ) {
     WidgetDescriptor descriptor = it.next();
     Widget widget = widgets.get(descriptor);
 
     if(descriptor.getClassName().equalsIgnoreCase("com.jivesoftware.community.widget.impl.CommunityActionsWidget")) {
          actionWidget = widget;
     } else if(descriptor.getClassName().equalsIgnoreCase("com.jivesoftware.community.portal.widgets.OpenCasesWidget")) {
          openCasesWidget = widget;
     }
}

 

3. Then, as we saw above, we need to get the widget layout desired and add it to the newly created secure community

try {
  WidgetLayoutDescriptor wld = getWidgetLayoutByName(TwoColumnLargeLeftColumnLayout.class.getName());
  WidgetLayout wl = widgetManager.getWidgetLayout(wld);
  widgetManager.addWidgetLayout(community, wl);
  widgetManager.publishWidgetLayout(community);
}

 

4. Finally, setup our OpenCasesWidget (custom built by us) and the Actions widget. They are mapped to the correct lay out by the matching up of parentObjectType and ParentObjectID.

 

//load the widgets
WidgetFrameBean widgetBean = new WidgetFrameBean();
widgetBean.setWidgetID(openCasesWidget.getID());
widgetBean.setContainerID(1);
widgetBean.setParentObjectID(community.getID());
widgetBean.setParentObjectType(JiveConstants.COMMUNITY);
widgetBean.setPublished(true);
widgetManager.addWidgetFrame(widgetBean);
 
WidgetFrameBean actionWidgetBean = new WidgetFrameBean();
actionWidgetBean.setWidgetID(actionWidget.getID());
actionWidgetBean.setContainerID(2);
actionWidgetBean.setParentObjectID(community.getID());
actionWidgetBean.setParentObjectType(JiveConstants.COMMUNITY);
actionWidgetBean.setPublished(true);
widgetManager.addWidgetFrame(actionWidgetBean);

 

5. All done!

 

That is how we are creating the communities and customizing their overview tabs. Hope this has been helpful!

 

Let me know if there are any questions on the above functionality

2,347 Views 4 Comments Permalink Tags: widgets, customize, supportal

New releases today: 1/12/09

Downloads are available via your purchases page

Clearspace 2.5.6

Full Documentation

Clearspace 2.0.12

Full Documentation

Clearspace 1.10.18

Full Documentation

 

Please note, 1.x has entered Legacy Phase and this is the final scheduled maintenance release in the 1.x series.  For more information, please refer to this blog post: Announcing: Jive Clearspace Version 1.X Enters Legacy Support Phase January 12th 2009

You can expect the next release of Clearspace in roughly 8 weeks.

2,963 Views 7 Comments Permalink Tags: 2.5.6, 2.0.12, 1.10.18

Okay, you're a new customer of Jive's and you'd like to receive some support, e.g. you need to ask, "How do I add a new status level icon?"

 

So you go to jivesoftware.com, login, then click on the 'Support' tab.  Then you see a link to "Create a case in your secure space."  Whoa!  What is that?  How did I get a secure space?  When I click it, why does it now say "Create a new case in Company Name" ??  How cool is that?!

 

SupportPage1.png

Creation

Well, our support solution (named the Supportal) knows about you through your email address and connects your email address to your company through our CRM system.  After making that link and ensuring you are indeed a customer, the Supportal will then create a new account space which is visible to you and those in your company. So, after verifying your information with our CRM system, we create your space and set it up with the following code:

 

     Log.info("Creating a community for " + accountName +" under the support community with an ID of " + support.getID());
 
      community = communityManager.createCommunity(support, accountName, accountName, "Support community for " + accountName);
 
      // set content types to threads and documents only (no blogs)
      List<ContentRetrieval.ContentType> types = new ArrayList<ContentRetrieval.ContentType>(3);
      types.add(ContentRetrieval.ContentType.THREAD);
      types.add(ContentRetrieval.ContentType.DOCUMENT);
      community.setContentTypes(types.toArray(new ContentRetrieval.ContentType[types.size()]));

 

Security

It is secure and private because it uses Clearspace to setup permissions to grant access only to Jive and members of your company (who are also linked in the same way you are). How can you be sure? Well, you don't see a thousand other customer spaces, do you? We do that in the following manner:

 

//add the new group to the new account community
((ExtendedPermissionsManager)permissionsManager).addAnonymousUserPermission(JiveConstants.COMMUNITY, community.getID(), PermissionType.NEGATIVE, Permissions.VIEW_COMMUNITY);
((ExtendedPermissionsManager)permissionsManager).addAnonymousUserPermission(JiveConstants.COMMUNITY, community.getID(), PermissionType.NEGATIVE, Permissions.READ_DOCUMENT);
permissionsManager.addGroupPermission(JiveConstants.COMMUNITY, community.getID(), group, PermissionType.ADDITIVE, Permissions.VIEW_COMMUNITY);
permissionsManager.addGroupPermission(JiveConstants.COMMUNITY, community.getID(), group, PermissionType.ADDITIVE, Permissions.CREATE_THREAD);
permissionsManager.addGroupPermission(JiveConstants.COMMUNITY, community.getID(), group, PermissionType.ADDITIVE, Permissions.READ_DOCUMENT);
 
//add jive support group access
permissionsManager.addGroupPermission(JiveConstants.COMMUNITY, community.getID(), jiveSupportGroup, PermissionType.ADDITIVE, Permissions.VIEW_COMMUNITY);
permissionsManager.addGroupPermission(JiveConstants.COMMUNITY, community.getID(), jiveSupportGroup, PermissionType.ADDITIVE, Permissions.CREATE_THREAD);
permissionsManager.addGroupPermission(JiveConstants.COMMUNITY, community.getID(), jiveSupportGroup, PermissionType.ADDITIVE, Permissions.READ_DOCUMENT);

 

 

"So you mean to say that any cases that I create in my secure space are private to my company and members of Jive Software?"

Yup, and it's all done automatically the first time anyone from your company logs into Jivespace Community (where the Supportal lives).

 

We even have a Group Membership Widget that shows which accounts have access to your secure space.  It's not part of our default layout yet, so if you'd like it for your space, open a case and ask for it! (For more information on this feature, please read this blog post Jive's newest Supportal version

 

Stay tuned for continued information about Jive's support solution, which will happen about every two weeks!  And don't forget to subscribe to this blog! ( http://www.jivesoftware.com/jivespace/blogs/jivespace/ )

3,384 Views 2 Comments Permalink Tags: permissions, supportal, spaces

Effective January 12th, 2008 2009, Clearspace 1.x will enter Legacy product support phase. Version 1.10.18 will be the final scheduled maintenance release.

 

During the Legacy phase Jive will no longer be performing scheduled maintenance releases.  Customers still running on 1.10.x are encouraged to upgrade to the latest version of Clearspace, and should contact support for assistance with any problems encountered during upgrade.  Jive Software may continue to provide critical bug fix releases to customers on Legacy versions with current support contracts on an as needed basis.  In order to issue a patch for a Legacy version, the customer reported issue must be critical; i.e. loss of major functionality, the site is down, or customer is unable to upgrade.

 

If you have any questions on how this may affect your installation of Clearspace, please log a case in your account community in Jive's Support Portal, or send an email to support@jivesoftware.com. Jive is committed to our customers success and their realizing the increased value and capabilities of our most recent releases.  If you wish to discuss any assistance or planning around your upgrade, please email us at ps@jivesoftware.com.

 

Information on our support policy can be found here Jive Support Services

3,395 Views 0 Comments Permalink
1 2 3 4 ... 12 Previous Next