Jump to content
View in the app

A better way to browse. Learn more.

Learn more

Invision Community Blog

We had previously posted a release schedule for our product line through the end of this year. When we made that schedule we neglected to factor in that our staff in the United States would be off work for the Thanksgiving holiday.

Obviously releasing a new version of a product when two days later a good percentage of our staff will be off would not be good for our customer service. Therefore, we will not be having a release on Tuesday, November 23rd.

Along this same subject:

Please note that we will be closed Thursday 25th and Friday 26th November for Thanksgiving holiday. Telephone support will be unavailable, but ticket and forum support will be provided.
  • 3,519 views
Note: Since this entry was published, our Resources area has been updated with the new version. Go there now to see these features live!


One of the main aims for IP.Downloads 2.3 was to overhaul the interface to bring it up to scratch. To that end, we have focused on 3 major areas in this revision, which we'd like to show you now.

File Submission

The current submission screen in IP.Downloads became unwieldy as multiple options and configurations appeared in each release. We've redesigned the upload process from scratch, to properly guide the user through each step and put the files they're uploading at the center of what they're doing.

The new screen is composed of three steps: files, screenshots and information. It's displayed as an accordion so the user can focus on one thing at a time:



The next step is to add screenshots to the entry:



Notice here that the first screenshot is highlighted; this is the new Primary Screenshot feature covered in yesterday's blog entry, allowing you to set the 'main' screenshot for a file. To do so here, you simply click it to highlight it.

Finally, you add metadata...




File View

Next we updated the view file page.



Notice the primary screenshot is shown prominently next to the description, whereas other screenshots are available below.

IP.Downloads Portal

The final screen isn't so much an overhaul as a brand new page altogether. We felt one of the areas that could be improved in IP.Downloads is being presented with interesting downloads right on the front page, rather than a clinical list of categories. To achieve that, we've updated the homepage to be a portal of content, like so:



Three main panels appear on the homepage: what's new, highest rated files, and most watched files. Each panel shows up to 18 files in a scrollable pane so it's easy for users to browse.

In the sidebar, we show top downloads and top authors. Note that if you have the IP.Nexus/IP.Downloads integration enabled, instead of seeing Top Downloads, you'll see Top Free Files and Top Paid Files. Also when the integration is enabled, files will display their price:





We hope you enjoy what's coming in IP.Downloads 2.3, and we'd love to hear your feedback!
  • 7,024 views
We have added some new features to IP.Downloads 2.3 that have been requested by our customer base and that we believe will help you better manage your files. Most of these features we pulled directly from our feedback forum, and we'd like to take this opportunity to thank everyone who participates and shares their ideas through this channel. Your feedback directly helps shape the future of IP.Downloads, and we hope you like the new functionality that you have requested and will be available with version 2.3.


Enhanced Searching

In addition to the improved search performance coming in 2.3, we have added some new search filters and sorters that have been requested by our customers.

Using the advanced search form, you can now filter your IP.Downloads search results based on category, allowing you to search for files within specified categories easily. Additionally, we have added "Last Update Date" and "Rating" as new sorting options, allowing you to better control the order of the returned search results.

Lastly, we have overhauled the search results interface to present you with much more information which can be useful when reviewing the search result to verify if it is the file you are looking for. The results are now displayed in a traditional table manner, consistent with the manner in which files are displayed within the download manager itself. Additionally, the category breadcrumb is shown below the file name so you can easily see which category the file is contained in. The file rating, number of views and downloads, submitter information, and last update information are also available for you to review.




Who Downloaded My File?

While the administrator can review all downloads in the ACP using the available reporting tools, often times users want to know who has downloaded a file from the public interface as well. A modification author or skinner may want to know who is downloading their skins, for instance. Or you may be curious who has downloaded a file before you yourself download it. Beginning with IP.Downloads 2.3 this functionality will now be available.

For this feature to work, you will need to ensure you have the setting "Log All Downloads" enabled in the IP.Downloads settings. Additionally, you will be able to control on a per-group basis who can view file downloaders and who can't. For the groups that are allowed to view file downloaders, all download counts will now be linked, and clicking the link will open a modal box within the window showing the downloaders.




Mark All Categories Read

A new link has been added to the statistics bar on the download manager index page that allows you to mark all categories in IP.Downloads as read. If you used to be in the habit of marking each category as read one by one, you will no longer have to do this. You can just click the "Mark All Categories Read" link and be on your way.


Reporting Broken Files

We have added a new per-group option to allow you to control which groups are allowed to report files as broken. Some users have indicated that they have validating users reporting files as broken unnecessarily, so you will now be able to configure members of the validating (or any other) group to remove this capability.


Ban Users From Uploading

Beginning with IP.Downloads 2.3 you can now ban individual users from submitting files to IP.Downloads globally. While you have always been able to do this on a per-permission mask and per-category level, sometimes you want to ban individual users entirely from submitting, while not restricting them from downloading files. Rather than creating special permission masks for these users and applying them to the users individually, you can now just ban the users right from IP.Downloads.

To ban a user from submitting in IP.Downloads, go to the ACP, My Apps menu, IP.Download Manager, and on the home page under "Run Reports" enter the user's name into the Member Report field. On the member report screen you will be able to block or enable their ability to submit files.




Change File Owner

Another oft-requested feature for IP.Downloads is the ability for moderators to change the file owner. You have always been able to change the file owner by running a file report in the ACP, however this capability has not been present on the front end...until now.

While super moderators will always have this ability, you can control on a per-moderator basis which moderators have permission to change file ownership from the front end. For moderators that have this ability, a small tag will appear next to the file submitter's name when viewing the file details page. Clicking the tag will present you with a form field where you can enter the new file owner's name, and change the file owner. The member type-ahead functionality is also utilized to allow you to more easily search and find the new file owner's name.


Latest Files

A new board index sidebar hook has been added that will display the latest files in your IP.Downloads system. There's not a lot to say about this feature - it does what it says. :)




Better File Control

We have added a few new features that will allow you to better control your files when submitting them, as a user. Firstly, we have added the ability to specify on the submission form which screenshot should be the "default" screenshot for files. This default screenshot is then displayed as a primary screenshot when viewing the file information page, and is used whenever a screenshot for a file (that has multiple screenshots available) is requested, for instance in the random files block. To go along with this, we have changed the screenshot generation method to use a "cropped" thumbnail, instead of a traditional proportional thumbnail. Now, when configuring screenshot dimensions, you will only enter one dimension (for instance, "100" if you wish to have thumbnails at 100px x 100px). IP.Downloads will generate a screenshot in square proportions, cropping the edges as needed. This will allow for a more fluid layout with screenshot dimensions that can more easily be expected and worked with.

Additionally, we have added two additional fields to the file submission process: version number and change log. You can now supply a version number when submitting a file, which will then be displayed next to the filename on the file information page. The file version is preserved when a new version of a file is submitted, so the "Previous Versions" section will also display the previous version number next to it's filename as well. This allows you to more easily understand the previous versions section, as you can see which version each entry is. The other new field, change log, allows you to enter in changes that were made with the new version you are submitting when adding or editing a file. This change log is displayed below the file description on the file information page, and is preserved when you submit a new version of a file (i.e. the change log for each version is saved when a new version is submitted). This allows the user to view the full change log for a given file by clicking on a link presented on the file information page.



In this screenshot, I clicked the "View all changelogs" link and the modal box appears showing me all changes in the current and previous versions.


As you will undoubtedly be able to tell from that last screenshot, the user interface has also been completely overhauled. Keep an eye out for our next blog entry, where we will go over the changes you can expect to see to the interface in IP.Downloads 2.3. We are really excited about these changes and think you will be too, once we are able to share them with you!
  • 5,315 views
As part of our application updates schedule, we've been quietly working on IP.Blog 2.3. Initially planned as a maintenance release, we've gone through the bug tracker and fixed a lot of bugs, but we've also expanded our plans for the release to include many of the things you'll come to expect from our product line. Here's some of what we've been working on:

1. You guessed it, "Like" and comments

We've implemented the new, centralised Like and comments systems from IP.Board 3.1.3, allowing us to remove all of IP.Blog's own commenting code, it's "blog tracker" and more. In IP.Blog 2.3, you can Like both blogs and blog entries, allowing you to follow not only new entries, but new comments too.

2. Notifications and Reputation

As a happy side effect of implementing the Like system in IP.Blog 2.3, we've also been able to implement support for the IP.Board Notifications system. You'll be able to receive notifications of new entries on your Liked blogs, and new comments on entries you've Liked.

Additionally, until now, you've only been able to give and receive reputation on blog comments, but not blog entries. We've added this in, so you can now give reputation on great blog entries, as well as the comments that follow them.

3. Cleaner, tidier look and feel

One area we always get a lot of feedback on is the look and feel of IP.Blog, and this is something we've started to improve in the next version. This isn't a dramatic change, or even a redesign, we've simply tidied up what was already there. We've moved things into more logical places, brought the font back into line with IP.Board itself, straightened things up. Here's a few key areas - but please remember that this is a work in progress and is likely to change more before release:

The blog homepage:


An individual blog:
One area we'd like to highlight here is that, for individual blogs, you'll notice that the two column view has been dropped in favour of a date-ordered list of entries.


A blog entry:
As you can see, this screenshot features the new Like, commenting and reputation functionality.


Blog settings:
The whole "manage blogs" area has now been moved out of the user control panel, into it's own section of the Blog application. We've started out by tidying up the settings page, but we'll show you some other areas of improvement in a later blog entry.


We hope you like what we've done with IP.Blog so far, and we'll be showing you more in later blog entries. As usual, all feedback is welcomed in the comments below, let us know what you think.
  • 7,545 views
Guest
Guest
The term "consistency" can encompass many facets of a software package. Consistency can refer to backend code, ensuring that one piece of the application is utilizing available classes and methods to ensure it behaves as similar as possible to every other piece of the application when executed. Consistency can refer to the user interface, ensuring that users navigating a piece of an application can easily familiarize themselves with it, whether that be comparing the interface to other established websites the user is likely to have visited, or comparing the interface to the rest of your application as a whole. Consistency is important in software development, because it helps ensure that the application will behave as expected, and that users will know exactly what to expect.

We are focusing a lot of our efforts into usability and consistency in our applications, in an effort to ensure that users can easily navigate and use our software, without having to first "learn" how to use it. IP.Downloads is no different, and I wanted to talk in this blog entry about some changes you can expect to see with IP.Downloads 2.3 which we feel will help improve consistency between IP.Downloads and the rest of your IP.Board applications.


Sphinx Support

Arguably the least exciting thing I would like to mention in this blog entry, is that beginning with IP.Downloads 2.3, Sphinx search support has been reintroduced. This means that websites utilizing Sphinx for their search engine will be able to also use Sphinx for IP.Downloads. With previous versions of IP.Downloads, MySQL is used for searching.

Similarly, if you do not use Sphinx, you may still gain from a small performance boost with MySQL searches, as proper "fulltext" search support has been added for IP.Downloads as well. For those of you who may be technically inclined, but not quite sure what this means, basically instead of running a query with a where statement like



WHERE file_name LIKE '%search term%'

we now will run a query like



WHERE MATCH(file_name) AGAINST ('+search +term', IN BOOLEAN MODE)

This is a minor backend change, but will help performance if your site has a large downloads section that is heavily searched.


Custom Field Formatting

IP.Downloads has featured custom fields support since it's initial release. This is a powerful tool that will help you collect additional meta data from your users when they submit files. Custom fields show up on the file information page when filled in, allowing you to easily customize the data collected and shown for users in IP.Downloads.

We have enhanced custom fields in IP.Downloads 2.3 to allow you to define how to format them from the ACP. Similar to the formatting options for member custom fields, you can use a {key} and {value} macro when defining the formatting options for your IP.Downloads custom fields, allowing you to display the data exactly how you intend to. One common use scenario we have run into ourselves is wanting to display a custom field that should contain a link as an actual link, instead of just the link text. This will now be possible in IP.Downloads 2.3.


Share Links & FaceBook

IP.Board 3.1 introduced the new share links strip functionality, and included a robust and easy to use FaceBook "Like" feature throughout the forums. We have implemented this into IP.Downloads 2.3, allowing your users to easily share and like the content throughout IP.Downloads just as they would throughout the forums. In doing so, we have removed the old "Email File" link that would appear on file display pages, as you can now use the Email share link option instead.

While I presently do not have FaceBook enabled on my development board, you can see the share links strip in the following screenshot. The FaceBook like hook will show up on the left side on the same line, when enabled.

(Please be aware that this is an early screenshot, and the user interface is subject to change before release)




Comments & Likes

As well as implementing the share links and FaceBook Like hook into IP.Downloads, we have gone ahead and implemented our new commenting and likes systems into IP.Downloads 2.3 as well. Matt previously discussed these new features in a Gallery blog entry (take particular note of the 'Favorites' feature, which we have renamed to 'Likes' and the new comments area), so feel free to check that out to get a better overview of how these systems work. As part of our efforts regarding consistency across our applications, these features will work identically in IP.Downloads as they do in IP.Gallery.

All content that you 'Like' throughout IP.Board is available in a new 'My Liked Content' option from your user dropdown in the top of every page. We will be further expanding this central control panel in IP.Board 3.2. When you like a file, you can choose to like anonymously (so that other users do not know you have liked it), and you can choose to receive notifications of updates. If you enable notifications, you will be notified when the file is updated and/or when someone comments on the file. This new like system replaces a couple of existing features in IP.Downloads, but in a manner that will make it more consistent with every other application: Favorites (including the UserCP "Manage Favorites" area) and Subscriptions (including the UserCP "Manage Subscriptions" area). You can now manage these from one central area of IP.Board for all applications, including IP.Downloads.

The comments area will now support AJAX replies, hovercard moderation, and more, all in an interface consistent with our other applications. Again, check out the previous blog entry with a video of Gallery for an idea of how this section works.

I would take a couple of screenshots here, however we are in the process of overhauling the user interface and as such I don't think screenshots will help you visualize the changes much at this time. When we blog about the user interface changes later on, we will be sure to point out these two specific changes to show you how the look and work.


In addition to changing these systems for our file view page to be more consistent with our other applications, we have also added the ability to "Like" a category of files, allowing you to optionally be notified when new files are submitted to a category. This is analogous to the "Watch Forum" option in the forums, allowing you to be notified if new topics are submitted. We believe this will help your members monitor areas of your site more effectively and with better control, keeping your members interested in your downloads area as new content is submitted.


Summary

We are working towards improving usability and consistency in IP.Downloads (as in all of our applications) and to that end we have implemented some new functionality that will allow your users to navigate your downloads area with ease. They can expect to be familiar with how the downloads area works based on consistency with our other applications, without having to figure this out on their own. Additionally, the inline AJAX functionality of the likes and comments systems provide for a more robust user experience, allowing them to interact with the site in useful ways, without having to jump from page to page unnecessarily. We hope you like these changes, and stay tuned for other upcoming blog entries regarding the direction of IP.Downloads 2.3!
  • 3,450 views
I blogged previously about updates to Gallery which include a brand new commenting system.

This new commenting system is a core feature in IP.Board 3.1.3 and although we've not fully implemented it in the forums, it is in use by Blog, Gallery and Downloads.



As it's a core feature, you can easily add it into your own application just by writing a plug-in class.

A feature recap for the new commenting system:

- Makes full use of "ajax" so that there are no page loads between adding a reply, editing a reply, etc
- It makes full use of the new 'hovercard' system present in IP.Board 3.1.3 to allow mouseover pop-ups
- Automatically sends "like" notifications if enabled


When you mouse over a user link, it pops-up with the mini profile card.

I have written up some basic documentation on how to implement this here: http://community.invisionpower.com/resources/documentation/index.html/_/developer-resources/custom-applications/comments-r523
  • 4,997 views
Early on during development of IP.Downloads 2.3, one key area we identified that we wanted to improve was the notification capabilities of IP.Downloads. In previous versions of IP.Downloads, you can elect to be notified when a file you are watching is updated, and you can elect to be notified when a file you submit is approved or denied. These are necessary and useful notification options, however they do not encompass all of the scenarios users might want to be notified of within the application.

New Comments

We have implemented the new 'Like' and 'Comments' systems into IP.Downloads 2.3 (we will discuss this further in our next blog entry), and in doing so have added the ability to allow users to be notified when a new comment is received on a file. A user need only visit a file, 'like' it, and choose to be notified of new comments if they so wish. If you are subscribed to files, or have any files in your favorites list in your current IP.Downloads installation, those will be removed, and converted into 'likes' appropriately when you upgrade to IP.Downloads 2.3.

New Files

In addition to supporting 'likes' for files, you can now 'like' any category in IP.Downloads, allowing you to receive notifications (if you choose) when new files are submitted to a category you like.

Broken Files

Until IP.Downloads 2.3, no one would be notified when a file is reported broken. A note would be added to the top of the page with some details, and the file would be listed in the Moderation panel, however this requires moderators to be vigilant and to actively monitor the Moderation panel to discover when files are reported broken.

Beginning with IP.Downloads 2.3, you will now be able to elect to be notified when a file you have submitted is reported broken (as the file submitter). This allows you to know if any of your files are being reported as broken by the community, giving you the opportunity to address issues with the file if needed, and to communicate with moderators more effectively if they contact you about the file.

Additionally, moderators will now be able to elect to be notified when a file is reported broken, giving them the opportunity to let the software handle notifying them of problems, rather than requiring the moderators to actively monitor areas of the software to discover problems on their own. We believe this new functionality will ease the workload of your moderators, and ensure consistent communication occurs between the software and your staff.

As an aside - we have also added group-based permissions for who can report a file as broken, which will now allow administrators to better control who has access to perform this action in IP.Downloads.

Files Pending Approval

In addition to having no way to know when a file is reported broken, in previous versions of IP.Downloads moderators had no way to know (without checking for themselves) if a file is pending approval. This means that moderators must monitor the downloads area manually to determine if files are pending approval, which is time consuming and inefficient. Beginning with IP.Downloads 2.3.0, your moderators will now be able to elect to receive notifications of new files pending approval, allowing them to be notified when action is required on their part, without having to actively monitor the downloads area.


Summary

With IP.Downloads 2.3 we are working to improve both the consistency between IP.Downloads and IP.Board (as well as our other addon applications), and the usability in the application itself. We believe these small but important changes will allow you (the admin), your staff, and your users much better control over how they interact with the software, saving everyone time, energy, and useless clicks. ;)

Let us know what you think in the comments, and subscribe to our blog if you are looking forward to our next IP.Downloads blog entry, which will discuss some further usability and consistency improvements you can expect to see in IP.Downloads 2.3!
  • 3,368 views
I blogged in a previous entry about the new "like" system that is coming to IP.Gallery, IP.Downloads and IP.Blog.

This is a brand new feature in the core of IP.Board and even though we plan to make more use of it in the actual forums in 3.2, it is ready to be used by modification authors in 3.1.3.

Before I get into the mechanics of the system, I wanted to give you a brief overview of how it works.


This screen shot shows the "like" bar directly underneath the image. The pop-up overlay shows who has "liked" the image. This is opened when you click on the "1 other" link.


When you like an image, you can elect to receive notification of 'updates'. Updates can be various things, in this example it is when a comment is added. You can also elect to 'like' the item anonymously so you can receive updates without showing on the "liked by" list.


All content you "like" is added to your "like center". From here you can bulk remove or update the type of notification. We do plan to make this "like center" more extensive in 3.2.0 with a tabbed interface and more filters but it is ready to use in 3.1.3.


You can quickly access the "like center" from your username drop down at the top of the page.

Implementation
You can add "like" to almost any object by adding a single PHP class into /extensions/like/. I'll take you through the "like" class for Gallery. This file is situated in /admin/applications_addon/ips/gallery/extensions/like/images.php

The class name is as follows:



class like_{app}_{type}_composite extends classes_like_composite

So, for Gallery, this is:



class like_gallery_images_composite extends classes_like_composite

There are only three methods that need to be defined:

The first two are very straight forward:


* Return an array of acceptable frequencies * Possible: immediate, offline, daily, weekly * * @return array */ public function allowedFrequencies() { return array( 'immediate', 'offline' ); } /** * return type of notification available for this item * * @return array (key, readable name) */ public function getNotifyType() { return array( 'comments', 'comments' ); }
/**




















Note: If this "like" will notify of new comments, then the only allowed frequencies are 'immediate' and 'offline'.

The last is getMeta


* Returns the type of item * * @param mixed Relationship ID or array of * @param array Array of meta to select (title, url, type, parentTitle, parentUrl, parentType) null fetches all * @return array Meta data */ public function getMeta( $relId, $selectType=null ) { $return = array(); $isNumeric = false; if ( is_numeric( $relId ) ) { $relId = array( intval($relId) ); $isNumeric = true; } $this->DB->build( array( 'select' => 'i.*', 'from' => array( 'gallery_images' => 'i' ), 'where' => 'i.id IN (' . implode( ',', $relId ) . ')', 'add_join' => array( array( 'select' => 'a.*', 'from' => array( 'gallery_albums_main' => 'a' ), 'where' => 'i.img_album_id=a.album_id', 'type' => 'left' ) ) ) ); $this->DB->execute(); while( $row = $this->DB->fetch() ) { /* Title */ if ( $selectType === null OR ( is_array( $selectType ) AND in_array( 'title', $selectType ) ) ) { $return[ $row['id'] ]['like.title'] = $row['caption']; } /* URL */ if ( $selectType === null OR ( is_array( $selectType ) AND in_array( 'url', $selectType ) ) ) { $return[ $row['id'] ]['like.url'] = $this->registry->output->buildSEOUrl( "app=gallery&image=" . $row['id'], "public", $row['caption_seo'], "viewimage" ); } /* Type */ if ( $selectType === null OR ( is_array( $selectType ) AND in_array( 'type', $selectType ) ) ) { $return[ $row['id'] ]['like.type'] = 'Image'; } /* Parent title */ if ( $selectType === null OR ( is_array( $selectType ) AND in_array( 'parentTitle', $selectType ) ) ) { $return[ $row['id'] ]['like.parentTitle'] = $row['album_name']; } /* Parent url */ if ( $selectType === null OR ( is_array( $selectType ) AND in_array( 'parentTitle', $selectType ) ) ) { $return[ $row['id'] ]['like.parentUrl'] = $this->registry->output->buildSEOUrl( "app=gallery&album=" . $row['album_id'], "public", $row['album_name_seo'], "viewalbum" ); } /* Parent Type */ if ( $selectType === null OR ( is_array( $selectType ) AND in_array( 'parentType', $selectType ) ) ) { $return[ $row['id'] ]['like.parentType'] = 'Album'; } } return ( $isNumeric === true ) ? array_pop( $return ) : $return; }
/**





































































This method returns meta data about either a single item or an array of items. This is used to generate the data in the "like center".

To add the like bar in your own applications, all you need to do is add:


require_once( IPS_ROOT_PATH . 'sources/classes/like/composite.php' ); $likeClass = classes_like::bootstrap( '{app}', '{type}' ); $like = $likeClass->render( 'summary', $itemId );







$like now contains the HTML which you can use in your templates like so:


<div>{$like}</div>




I will go into more detail on this in our documentation and please watch out for the "comments" class blog entry as it ties in with this class to auto-send comment notifications without any additional coding!
  • 5,603 views
IP.Content is a powerful toolset that allows you to create dynamic pages and content on your site, utilizing all of the APIs IP.Board provides. Using these tools, you can create pages, templates and blocks that retrieve, transform, and output data in your IP.Board and addon application databases. IP.Content can even allow you to take blocks you have created and integrate them into any page in IP.Board itself, so you can create dynamic content-driven blocks on any page of your IP.Board installation with ease.

While the integration possibilities are quite robust within IP.Board, we wanted to take this a step further and allow you to implement blocks created in IP.Content anywhere! Imagine if you could create a feed of the latest topics on your forum, and integrate that into your Wordpress blog? Or imagine creating a feed of your latest Gallery images to show on your website homepage, simply by inserting a little tag into your homepage HTML file? With IP.Content 2.1, you will be able to do exactly that.


A new "external.php" file will be included in the Tools folder of your IP.Content download. You will first need to upload this to your IP.Board root directory.

Then, in the ACP Block Management page, you will see a new icon next to every IP.Content block.



When you click this icon, you will be presented with a small modal box that includes the exact HTML (a javascript tag) that you need to include where-ever you want the block to show up



You simply copy this javascript tag, and paste it into your page where-ever you would like for the block to show. It really is that simple! Additionally, while this is not the "preferred" method of integrating blocks into your IP.Content pages themselves, there is nothing stopping you from doing so if you find this method to be the easiest way to include your blocks in your pages.

I have created a short video to demonstrate how this works. Hopefully you will be able to see just how easy this new feature is to use in IP.Content through a short tutorial example.




As you can see, there is really nothing to it - you simply copy a tag into your HTML page and the block shows up. Additionally, because the block is loading off of your forum domain and utilizing the IP.Board framework, all member data is available to the block. You can create user profile blocks, for instance, and show them on your external site, providing an easy way to integrate "member" functionality into your site without having to create your own membership system, or tie your site into your IP.Board installation through backend PHP code.


Some Boring Techy Details, if you are interested

The block is implemented via a javascript tag, which then renders an iframe into the page. The iframe will size dynamically so that all of the block content is displayed, and scrollbars are not. You can override this on a per-block basis, simply by changing the URL in the script tag to include "&w=xx&h=xx" parameters (you can provide either parameter, or both parameters) if you wish to set a static width and/or height (if you do so, the iframe will automatically show scrollbars as one would expect).


We hope you like this new feature in IP.Content 2.1, and that it will help you expand your website in easy and fun ways. Let us know what you think in the comments!
  • 10,808 views
As the entry title says, this blog entry describes changes and improvements to the hooks functionality in IP.Board, and is aimed mainly at modification authors.

New Data hook access points
Several new data hooks have been added for IP.Board and the addons. Here a list of the ones added in 3.1.3:

IP.Board
topicViewQuery: allows you to add new fields for the members table in the query, and add new joins when posts are retrieved from the database. This will allow you to select additional fields in the members table if you need to, or join in other database tables to retrieve additional information for your modification. The main use for this would be to retrieve additional data to show in the userInfoPane template. incrementUsersPostCount: several modifications need to execute code when the post count for a user is incremented (example: popular points modifications). This new data hook will allow you to do so.

Add Calendar Event Edit Calendar Event

Add New Blog Add Blog Entry: Entry Add Blog Entry: Poll Data Edit Blog Entry: Entry Data Edit Blog Entry: Added Poll Edit Blog Entry: Updated Poll Add Blog Entry Comment Edit Blog Entry Comment

Add Download Edit Download Update Downloads Category Info Rebuild Downloads Statistics Cache Add Download Comment Edit Download Comment

[*]IP.Calendar [*]IP.Blog [*]IP.Downloads

The other applications, such as IP.Gallery, will all see new data hooks as well.


Library hooks support
In IP.Board 3.1.0, we introduced a new type of hook: Library Hooks. This hook type is a powerful tool for modification authors, allowing you to overload the libraries and extend virtually any function in the IP.Board code. Initially, the support for library hooks was limited and often times a class loaded from different areas of the code would sometimes load any library hooks associated with it, and sometimes would not; for IP.Board 3.1.3 we have added support for them in a lot more areas of the code. All of our addon applications have been updated to use them too!

While IP.Board 3.1.3 is a major improvement in terms of library hook support, we will continue working on implementing the library hook support throughout all of IP.Board, with the expectation that IP.Board 3.2 will support library hooks in 100% of locations that can utilize them.


New function IPSLib::loadActionOverloader()
Action overloaders are usually executed automatically by the code but unfortunately that happens only when those classes are executed directly; when those classes are loaded and executed manually like in the code below the overload doesn't apply:


require_once( IPSLib::getAppDir('core') . '/modules_admin/languages/manage_languages.php' ); $langLib = new admin_core_languages_manage_languages( $this->registry ); To resolve this issue, we have added a new function in IPSLib that works similarly to IPSLib::loadLibrary(). This function however accepts only 2 parameters: the first one is the path to the file itself while the second parameter is the class you are overloading. This is an example based on the code above:

$classToLoad = IPSLib::loadActionOverloader( IPSLib::getAppDir('core') . '/modules_admin/languages/manage_languages.php', 'admin_core_languages_manage_languages' ); $langLib = new $classToLoad( $this->registry ); Support for usercpFormsExt plugin dropped Starting with IP.Board 3.1.3, we have discontinued support for the plugin usercpFormsExt.php. This is a plugin that we introduced in the 3.0 version of IP.Board to extend the user control panel tabs when library hooks didn't exist. It has now been replaced with a much more flexible library hook that allows for infinite extensions and you won't even need to upload a file as everything is done with a simple hook. If any developers were using this functionality, be sure to update your code to use the new library hook method. This below is the current code in the public_core_usercp_manualResolver class, for reference:

//----------------------------------------- // Begin initilization routine for extension //----------------------------------------- $classToLoad = IPSLib::loadLibrary( $EXT_DIR . '/usercpForms.php', 'usercpForms_' . $_TAB, $_TAB ); $usercp_module = new $classToLoad();



We appreciate the feedback of our developers, and hope that these small changes make it easier to extend IP.Board and create useful and creative addons for our products.
  • 7,725 views
Over this summer we have put a lot of work into the IPS applications to get them up to the same level of modern code that IP.Board itself features. If you have been following our blog you will have read about all the new features and enhancements coming to the applications. More blog entries on updates to other applications are coming so keep reading our blog for updates.

You may have noticed that there have not been a lot of releases to our applications over the last couple months. This is because we decided to take a new approach to our development cycle and we are happy to say we are wrapping up development on updates to all of our applications! Anyone who has been a customer of IPS for a period of time knows that we are always reluctant to post any sort of schedules. They are too easy to miss and, when that happens, people tend to get a tad... upset :)

For the first (and who knows: perhaps the last) time we are able to announce a general release schedule. On October 26 we will release IP.Board 3.1.3 which is a maintenance release that addresses many reported bugs and also contains code needed for the upcoming updates to all of our applications. After this release, we plan on releasing either an update or maintenance release to one of our applications every Tuesday through the end of the year! Some weeks there may also be an additional release on Thursday depending on schedule requirements. So that's one or two releases every week through the end of the year! The following applications (not listed in release order) will be released, updated, or see maintenance releases as needed:


IP.Blog IP.Chat IP.Content IP.Downloads IP.Gallery IP.Nexus

Once this application update release schedule is complete we will have a new, modern line of applications that work with IP.Board and will be well-positioned for the upcoming IP.Board 3.2 series.

Everyone at IPS hopes you are as excited we are at this aggressive release schedule and the improvements to your community all of these updates will bring!
  • 19,700 views
Arguably the most crucial part of the gallery system is the upload system. A cumbersome and slow upload system deters people from uploading new images.

Certainly, the current Gallery doesn't make it very easy to upload multiple images and filling out the meta data such as caption, etc is a chore. We've had a lot of feedback over the years on the Gallery's upload system and I wanted to take the opportunity to write a fast and intuitive upload system.

The following video takes you through a typical scenario: You've taken a bunch of pictures, labelled them and you're ready to share them with the community.



I recommend that you click the full screen button or use a powerful magnifying glass.
  • 9,783 views
One of the benefits provided to IP.Board license holders is the skin generator which allows you to automatically generate an IP.Board skin using the colours you choose.

If you're not familiar - have a look at our previous blog entry on it.


Something which is frequently requested by skinners is a way to move the member box in the IP.Board header to a different location, so it isn't overlaying the logo; more like a traditional member bar.
I've spent some time today working this in as an option to the skin generator. When you go to the skin generator, there will be an option under "Choose Options" that says "Add member bar?" - simply check this box, and the member bar will be included in your skin.


Here's a screenshot of how it looks using the default colours:


If you'd like this look on your community simply head over to the skin generator and download a skin in your colour choice. For instructions on how to import skins, please see our documentation.


Enjoy!
  • 5,662 views
Alongside the new articles system introduced in IP.Content 2.0, we redesigned and included a default demo site to showcase some of the core functionality in IP.Content. This default demo site utilizes the concept of page templates, custom database templates, custom databases, custom blocks, and all of the useful functionality you will probably make use of yourself. The idea behind this is that we wanted to show off some of the capabilities of IP.Content in a "real-world demo" so that you could dive in and, hopefully, better understand how all of the different capabilities of IP.Content can be pulled together to create unique and creative websites.


Well, while the demo site looks sharp and has been generally well received, there has been one recurring criticism of this approach with IP.Content 2.0 - the articles system, because it was embedded into the default demo site, did not look consistent with the rest of IP.Board if you chose not to use the included page template. If you edited the "index.html" page and set it to use the IPB wrapper (and not the page template we included), much of the layout did not flow as expected.


We have decided to change our approach with IP.Content 2.1. We are no longer going to include a default page wrapper with IP.Content 2.1. I'm sure some of our customers may have liked seeing how the page templates can be used to facilitate making an entire website with a consistent look and feel outside of the forums, however in our polling most of the users who make separate website pages (and don't want them to look like the forums) are already fully capable of doing so. Additionally, these users tend to be more advanced users and they login to IP.Content after it is installed and just delete the default wrapper anyways. This functionality is still in place of course, however the new default installation of IP.Content will utilize the IP.Board wrapper instead of a separate wrapper, in an effort to make IP.Content more consistent with your forums, and much easier to use "out of the box".

The new templates included with IP.Content 2.1 are not radically different from 2.0, however some changes have been applied to various elements of the pages to allow IP.Content to re-use your existing IP.Board skin easier with fewer changes on your part. Ideally, this means IP.Content will work out of the box with (most) custom skins with few or no styling tweaks needed. Thus, once you install IP.Content 2.1, you can click the Pages tab and begin adding your own articles: a much more plug-n-play approach, if you will.

I'm sure a couple of screenshots will make this clearer, so here you can see the major views of the articles system in IP.Content 2.1 (using the IP.Board wrapper). Please be aware that these screenshots are not 100% finished and small details may change between now and release. We're still tweaking a few areas but wanted to give you an idea of what was in store.

This is a category frontpage of the "Databases" category



One of the first things you'll notice here is that the sidebar has been moved to the right hand side of the page. The concept of "articles" is part of a content-driven website. Articles are content that are highly relevant to your community that you want separated from the forums, in an area that is easy to navigate and view. To this end, much like most blog products on the market, we have moved the sidebar to the right side of the page so that the first thing you see when you visit the page is the content.

We will also set the *default* frontpage template to be our "Frontpage (Blog Format)" template. For those of you who are not familiar with IP.Content (or, who are not familiar with the concept of a frontpage or the frontpage templates), the "Frontpage" is the first page you hit when visiting the articles system, or when you visit any given category in the articles system. You can assign a special frontpage template that allows you to issue the content in the manner you best see fit (and you can assign separate frontpage templates on a per-category basis if you choose to do so). IP.Content ships with 3 default frontpage templates (although you can modify these, and/or create your own): 1x2x2 Layout (this is where you get a larger area for the first article, which will have it's own "row", and then all other articles on the frontpage will be in a smaller sized box with 2 per row), Blog Format (this is a layout similar to a blog product, where the entire article shows on the frontpage, one per row), and Single Column (where you have a layout similar to the blog layout, however only an excerpt of the article is shown instead of the whole thing). While the 1x2x2 layout is arguably the most creative, and as such we used it to show off what you could do with IP.Content 2.0, we have opted to use the Blog Format frontpage template as our default template in IP.Content 2.1. We feel this is more consistent with most users' experiences on other websites, and should make it easier for users to navigate your own site as a result. (It is important to note, all 3 templates are still shipped and available for use with 2.1 - we are only changing the default configuration here).


This is the article view



Here you will notice that we now re-use the "maintitle" styling from the forums for the header of the page. The interface should feel much more consistent with topics and posts in your forums, while still standing out as content that is not directly contained within the forums.

All user-action buttons have been added to the container bar below the content, and the date/poster info is moved above the content into it's own bar with a separate background color. This allows the content to better "stand out" without other meta data contained within the same area distracting the user's eyes. All in all there isn't much to say about the changes made to this page - we think they're pretty self-explanatory.


And here is the archives view



Again, most of the changes should be pretty self-explanatory. A list of the articles contained within the category is shown (as is pagination, when necessary), along with a sort-bar that allows you to resort the articles in a couple of different ways. This is not unlike IP.Content 2.0, however of course this is now displayed within the IP.Board wrapper. If you have sub-categories in the category you are viewing, they will be displayed below the list of articles.


We have also redesigned the included media database demo so that it will work with or without the default demo site wrapper.



Again, we have moved the sidebar to the right side of the page to put the focus on the page content, and we have simplified the interface, removing extraneous meta data. A list of recent videos is shown at the bottom of the page, while the most popular videos are shown on the right side of the page. It is important to note that this "media database" is nothing more than a regular database in IP.Content, with some customized database templates. You could entirely recreate this media database yourself without anything special - we ship with it simply to show some creative ways you can use the databases functionality.


If you didn't notice in the screenshots initially, we've also updated the breadcrumb functionality for databases (and articles) so that if you are using the IP.Board wrapper, the breadcrumbs are correctly appended to the IP.Board secondary navigation bar, rather than being inserted separately. This should provide for better navigational consistency with other applications.


We value all of our customers' feedback and as a direct result of the feedback received, you can see that we are making changes to IP.Content 2.1 in an attempt to make it easier to approach and use. You will no longer have to jump through hoops to use IP.Content inside or outside a wrapper - either way you wish to use the software, we've got you covered out of the box. We look forward to your comments!
  • 7,291 views
Blocks, a core feature of IP.Content, provide you with an easy way to create static and dynamic widgets that can be embedded anywhere in IP.Content (and indeed, anywhere in IP.Board itself). There are three core block types: custom blocks (where you can effectively embed any HTML or PHP you want into a widget), plugin blocks (these blocks execute a PHP script to generate specific output, such as a mini-calendar or poll), and feed blocks (feed blocks are used to "feed" data from anywhere in IP.Board, as well as RSS feeds). While blocks are extremely powerful, it can be challenging for a novice to fully understand what can be done with the blocks in IP.Content. To get the most out of your blocks, and to make them customized and unique to your site, you have to know what variables are passed to the blocks and thus are available for your use.

As part of our drive to make IP.Content easier to use and more accessible to novice and intermediate users, we have developed an inline block helper window for IP.Content 2.1 that we think will help everyone to better understand what variables are available in individual block templates.

(Please be aware that the following videos and screenshots are of a pre-final copy of IP.Content 2.1. The interface may change before the final version is released.)


Launching the Variable Help

In the following screenshot, I have clicked on the "Recent Articles" block and am now presented with the form to edit the block template. You will see a "help" button that you can click which opens the block variable help window.



Upon clicking the button, the variable help window opens



Here we can see that two variables are passed into the template. Different blocks have different variables available to them, so this helps us understand what is available with the block we are currently working on. $title is a variable that holds the block title (as the description notes), while $records is an array that holds all of the records in this feed. You will note that $records is underlined because it is a link. When we click on this link, it expands the variable help for the $records variable.



Now we can see that when we loop over the $records (this is done by default in the template), each member is an array, and we see what array keys are available.

By default, you see this in the template:


<li class='{parse striping="feed_striping"}'> <a href='{$r['url']}'>{parse expression="IPSText::truncate( $r['field_1_value'], 30 )"}</a> </li> </foreach>
<foreach loop="$records as $r">





Here you can see that the default template uses $r['url'] and as well as $r['field_1_value']. If you were not familiar with the software, you may not know what this means. By utilizing the documentation available now, you can now gain an understanding of what is happening.

$r['url']: The URL to the database record or article
$r['field_1_value']: The formatted value for the field "Title" that should be shown to users


Now What?

While understanding what each variable in the default template is for is very helpful on it's own, you can now take your blocks even further. Now that you can access documentation on what variables are available, and what each variable does, you can modify your block templates to make them more personalized to your site, with the information you want to display. Let's walk through a quick example.

Please see the following video, and the subsequent description of what we have just done.




The first step we take is to create the block. For this demonstration, I am creating a "feed" block that pulls topics from the forums. Because I am showing "news" from a specific forum, I opt to order by "start date" (instead of the date the last post was made). I decided not to edit the template initially, and saved the block. Now I preview the block so you can see what it will look by default.

The default template works well as a "latest posts" block, however if we are intending to show news, we will probably want to show the entire post. Next, I go back in and edit the block template.

I decided to move the date to the beginning of each row, and then I show the name of the member that started the topic.

Now, I remove the code that truncates (shortens) the post, and wrap it in a div that gives it a margin so it is easier to see.

Lastly, I decided to add a small blurb to the end of each row that tells who last edited the post, and a little bit of information about this user. I added the last poster's name, the date they made their last post to the topic, their profile picture (the "mini" size version), the user's post count, and the number of times this user's profile has been viewed. I save the block again, and launch the preview again to give you and idea of what the end result will look like.

All of the above was simply to demonstrate how you might be able to use the block help to find variables you may wish to use in your blocks. By using the block help, I was able to add a lot more data and thus make the block more useful.


Wrapping Up

Of course, the block templates still don't write themselves - you will need to determine what it is you want to show and where. We hope, however, that the block variable help panel provides you with direct, relevant documentation of the various variables you will want to access in your blocks. We believe this help panel will lower the bar to customizing IP.Content just a little bit further, making it easier for more people to do the things they want easier in IP.Content. We look forward to your feedback and hope you like the changes!
  • 5,704 views
Late last week I left a teaser image of the 'view image'.

I have taken a short video to explain some of the larger changes and features of this page for Gallery 4.



I recommend clicking the full screen icon and ensuring the "HD" icon is blue to avoid excessive squinting.

This video will also give an indication for the direction of future IP.Board releases as we'll integrate "ajax" replies into 3.2 along with the new favorites system which I'll go into in more depth in a future blog entry.
  • 7,659 views
While we continue to work on polishing IP.Content 2.1 to make it easier to access and easier to use, we wanted to take a moment to highlight some of the changes we have already made which we believe will allow you to better make use of all that IP.Content 2.1 has to offer. One major goal we are continuing to work towards with IP.Content 2.1 is to make it easier for everyone to use, and we believe these two changes will do just that (even if our work is not yet done).

Textual Keys in Templates
Databases and articles map to pre-defined templates in the ACP. You can modify these templates, and even create new ones, as needed for your site. You can use one database template for all of your databases, or you can make one template for each database you create in order to give each database it's own unique look and feel. There are many ways to configure your templates so that you get the most out of IP.Content.

One limiting factor in IP.Content 2.0 (and previous versions), however, is that within the templates you refer to the fields by the field ID. For instance, if you want to show the "content" for a database record, you may have to use a variable like so: $record[ $database['database_field_content'] . '_value' ]. In and of itself, this isn't a "problem", however when you are working with the template it's not immediately clear what variable you are referencing, and you will probably find that you need to look up what variables are available in the templates quite frequently. We have implemented a way to make this easier in IP.Content 2.1.

When you add or edit fields you can now define textual keys, and then utilize these keys in your templates. For instance, the article title field has a text key of "article_title". Now, in your templates, you can refer to this value simply as: $record['article_title']. Clearly, this is easier to use, easier to remember, and easier to understand when you come back to this template at a later point to make changes.

The upgrade routine will NOT update your existing templates. You are not forced to use the textual keys, and in fact you will need to add text keys to any fields you already have if you do wish to use them. However, moving forward we believe this will make it much easier for everyone working with templates to adapt the template to their needs.


Overhauled Wizard Process
IP.Content features a wizard process for block and page additions and edits. This wizard process is both necessary (some options can change based on previously selected options) and helpful for new users. While we are happy with how the wizard process works, we felt there were some obvious improvements that we could make, and we are happy to announce that they will be available beginning with IP.Content 2.1.

Firstly, after a page or block is created, more often than not when you go edit either a page or block you are wanting to edit the content or template. We accounted for this in earlier versions of IP.Content by building a special secondary form that is loaded, and if you wanted to change anything else you needed to relaunch the wizard. In IP.Content 2.1 this is not the case - when you go to edit a page or block you are taken into the wizard process, defaulting to the page where you edit the page content or block template. This allows us to consolidate the process, giving you a more consistent user experience and reducing the total amount of code needed to deliver the same functionality.

Secondly, you can now jump back and forth to any step in the wizard process at will (after the page or block is created, when editing the saved content). This means when you click on the page you will be taken to the step in the wizard where you edit the content, however if you just want to enable caching you can click on the "Caching" step, supply the values you wish to use, and hit "Save" without having to walk all the way through the wizard again. You can use a "Save and Reload" button on the wizard as well, if you wish to apply your changes, but leave the form still open.

Additionally, when you are creating a new block or page for the first time, while you cannot jump ahead in the wizard, you CAN jump backwards to any previous step if needed.

You can view a quick video here:

http://www.screencast.com/users/bfarber/folders/Jing/media/aa2105db-7931-4364-8182-5e402e50ae0a



We hope that these improvements make it easier for you to create your blocks, templates and pages, and allow you to better control and manage these resources once created. Please let us know if you have any feedback!
  • 2,958 views
The article and database functionality in IP.Content helps you manage content on your site in many ways, so one goal we work towards in each release is balancing functionality and capability with ease of use. We don't want to remove functionality to make the software easier to use, but we also don't want the functionality available to inhibit how you use the software. We also work towards integration and consistency with the forums to help deliver a consistent experience for your users. Some changes you can expect to see to the databases and articles areas in IP.Content 2.1 have been implemented to help deliver on improved functionality, consistency, and ease of use.

Facebook Like
IP.Board 3.1 introduced the ability to "Like" any topic on Facebook, helping to share content from your community on the world's largest social network. This functionality has been well received, and we are pleased to announce that IP.Content 2.1 will feature this same capability for any articles and database records on your site. Your users will now be able to "Like" (and comment through Facebook) any content you post in your articles and databases areas (if you have enabled the Facebook Like hook).

Easier Moderation
It can be challenging for your moderators to know what content is pending approval in your databases in IP.Content 2.0. We have improved moderator interaction with the databases and articles in a few key ways that we believe will help you better manage the content stored in your databases.

1) Records pending approval in the articles section are now highlighted with the "moderated" CSS class on frontpages and in archive listings in the articles section. This allows you to easily see which articles are not yet approved so your moderators know which ones require approval.

2) Records pending approval are now tracked at the category level. This allows IP.Content 2.1 to show a link below each category "There are x articles pending approval". Your moderators can click on this link, and all articles pending approval will be shown at the top of the listing, similar to how the forums function.





The records pending approval tracking has also been implemented for general databases as well.

Enhanced Frontpages
Frontpages are a new concept introduced in IP.Content 2.0 - they act as a landing page for the articles area (or individual categories within your articles section). We have added two new key features to the frontpage feature of IP.Content 2.1 which we believe will help you better control this page and configure it to work how you like.

Pinned Articles
The "pinned" status on an article is honored in the archive listings, however pinned articles were not automatically pinned to the top of frontpages. We have added a new setting to the Frontpage Manager in IP.Content 2.1.0 that will allow you to choose if you want your pinned articles to be pinned at the top of your frontpages as well.

Pagination
Frontpages were meant to act as a sort of "portal" for your articles, and were not originally designed to allow you to walk through all of your content. You could use the archives view in order to walk through all of the submitted content, if you wanted.

In IP.Content 2.1.0 you can now enable pagination in the Frontpage Manager, allowing for pagination right from the frontpage. When enabled, a simple pagination method is utilized to provide a "Next Page" and "Previous Page" (when appropriate) at the bottom of your frontpages, allowing you to walk through all of your articles right from the frontpage similar to how a blog might work. It is important that you match the number of "articles per page" setting in the frontpage manager to the number of articles that are displayed (as frontpages can show fewer articles than you configure) in order for frontpage pagination to work 100% correctly, however after you have configured your frontpages correctly your users will now be able to more easily view all of the articles on your site without having to load each category's archive view individually.


Database Plugin Updates
Databases support plugin callback functionality to allow advanced developers to exert more control over how IP.Content processes data before updating it's local records. We have expanded the plugin support in 2.1 to give you better control in your callback plugins. All areas that support plugins now have preX() and postX() plugin callbacks, and further to that, context-specific data is now passed to the plugin to allow you to more easily check for errors in submissions or manipulate the data that will be stored in the database. For postX() plugins, the new primary key ID for the inserted content is passed to the plugin callback so you can manipulate the new record as needed.

Even better, we already have basic documentation written up for the plugin changes, so we should have all of our plugin documentation available when IP.Content 2.1 is launched!


We believe these small but useful features will allow you to better control the behavior of databases in IP.Content 2.1, giving you more functionality, more consistency with the forums, and more control over how IP.Content functions on your site.
  • 5,693 views
Following on from my manifesto blog entry, I wanted to discuss some of the changes to structure that Gallery 4.0 introduces and explain why we have made those changes.

This blog entry does get a little technical, but even if you are not a technical person, please bear with me and feel free to skip over sections that are not relevant to you. I feel it is important to explain in detail the challenges faced when re-writing Gallery.

Overview
I want to completely re-focus Gallery and make the media the center of the application. I want users to view the images without being so concerned as to where they belong. I want to focus on organic discovery over being forced to browse pages of user albums or pages of categories.

The Problem
Although competent, it's no secret that the current Gallery has become a little confusing and over complicated. Over the years features and settings have been added too appease a small demand that has undermined the "flow" of the product. I have reviewed a lot of our customer's gallery installations and in most cases a lot of the more complex functionality in Gallery is not being utilised.

For example, the current Gallery allows for very complex permission based hierarchical structures that mixes albums and categories. Programatically, this is incredibly hard to maintain and almost impossible to work with beyond a superficial level.

Consider the following:
- Category A (Global viewing permission)
-- Category B (Restricted viewing permission)
----User Album A (Public)
------ User Album B (Private)

This allows for great flexibility but a severe cost to code maintenance and efficiency. The only way to fetch images that the current user has permission to view is by loading all the categories and albums into memory and iterating over each; testing view permissions and finally constructing a large list of permissible IDs which is passed into an SQL query. This is an "expensive" operation and once you get past 10,000 albums you quickly run into issues with MySQL not being able to parse the query as it is too large. This is a wall and the current model allows for no way around it.

The Solution
Categories and albums are almost alike. They are both containers that can accept uploads. For this reason, I have merged them into a more pragmatic "albums" model.

Administrators can set up "Global Albums". These behave much like categories used to in that you can set them to be containers only or allow uploads. You can restrict access permission based on member permissions much like you do with forums.

Users can create "Albums". These are almost identical to the current user albums in that they can be set to "Public", "Private" or "Friend Only". These are no longer restricted to the 'Members' category or being children of categories. They are created at "root" level and are not included in the hierarchy unless attached to a category.

This creates two different spaces. The Admin defined strict hierarchy and a more social public space.

There are hard rules on user created album use and the software deliberately restricts the freedom of use so that order is maintained and a simple flowing permission model is employed. In practical use, you shouldn't notice these limits but the code is much simpler if you box in their usage.

When creating a user album, you can elect to attach it to a category. When you do attach it to a category, it automatically inherits the permission of the parent category. You will be unable to set it to friend only or private. You cannot attach a sub-album to an album attached to a category.

- Category A
---- Category B
------ User Album X (Inherits permission from Category B)

This small change makes selecting images much simpler as you do not have to consider a dozen different possible permutations. We can now cache permissions with the image which makes selecting them outside of an album a quick and efficient task. This allows us to quickly query "streams" of images without having to learn about their album which frees up what we can do with the interface.

I will begin to reveal more specific interface implementation over the coming weeks.

Please let me know if you have any questions!
  • 3,708 views
IP.Content features robust integration with IP.Board, allowing you to promote posts to articles and allowing you to use your forums to host the comments for your articles and other database records. This functionality is important to many administrators, helping integrate these two areas of your site closely. We have enhanced the IP.Content and IP.Board integration in IP.Content 2.1.0, giving you better control over how IP.Content interacts with your forums.


Better Control of Topics
You can configure IP.Content to post a new topic in the forums when a new database record is saved. This topic is then used to host the comments for the article or database record, and your users can then comment on the article either from the article page directly, or within the forums. Your moderators can control the comments from both areas, giving you a lot of flexibility with regards to how your databases function.

We have enhanced this integration in IP.Content 2.1.0, allowing you to better control the topics that are automatically generated in the forums. Previously, when a topic was posted, the post consisted of the article or database record "content" only. Beginning with IP.Content 2.1.0, you can now control on a per-field basis which fields are included with the automatically generated forum topic. A new "Topic Format" option is available for each field in your databases, allowing you to control how that field is represented in the topic that is posted.

If you leave the "Topic Format" option blank, the field will not be included in the automatically posted topic. Otherwise, you control the format very much like you would control a profile custom field - you can define a "{key}" and a "{value}" macro which IP.Content will replace appropriately. With this new option, you can control which fields are included (or not included) in the topic that is posted, and how they will be formatted. You could use this capability to create a form on your website which in turn posts topics in a hidden forum for your staff to review, or you could include more details about an article (such as the article image) when it is posted. This new option should give you much better control over the topics IP.Content creates in your forums.


Better Synchronizing of Articles
IP.Content 2.1.0 will include a new hook that will allow for comment counts to be more accurate when you use the forums to manage comments. Now, if your moderators delete a comment from the forums (instead of from IP.Content), IP.Content will be properly updated so that it reflects the accurate comment count.

Additionally, when IP.Content posts a topic to host the comments for the article, a link to the article is now included automatically at the end of the post. This may seem like a minor detail at first, but this will help better integrate and cross-reference the content on your site so that your users can more easily discover everything you offer.


Re-Use Existing Topics
Many users have requested a way, when they promote a post to an article, to be able to use the existing topic to host the comments for the new article. Currently with IP.Content 2.0, when you promote a post to an article and you use the forums for the comments, a new topic will be created. You now have more control over this process in IP.Content 2.1.

There is a new configuration option in the ACP under "Promote Article Settings" to allow you to control this new behavior. The options for this setting, labeled "Allow promoter to associate article?", are "Do not associate", "Allow promoter to choose" and "Automatically associate". When you select "Do not associate", a new topic is created, just as IP.Content 2.0 currently behaves. When you select "Automatically associate", when the post is promoted to an article the existing topic is automatically associated with the article, in order to host it's comments. When you choose "Allow promoter to choose", an option is available on the promotion form allowing you to re-use the existing topic to host the comments for the article.

It is important to realize some caveats with this capability:


While the option to "move" a post may still be available, this could result in breaking the topic association if you promote the first post in the topic to an article. It is strongly recommended that if you are planning to associate articles with their existing topics that you disable the ability to "move" posts. Promoting a post in the middle of a topic will result in the entire topic (including posts made BEFORE the one that was promoted) to appear to be comments of the promoted post. This could result in unrelated posts appearing to be comments of your articles.


Notwithstanding the above noted "gotchas", this new capability is a highly requested feature that we hope allows you to control the way your articles and forums are integrated in the manner you see fit best for your site.
  • 6,594 views
Evolution
Six years ago, before Twitter existed and before Facebook became popular we launched "Invision Gallery". It was a simpler time. Not everyone 'surfed' the web with javascript enabled and in general interfaces were fairly basic. The Gallery mimicked a forum structure. It had categories which the administrator set up and allowed members to upload images. Other members could comment on those images and it worked great.

A little further down the road we added albums so members could create their own albums. These went inside a special category called "Members". This worked great.

A few years back when we upgraded Gallery to be IP.Board 3 compatible we added a newer front-end that did away with the normal category view and added the "boxes" that we're used to seeing now. This was great.

Although Gallery was starting to show its age. The web has moved on. Interfaces are more fluid and dynamic. People don't want to click through a dozen links to upload a picture. The additional functionality added over the years started to cripple the interface so that many found it confusing. Even setting up the basic permissions and categories caused a few to reach for technical support in frustration.

Clearly it's time to take Gallery apart and start again.

Revolution
The "truth" of the application is very simple:

Upload some media into an album
View, discuss and share that media.

Our aim is to streamline those processes so that they are intuitive and modern. We're not content with basic static pages anymore. We want to interact with the site like we would a desktop application and the new Gallery delivers that experience.

IP.Gallery 4.0 is a huge upgrade; the single biggest upgrade it has ever seen. We're blasting out the cobwebs and introducing a slick new interface that never loses sight of what a Gallery should be. We're simplifying permissions and accessibility to remove the clutter and confusion. We want you to fall in love with Gallery again.

Over the coming weeks I'll be discussing the new functionality in more depth, but until then, I'll leave you with a few teaser images:






For this one blog entry, I'm going to close comments and ask that you post your feedback in the Gallery forum.

We'd love to hear what you think.
  • 2,911 views
Every administrator wants to have complete control over the web pages on their site, and this is what IP.Content is all about - allowing you full control over your site's content, right from your admin control panel. While IP.Content is already extremely configurable, we have taken the software even further with IP.Content 2.1, giving you finer control over some key aspects of IP.Content.


More Control Over Searching
With the first release of IP.Content, the central IP.Board search routine only supported searching IP.Content "pages". With IP.Content 2.0, we added support for searching within articles, databases and comments (in addition to the existing page searching support) from IP.Board's central search area.

While this has proved useful and well-received, many administrators have requested more configuration options for IP.Content with regards to searching. IP.Content 2.1.0 will include two primary, oft-requested options that allow you to better control how searching on your website responds to requests.

1) You can now configure in the IP.Content settings which area to search by default when a user searches in IP.Content. In IP.Content 2.0, "Pages" were the default and this could not (easily) be changed. Now, you can configure IP.Content to search Pages, Articles, Article Comments, any databases you have, or comments in any databases you have by default (the user can still change this from the advanced search form and the search results pages as before), depending on what is best for your site.

2) You can now shut off searching within individual databases on a per-database level. When configuring the database you just toggle a radio button, and that database is no longer searchable through the central IP.Board search routine. When you turn off searching in a database, searching in comments within that database is also automatically disabled.

These two new capabilities, combined, give you much more control over how IP.Board's central search areas behave with respect to IP.Content.


Multiple Domain Support
When you run IP.Content outside of your forum root directory, you supply the URL to the index.php file in the admin control panel. IP.Content uses this information to format the URLs to pages, and to understand which page was actually requested by the user. Some users have expressed their desire to run IP.Content from multiple locations on their site, for instance "articles.site.com" and "media.site.com", rather than running all pages under one base URL.

With IP.Content 2.1.0 we have changed the setting "URL to index.php" from a text input field (which only allows one URL to be entered) to a textarea field, allowing you to enter as many URLs to the index.php file as needed, one per line. After you have supplied the URLs to the index.php file (or files), you can upload the special index.php to each location specified, allowing you to run IP.Content from more than one location on your site. IP.Content will then be able to parse any URLs you have configured for in the ACP.


Search Engine Optimization
A new configuration option has been added to the page configuration wizard which allows you to omit the page's filename from the URL when generated. This option will only work correctly for pages with the same filename configured under "Default home page" (index.html by default). The purpose of this setting is to indicate to IP.Content that when it generates URLs to the page, not to add the filename on to the end.

For instance, if you have configured IP.Content to run from the root of your site, you may want users to access the homepage through the URL "site.com/" rather than "site.com/index.html". This new option allows for you to tell IP.Content to do just that.



We hope you will find some or all of these new options useful. While these new capabilities aren't exactly whiz-bang new features, they allow you to more finely control how your site works, and after all - that's what IP.Content is all about!
  • 4,924 views
Blocks are a core concept in IP.Content, allowing you to easily create widgets that you can embed on any page (within IP.Content or otherwise). IP.Content 2.1 introduces several useful updates for blocks that we believe will help you customize your pages even further than before.


Status Updates Plugin Block

IP.Board 3.1.0 improved status update functionality greatly, adding multiple status update support, commenting, and more. Along with this new functionality, the status updates sidebar plugin that is displayed on the forum index was updated to support the new features.

IP.Content 2.1.0 introduces a new plugin block that allows you to display this status update plugin on any IP.Content pages you wish.


New Feed Blocks

As of IP.Content 2.1.0, you will now be able to create feed blocks of both profile comments and status updates (and replies). This new feed block is available in addition to the previously mentioned status updates plugin block. You can filter both feeds to control what content is pulled based on the poster and receiver information (for instance, show all profile comments made by my friends, or show all profile comments received by the admin of the site). These feed types can be useful for creating social networking style pages - perhaps you want to show a feed of all profile comments for the currently logged in user, or perhaps you want to show a feed of all recent status updates from the logged in user's friends. These new feed types can be used in creative ways to create social pages your users will love.


New Filter Options: Members Feeds

Beginning with IP.Content 2.1.0 some new filtering options have been added for member feeds. You can now restrict a member's feed to only show members you are friends with. This can be useful to create a "friends feed", for instance, in order to list all of a particular user's friends. You can also now filter member feeds to only show logged in users. You could, for example, combine this with the option to only show friends for a user to show all of your currently online friends. These two new filter options can be used in creative ways to make interesting member feeds for your community.


Dynamic Filtering for Databases

In IP.Content 2.0, you can filter database and article feed blocks based on arbitrary data in up to 5 fields. This can be useful to create content-driven feeds based on specific fields in your database, however it has the drawback that the feeds are always static based upon the configuration in the ACP.

Beginning in IP.Content 2.1.0, you can now configure the database and article feeds to filter based on input variables. For instance, you can embed one of these feed blocks on a page, and then when you link to the page you can add an input variable that will allow for dynamic filtering of the content. This is probably explained easiest through an example.

Let's say you have a page "results.php" that you have embedded a database feed block in. This ecan create a feed of results from your database based on the block configuration in the ACP. With IP.Content 2.1.0, you could set one of the custom filter fields to search one of your database fields for "@title". The @ symbol here tells IP.Content to obtain the filter from the input variables - in this case an input variable named 'title'. When linking users to this page, you would use a URL similar to "mysite.com/results.php?title=hello". When IP.Content loads this page and parses the block, it will use the value from the input variable ("hello" in this example) to search in the field, finding all records that have "hello" in the title.

This feature may be hard to understand at first, but affords developers with powerful ways to create unique pages without having to manually configure feeds for every possible scenario. We will be posting some documentation on how to use this feature following the release of IP.Content 2.1.0.



We hope you find these updates to the blocks in IP.Content 2.1.0 useful and look forward to your feedback!
  • 5,144 views

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.