<?xml version="1.0"?>
<rss version="2.0"><channel><title>Invision Community Blog: Invision Community</title><link>https://invisioncommunity.com/news/invision-community/page/31/?d=34</link><description>Invision Community Blog: Invision Community</description><language>en</language><item><title>IP.Board 3.0.0 Preview Now Open to All</title><link>https://invisioncommunity.com/news/invision-community/2664-ipboard-300-preview-now-open-to-all/</link><description><![CDATA[<p>The IP.Board 3.0 preview has been going very well. Lots of bugs have been reported and, more importantly, fixed already. The feedback we have received has been very valuable and we have already implemented some of the good ideas our customers have presented us. Thanks again!<br><br>We are now ready to open the preview up to the general public. You can visit the preview at <a href="http://ipb3preview.ipslink.com" target="_blank" rel="external nofollow">http://ipb3preview.ipslink.com</a> and login with the same email address and password you use in the IPS client area or company forums.<br><br><b>A few things to keep in mind:</b><br><br>This is a preview of <i>alpha</i> software. We are not quite to the beta stage so please keep in mind that there are some areas still being finished up. The preview has been open for a couple weeks now to our customer base so lots of feedback and bugs have been posted. Have a look around what is already there before posting new info. Thanks!<br><br>As we have reviewed in previous blog entries, IP.Board 3.0.0 is very different from the version 1.x or 2.x series. So far the feedback from our private testing group has been great and everyone loves the new look and feel. We can never please everyone :) so please be civil if you do not like something that is purely a matter of opinion and offer a constructive suggestion we can consider if you feel something can be improved.<br><br>IP.Board 3.0.0 is feature-frozen at this point. We will not be adding any new features but are happy to consider enhancements to those already included. We will always have version 3.1 for feature additions and one of the best parts of 3.0's architecture is adding new features along with upgrading is much easier than the 2.x series so upgrades can be developed and released much faster.<br><br><br><br>We hope you enjoy!</p>]]></description><guid isPermaLink="false">494</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Board 3.0.0 Public Preview Coming Soon</title><link>https://invisioncommunity.com/news/invision-community/2648-ipboard-300-public-preview-coming-soon/</link><description><![CDATA[<p>We are preparing the first public preview of IP.Board 3.0.0 alpha and look forward to everyone's feedback and help in testing. It is our current plan to preview IP.Board 3.0.0 alpha the second half of next week (around Nov 10 2008 +/- a day or two). As promised, those in the customer group on the IPS forums will receive the preview a bit earlier. Keep an eye on our company blog for updates.<br><br>The public preview will be on a special web site and will not be available for download. You can use the same login as the IPS company forums to login.<br><br><br><b>A few important notes...</b><br><br>This will be a preview of <i>alpha</i> software. We are not quite to the beta stage so please keep in mind that there are some areas still being finished up. We believe all functionality should be working properly but there are parts of the software that need some skin work. Some of the newest areas, like the new PM system, could use some extensive testing.<br><br>We ask that you help us test the functionality, click around the preview copy and report those issues that you find in the special area of our Bug Tracker for the IP.Board 3.0.0 alpha preview (will be available on preview day). When reporting please be careful to look over all already reported bugs to be sure not to submit duplicates. Do your best to try to break it... so we can then fix it.<br><br>As we have reviewed in previous blog entries, IP.Board 3.0.0 is very different from the version 1.x or 2.x series. So far the feedback from our private testing group has been great and everyone loves the new look and feel. We can never please everyone :) so please be civil if you do not like something that is purely a matter of opinion and offer a constructive suggestion we can consider if you feel something can be improved.<br><br>IP.Board 3.0.0 is feature-frozen at this point. We will not be adding any new features but are happy to consider enhancements to those already included. We will always have version 3.1 for feature additions and one of the best parts of 3.0's architecture is adding new features along with upgrading is much easier than the 2.x series so upgrades can be developed and released much faster.<br><br><b>Upcoming Beta Releases</b><br><br>We will use the public preview for our first round of testing and performance evaluation. Depending on how the public preview goes we will begin releasing <i>downloadable</i> betas. Expect updates on the beta release schedule in the week following the public preview.<br><br>Components like Blog, Gallery, and Downloads will have their own testing phase so please keep and eye out for those.<br><br><br><br><i>Thank you for your interest and everyone at IPS is looking forward to the public preview. We hope you are too and that you enjoy it!</i></p>]]></description><guid isPermaLink="false">493</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Board 3.0 Miscellaneous Features</title><link>https://invisioncommunity.com/news/invision-community/2637-ipboard-30-miscellaneous-features/</link><description><![CDATA[<p>We've been blogging for a while about some of the bigger changes you will see when IP.Board 3 is released.  Things like enhanced bbcode management, hooks and plugins, and personal conversations, for example, tend to be a bit more interesting to read than smaller features.  However, we wanted to take a moment to discuss some of the other smaller features being added to IP.Board that we haven't talked about yet.<br><br><b>Minimum posts to view forum</b><br> You can now configure forums to only allow access if you have reached a minimum post count.<br><br><b>Minimum posts to post in forum</b><br> Similar to the previous setting, you can require members to have a certain post count before they can post in individual forums.<br><br><b>Only allow posters to see their own topics</b><br> A very commonly requested feature, you can now configure forums so that posters can only see their own topics.  Of course moderators and admins can view all topics in the forum.  This allows you to create "help-desk" style forums without the need for additional software.<br><br><b>HTTPS login form</b><br> You can now force your login page urls to utilize https via a simple ACP setting.  You are still responsible for obtaining an SSL certificate and installing it to your server properly.<br><br><b>"Performance Mode"</b><br> We have several larger customers who have a relatively stationary amount of traffic, but have huge spikes at times (e.g. sports teams have huge spikes in traffic on game nights, typically).  During these spikes it is often desirable to disable unnecessary features to maintain site stability, rather than purchase hardware to handle temporary spikes in traffic.  The performance mode setting allows you to easily disable many features that can save resources with the click of a button.  The system remembers the previous setting values so that when the spike dies down you can disable performance mode and return your site to it's previous configuration.<br><br><b>Registration "question and answer<i>"<br></i></b>In IP.Board 3 you will be able to configure questions and associated answers which will be randomly added to the registration form to help combat automated registrations (spam bots).<br><br><b>Loading javascript files from Google</b><br> Google offers a service that allows you to load the prototype and scriptaculous files from their servers rather than your own.  This offloads 2 http requests to Google's servers from your own, while allowing them to manage the proper cache and expiration headers for the files.<br><br><b>Guest selectable skins and languages</b><br> Guests can now change their skin and language selections if you offer multiple skins or languages.  Note that skins can be configured to only be available to certain groups, so you can fine-tune which skins guests can select from.<br><br><b>Better topic/forum subscription controls</b><br> You can now unsubscribe individual members from all forums and topics from the edit member page of the ACP, and you can unsubscribe all members from individual forums from the forum management page.<br><br><b>More control over "friends"</b><br> You can now disable the friends feature globally via a setting, and individually on a per-group basis (e.g. to prevent validating members from using the friends feature).<br><br><b>Hide last post info for a forum</b><br> If you have a forum where different users have different configurations as to which topics they can view, you can hide the forum's last post info on the board index via a setting.  This information is cached to improve performance, so it does not utilize permission-based lookups, thus the ability to hide it helps prevent topic information from being leaked.<br><br><b>Contact fields as custom profile fields</b><br> All of the contact fields (yahoo, aim, msn, etc.) are now custom profile fields, allowing you to more easily configure them to your liking (or remove them alltogether).  Additionally, by default Jabber and Skype will be available for configuration.<br><br><b>Force an entire group to be anonymous</b><br> If you would like to force an entire group (administrators or banned members, for instance) to be anonymous upon login, you can do so easily now.<br><br><b>Moderate posts of an entire group globally</b><br> You can now configure a group to be moderated across the entire site via a group setting.  This will force all of the group's posts and topics to be placed into a moderation queue before they are visible, regardless of individual forum settings.<br><br><b>Per-group signature restrictions</b><br> You can now control the maximum number of images, lines of text, and image dimensions for signatures on a per-group basis.<br><br><br> Here's a taste of some of the new features we haven't previously discussed (at least in any detail) which we hope you'll like.  Let us know what you think!</p>]]></description><guid isPermaLink="false">492</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Board 3.0 and Blog, Gallery and Downloads</title><link>https://invisioncommunity.com/news/invision-community/2634-ipboard-30-and-blog-gallery-and-downloads/</link><description><![CDATA[<p>With the upcoming release of IP.Board 3, we will of course be updating our first-party components to be compatible with the new architecture.  Releases of IP.Blog, IP.Gallery and IP.Downloads will be available alongside IP.Board 3.0 so that you can update everything at the same time and not have to worry about when your components will be ready.<br><br> We are working with the community project teams to help them get releases of Tracker and Shoutbox ready for 3.0 as well.  They should be available at, or shortly after, the release of 3.0 to help ensure a more seamless move forward to our latest platform.<br><br> We've determined that initially for the big release, we will only be working for application compatibility between our components.  We wanted to spend all of our time focusing on IP.Board itself to ensure maximum stability, especially given the fact that we are working on an entirely new platform.  This means that you won't really notice any new features to speak of with the Blog, Gallery and Downloads updates.  You will, however, notice much better integration between the applications and the board itself, and an updated look and feel for all applications.  Some examples of this include<br><br></p><ul><li>Integrated searching - one search form will search everything</li><li>All application caches managed from cache management screen.</li><li>All skin data managed from template editor screen.</li><li>Ability to edit all group settings from group management page.</li><li>All application permissions handled from one location.</li><li>Ability to show gallery or blog data on board index through hooks</li></ul><br> Shortly after the dust settles following the big releases, and everything is calmer and stable, we will be working on "big" updates for our first-party application addons.  At this point, we are still discussing what new features would best serve our customers for Blog, Gallery and Downloads.  Below is a list we've discussed that we think you'll like.  What do you think of it so far?<br><br><b>IP.Blog</b><br><ul><li>Site/group blog - a blog that can be created belonging to no individual member, but rather to the site as a whole (i.e. a company blog) or a group (i.e. a developer blog)</li><li>Proper user-customizable headers</li><li>RSS blogs - allow members to import their remote blog into your board</li><li>"Blog this post" support</li></ul><br><br><b>IP.Gallery</b><br><ul><li>Ability to crop, rotate, dynamically resize images. Use Javascript for front end, then re-generate image using GD on backend when user saves.</li><li>Fancy slideshow feature.  Something like Flickr, but done completely in Javascript (no flash needed), little simpler probably.</li><li>Better album control based on friendships - only allow friends to view album, allow friends to submit to your album, etc.</li><li>Sub-albums</li><li>Image tagging</li><li>Correct category/album markers (ala IPB)</li><li>Allow users to choose album covers from images in an album</li></ul><br><b>IP.Downloads</b><br><ul><li>Better and more abstracted support for file records.  Ultimately the goal would be to allow you to submit multiple files to a single file record.  Uses would include "contributed files", breaking single files into "parts" (i.e. for large movies), and multiple screenshots per record, for instance.</li><li>Support for mirrors</li><li>Ability to shut off "resume breakpoints"</li><li>Better category control - template type system perhaps with ability to selectively override without ditching entire template</li><li>More reliable upload progress meter</li><li>Correct category markers (ala IPB)</li><li>File tagging</li><li>Dynamic and session-based download urls (when you start a download, create a new "url" for it that is only accessible for that session and is destroyed afterwards to further prevent hotlinking)</li></ul><br> These are just some ideas we're floating around.  Final feature lists will be determined after the release of IP.Board 3.0.<br><br> We know many of you have been wondering how component updates will be handled with this release, and we've stayed quiet mainly because we weren't certain what we'd be able to accomplish.  Hopefully this information will help you plan your site updates accordingly.
]]></description><guid isPermaLink="false">491</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Board 3: Administration Improvements</title><link>https://invisioncommunity.com/news/invision-community/2623-ipboard-3-administration-improvements/</link><description><![CDATA[<b>Introduction</b><br> Administration is an important part of running your site.  You need to be able to control your site the way you want to, and you need to be able to do it as quickly as possible.  Not everyone has an hour or two to hunt down a setting, after all.  Once you start to factor in the fact that other applications (such as IP.Blog, IP.Gallery and IP.Downloads) can integrate into this same administration control panel there are new challenges to take into account as well.<br><br> With IP.Board 3 we've made improvements to the ACP in an attempt to help streamline common administrator actions and make the overall work flow clearer and easier.<br><br><b>Navigation</b><br> Navigation is a tricky thing to manage once a project becomes as large as IP.Board has.  We've broken navigation down into multiple areas to help you drill down and find what you are looking for.  Firstly, each application is listed at the top of the page - that way you can jump to whatever application you need to edit right away (no more navigating to the "Components" tab to edit IP.Gallery categories, for example).  Then, along the left hand column you will find an expandable menu which provides access to the main pages of the application, similar to IP.Board 2.  For applications requiring it, context links and tabbing are then utilized within the main area of the page to facilitate your work flow.  We realize without screenshots it may be hard to visualize the new ACP, but a primary goal throughout the whole process was to retain a level of familiarity so that existing admins will find navigating very natural, while improving the process where-ever possible.<br><br><b>Searching</b><br> One complaint we've heard over the years is that new administrators frequently have trouble finding where they need to go in the ACP.  Searching is a natural inclusion to help people find what they need, and can even be helpful for seasoned administrators as a shortcut to get where you need to go quicker.  We have added a live-search facility to the admin control panel to help you find what you need much much easier (and before anyone asks - yes, "live search" is like the search on apple.com :rolleyes: ).  The settings page already had search functionality in IP.Board 2, but we felt that wasn't good enough.  Many times the "setting" you are looking for is found when editing a group, not actually in the main site settings area.<br><br> To that end, the live search searches "settings", "pages" and "acp help" files.  We have also included a method of adding keywords to these sections so that if we find many users are looking for an area through a specific keyword, we can easily add that keyword into the system so that searching for it will return the results people are looking for.<br><br> We will need your help once IP.Board 3 goes into beta testing with identifying areas that need keywords added for new administrators.  What a wonderful way for all of you who are so eager to help out to give back to the community!  And you don't even need to know PHP or HTML for this. :D<br><br><b>Better Integration</b><br> While we have mostly already gone into detail on this front in other blog entries, just to recap on the subject within the context of this blog entry, improvements have been made to areas of the ACP that people frequently need to plugin to in order to help improve usability overall.  For instance, an application can now show per-group settings on the actual group edit form, instead of having to provide a separate disconnected page in the application itself (for instance, the "Group Settings" page of IP.Gallery - these settings are now directly include on the edit group form instead).  Similarly, applications can plugin to the edit member pages of the ACP, all with no file editing required.  Settings for an application can, as they could in IP.Board 2, still be included within the settings area of the ACP.  This means you can edit a group and control all of it's settings, without having to go to each application separately to update settings for the group.<br><br><b>Permission Editing</b><br> Many applications have a permission matrix - a grid of checkboxes that control what each permission mask can do within that application.  This system works so well that we centralized the functionality in IP.Board 3 to make it easier to reuse and control.  In doing so, we've also created an easy method of updating settings for every application on a per-permission set level.  That is to say, if you want to update the permissions for users in the "Validating" group, you can do so globally from one page - for all applications at once.  Remove calendar permissions, forum permissions, and gallery access all at once, without having to visit each application individually.<br><br> Going along with this, many users have been confused with how permission sets and groups relate to each other.  We hear often from administrators that they created a new group - now how do they set the permissions for that group?  To make this easier to understand and manage, when adding a new group there is a field that will allow you to fill in a new permission mask name (if you want to set permissions for the new group differently from other groups).  After you save the new group, you will be redirected to the page that allows you to edit that group's permissions globally.  You no longer have to create the mask first, set all the permissions (in each application separately, as well) and then add the group afterwards, selecting the new mask.  Now it can all be done in one simple, easy to understand work flow.<br><br><b>Template Editing</b><br> I can't give out too many details on the template editor interface *just* yet I'm afraid, but let's just say that template editing has been entirely overhauled.  We have put a lot of thought into ways of making it easier to edit templates, CSS and macros to hopefully help administrators work through their skins in a much much easier fashion.  Some improvements that you may find interesting:<br><ul><li>HTML Syntax highlighting of skins when editing the templates in the ACP</li><li>Condensed HTML templates make it much easier to edit an entire "page" without having to edit 8 separate templates that will be compiled into one page</li><li>No more separate "Global board header and footer wrapper" area.  We have, instead, made a wrapper template which includes the content of this area as well as the global_board_header, global_board_footer, member_bar, navigation, and a few other common areas shown on every page</li><li>AJAX CSS editing.  This was actually a specific request from Rikki - apparently it's rather inconvenient to scroll 3 pages down in the CSS file, edit a color, save it, and end up at the top of the file/textarea and have to find where you were at again.  Go figure.  Anyways - when you save a CSS file now, it uses AJAX to save the contents, and the page remains stationary so you don't lose your place.</li></ul><br><b>Reordering content</b><br> Remember all those lovely reordering dropdown menus (e.g. in the forum management screen)?  Or those wonderful up/down arrow combinations (e.g. in the component management screen)?  While they certainly served their purpose, they were identified for IP.Board 3 as being both inconsistent and, well, old.<br><br> All areas utilizing reordering functionality for all of our applications will use drag-n-drop + AJAX javascript functionality in IP.Board 3.  Want to move a forum up one spot, just drag it up there and you're done.<br><br><b>In Closing</b><br> We think you will find that all in all the ACP area will be much easier to navigate and utilize in IP.Board 3.  Once we get into the public beta testing stages and you get a chance to review our changes we'll be eager to hear your opinions and suggestions on the new and improved administration area.
]]></description><guid isPermaLink="false">490</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Board 3: Kernel Improvements</title><link>https://invisioncommunity.com/news/invision-community/2617-ipboard-3-kernel-improvements/</link><description><![CDATA[<p>Since IP.Board 2, we've had a "kernel" of classes which IP.Board uses <i>but</i> do not depend on IP.Board to use. A selection of these kernel classes includes DB management, file uploads, emailing, RSS parsing and reading, XML parsing and reading and our proprietry archive format XMLArchive.<br><br> For example, you could use "classUpload.php" and "classImage.php" in your own modifications or extensions to handle uploads and GD thumbnail generation. You would not have to initialize the registry or do anything else other than just include the file and use it.<br><br> As we took the plunge and went ahead with making PHP 5 a requirement, we were able to make some long-awaited improvements. Here are the high-lights.<br><b><br> Custom Fields</b><br> Josh has completely re-written custom field handling within IP.Board and this class ties it altogether. Josh uses just about every PHP 5 trick in the book including abstract classes, interfaces and ArrayAccess to provide a simple clean interface that can be used in almost any project. It doesn't have to be limited to just IP.Board's custom profile fields.<br><br><b>Graphing</b><br> Remco has extended this class to include many new graph types including "funnel", "bubble" and "radar" graphs so that presenting data is more relevant. As IP.Board 3.0.0 develops, we'll be making good use of these new methods for statistic reporting within the ACP.<br><br><b>GD and ImageMagick</b><br> Brandon virtually started from scratch with our GD image creation. He also wrote a class for imagemagick offering more choice for those who have it installed. It's now very simple to resize an image or add a watermark.<br><br></p><p> $image-&gt;init( array( 'image_path'    =&gt; "/path/to/images/",                       'image_file'    =&gt; "image_filename.jpg" ) );   //Set max width and height $image-&gt;resizeImage( 600, 480 ); // Add a watermark $image-&gt;addWatermark( "/path/to/watermark/trans.png" ); $image-&gt;displayImage();</p><pre class="ipsCode">$image = new classImageGd();<br><br><br><br><br><br><br><br><br></pre><p><br><br><b>XML Parsing and Creating</b><br> We've had a class for XML parsing and creating since IP.Board 2 but it was a kludge of PHPs then primative XML handling extension and a hand-rolled class for when the XML engine wasn't available. These methods functioned well but were known to be memory intensive.<br> Thankfully, PHP 5 has much better native XML handling which I took full advantage of when rewriting this class.<br> I looked at simpleXML intially but found it too, well, simple for our needs so I went ahead and used the full DOM methods. This gives us full control over both reading and creating XML documents.<br><br> Here's how simple it is to create a new XML document:<br><br></p><p> $xml-&gt;newXMLDocument();   /* Create a root element */ $xml-&gt;addElement( 'productlist', '', array( 'name' =&gt; 'myname', 'version' =&gt; '1.0' ) ); /* Add a child.... */ $xml-&gt;addElement( 'productgroup', 'productlist', array( 'name' =&gt; 'thisgroup' ) ); $xml-&gt;addElementAsRecord( 'productgroup',                                             array( 'product', array( 'id' =&gt; '1.0' ) ),                                             array( 'description' =&gt; array( 'This is a description' ),                                                    'title'         =&gt; array( 'Baked Beans' ),                                                    'room'         =&gt; array( '103', array( 'store' =&gt; 1 ) )                                                 )                         ); $xml-&gt;addElementAsRecord( 'productgroup',                                             array( 'product', array( 'id' =&gt; '2.0' ) ),                                             array( 'description' =&gt; array( 'This is another description' ),                                                    'title'         =&gt; array( 'Green Beans' ),                                                    'room'         =&gt; array( '104', array( 'store' =&gt; 2 ) )                                                 )                         );                          $xmlData = $xml-&gt;fetchDocument();</p><pre class="ipsCode">$xml = new classXML( 'utf-8' );<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br></pre><p><br><br> This will produce this document:<br><br></p><p>  &lt;productgroup name="thisgroup"&gt;   &lt;product id="1.0"&gt;    &lt;description&gt;This is a description&lt;/description&gt;    &lt;title&gt;Baked Beans&lt;/title&gt;    &lt;room store="1"&gt;103&lt;/room&gt;   &lt;/product&gt;  &lt;product id="2.0"&gt;    &lt;description&gt;This is another description&lt;/description&gt;    &lt;title&gt;Green Beans&lt;/title&gt;    &lt;room store="2"&gt;104&lt;/room&gt;   &lt;/product&gt;  &lt;/productgroup&gt; &lt;/productlist&gt;</p><pre class="ipsCode">&lt;productlist name="myname" version="1.0"&gt;<br><br><br><br><br><br><br><br><br><br><br><br><br></pre><p><br><br> This is how you'd parse that document:<br><br></p><p> /* Grabbing specific data values from all 'products'... */ foreach( $xml-&gt;fetchElements('product') as $products ) {     print $xml-&gt;fetchItem( $products, 'title' ) . "\"; } /* Prints: */ Baked Beans Green Beans</p><pre class="ipsCode">$xml-&gt;loadXML( $xmlData );<br><br><br><br><br><br><br><br><br><br></pre><p><br><br> I'm sure you can appreciate how simple it is to use these new XML features!<br><br><b>XMLArchive</b><br> I created our XMLArchive format for IP.Board as a way of combining several files into one without using tar or zip which can be troublesome on some servers. XMLArchive is very simply file data in a basic XML format. I rewrote the class to make it easier to use and to add more functionality.<br><br> Here's how to read an archive:<br></p><p> $archive-&gt;read( "/path/to/archive.xml" ); print $archive['someDir/file.html'];</p><pre class="ipsCode"> $archive = new classXMLArchive();<br><br></pre><p><br><br> As you can see, we use PHPs ArrayAccess to transparently allow access to the contents of the fileset from the main class handle.<br><br> Here's how to create an archive:<br></p><p> $archive-&gt;add( "someDir" ); $archive-&gt;add( "anotherDir/anotherFile.html" ); $archive-&gt;add( "Create a new file from scratch!", "anotherDir/brandNewFile.html" ); # Save gzipped $archive-&gt;saveGZIP( "/path/to/archive.xml.gzip" ); # Save normally $archive-&gt;save( "/path/to/archive.xml" ); # Just return the data $archive-&gt;getArchiveContents();</p><pre class="ipsCode"> $archive = new classXMLArchive();<br><br><br><br><br><br><br><br><br><br><br></pre><p><br><br> For simplicity's sake, there is now just one interface to add files: "add()". Personally, the fewer function names to remember the better!<br><br> Naturally, this blog entry does not cover all the changes and improvements within the kernel classes but it does go some way to showing just how much energy we've invested in ensuring that IP.Board is as robust and efficient as it can be.</p>]]></description><guid isPermaLink="false">489</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Board 3.0 Search Engine Optimization</title><link>https://invisioncommunity.com/news/invision-community/2610-ipboard-30-search-engine-optimization/</link><description><![CDATA[<p>We receive requests quite frequently to "add SEO to IPB".  This is a very difficult request to quantify and to fulfill.  What is SEO?  What is wrong with IPB's positioning to search engines presently?  What can be done better?<br><br>   We've seen some suggestions over time that make sense, and some we feel would be better left to modifications.  While we are not jumping full force into the "SEO" arena with IPB 3, we have made changes throughout the software that we believe will help you position yourself better for search engine indexing.  This blog post will touch on a few of these changes.<br><br><b>Semantically correct HTML</b><br>   The word "<a href="http://en.wikipedia.org/wiki/Semantics" target="_blank" rel="external nofollow">semantic</a>" means the study of meaning in communication.  Basically, when used in the context of an HTML document, to state that the source code is semantic means that the HTML tags used are appropriate for their representations.  It wasn't too long ago that tables were used to position elements in your browser window, and 1x1px gif images were used to pad areas so things looked nice.  Those days are (almost) long gone, and today's modern web pages are focusing on producing HTML source code that makes sense, while separating styling to CSS documents and javascript to external javascript files.<br><br>   When IPB 3 ships it will validate as xHTML valid, and the source code will be semantically correct.  Deprecated HTML tags and excessive and unnecessary tags (such as 3-layer nested divs) are not used, and the javascript is not obtrusive (*see comments).  Screen readers and search engine spiders should find it much easier to read a topic generated by IPB 3 than IPB 2.  Furthermore, all functions should work (although in some cases to a lesser degree) when javascript is not available.  Heading tags are used properly and feature keywords related to the content on the page.  They also cascade in a defined format so that they represent the content in a meaningful way.<br><br>   *Note: HTML will be semantic and javascript unobtrusive to the extent possible.  There are thousands of configurations, literally, and with so many browsers, options and features it is hard to make a blanket guarantee of this sort.  Rikki has explained more about our goals for the skin in <a href="http://forums.invisionpower.com/blog/ips_news/index.php?showentry=2449" target="_blank" rel="external nofollow">another blog entry</a> if you are interested in the new skin.<br><br><b>Microformat support</b><br><a href="http://microformats.org/" target="_blank" rel="external nofollow">Microformats</a> are common ways to represent similar data.  For instance, it is not uncommon for a random website to have some sort of news or articles data and some sort of user profile page for each user.  Microformats were developed so that these common things could be represented in a common way to help further the web.  By utilizing microformats, other webpages and scripts can parse your page and extract valuable data that they can then share.  Even <a href="http://factoryjoe.com/blog/2006/10/29/internet-explorer-80-will-support-microformats/" target="_blank" rel="external nofollow">Internet Explorer 8 will be making use of Microformats</a> for some of it's cooler new features, while other browsers already do or are also planning to.<br><br>   IP.Board 3 makes use of several microformats to help your document make sense to tools that can read and understand these formats.  Specifically, we are making use of the hCard, hCalendar, rel-nofollow, rel-tag, and rel-home microformats.  We also make use of some other common relationship attributes where appropriate (such as "rel='help'" for the link to the help documentation), even though they are not necessary full-fledged microformats at this time.  Furthermore, we will continue exploring and watching microformats, and applying them as they develop and relate to IPB.<br><br><b>rel='nofollow' Support</b><br>   This is another common request we receive: making all posted links in topics utilize the "rel='nofollow'" attribute appropriately.  Many users, on the other hand, have asked that we do not implement this.  The idea is that search engines should understand "rel='nofollow'" to mean that the webmaster is not endorsing the link, so when the search engine follows it, the search engine shouldn't penalize the website the link is hosted on should they determine it was a bad link, or irrelevant to the linking site.<br><br>   We have added a setting to allow users to enable this without having to make source code modifications.  The rel='nofollow' attribute will be automatically appended to all urls posted and parsed through the normal bbcode routines when the setting is enabled.<br><br><b>Removal of "(Powered by Invision Power Board)" from board index<br></b>For years, since the beginning of IPB, the page title of the board index page has had "(Powered by Invision Power Board)" added to it if you did not purchase copyright removal.  We did not disallow users from removing this text, however, and many users did.<br><br>   We've gone ahead and bit the bullet, and removed this text from the base release.<br><br><b>Removal of "lo-fi" version</b><br>   The lofi version in IP.Board was meant to provide a toned-down basic representation of the current topic or forum.  It was useful for both search engines and mobile browsers.  It was so useful, in fact, that many times when you reach an IPB in a search engine listing you will actually end up at the lo-fi page instead of the full-version page.<br><br>   In IP.Board 3 we have removed the lofi version entirely in favor of the new output engine capabilities.  A mobile skin can be set directly through the admin control panel, negating the necessity for an entirely different script to serve the content.  This is the great thing about the MVC pattern for all you developers - leave the model and controller alone, and just change the view itself.<br><br>   The relationship to search engine optimization comes into play when you consider that the lo-fi version and the full version are essentially duplicating the content from one another, and a commonly held belief exists that search engines penalize you for duplicate content.  While we can't speak for what any given search engine actually does, we did feel this feature was deprecated and no longer needed given advances in the skin system in IPB, and have removed it entirely.<br><br><b>Changing of modes moved to user control panel</b><br>   It's not uncommon for a search engine to index a link to a topic on a site running IP.Board, and for some unknown reason decide the topic is best represented when "&amp;mode=outline" is added to the URL.  While this doesn't stop you from visiting the page, it DOES change the layout of the page, and for newcomers some of the alternate layouts may not be as easy to follow when they first visit your site.<br><br>   Many users do utilize the different layout options (which are handled on a per user-account basis) so we did not feel it wise to remove these options.  Instead, we have moved the ability to change the layout of topics to the user control panel.  This should stop search engines from indexing topics with "mode" parameters in them, reducing confusion for visitors actually clicking the link to visit your site.<br><br><br><b>Additional features</b><br>   Additionally, we've already gone over a few other changes that are related to better search engine positioning which we need not repeat here.  Just as a brief recap, you may also be interested in reading these blog entries<br><br></p><ul><li><a href="http://forums.invisionpower.com/blog/ips_news/index.php?showentry=2594" target="_blank" rel="external nofollow">Friendly URLs will be in IPB3</a></li><li><a href="http://forums.invisionpower.com/blog/ips_news/index.php?showentry=2581" target="_blank" rel="external nofollow">New user agent management used for search engine spider configuration (in addition to other things)</a></li></ul><br><br>   There are many more minor but important improvements buried deep within IP.Board 3 that should help you keep your site listed in search engines appropriately.  While we won't jump on the SEO bandwagon and advocate certain styles of running your site or formatting your urls, we are doing our part to bring basic functionality our users have requested with regards to their site's optimization into reality with IPB 3.
]]></description><guid isPermaLink="false">488</guid><pubDate>Fri, 03 Oct 2008 21:03:00 +0000</pubDate></item><item><title>IP.Board 3: Networking And Integration</title><link>https://invisioncommunity.com/news/invision-community/2603-ipboard-3-networking-and-integration/</link><description><![CDATA[<p>Brandon blogged a while back about IP.Board's <a href="http://forums.invisionpower.com/blog/ips_news/index.php?showentry=2567" target="_blank" rel="external nofollow">integration points</a>.<br><br> I wanted to spend a moment discussing the features within IP.Board 3 that all you integrate the board with your website and to create your own network.<br><br><b>Member Management</b><br> Since IP.Board 2, we've had, what we call, "Log In Modules". This is basically a mini-framework to allow custom code to be used easily when authenticating and registering members. For example, if you had a database full of members and you wanted for them to be able to use their existing usernames and passwords, you could add a log in module to query your database or other system (via SOAP, XML-RPC, etc) for authentication.<br><br> This system has been enhanced based on user feedback and IP.Board now ships with modules for LDAP and OpenID which will make it much easier to use existing authentication.<br><br><b>Networking</b><br> The log in modules also tie into our 'IP.Converge' product which allows you to share authentication details across multiple IP.Board installations. The IP.Boards don't even need to be on the same server! In fact, we use Converge and the log in modules ourselves so that our customers can use the same log in details on the forum as they do in our ticket center.<br> You could use this functionality to share members across many forums, creating a true network of members.<br><b><br> Using the IP.Board Engine</b><br> We've made no secret that IP.Board 3 is a complete rewrite. The new framework makes full use of PHP 5 and incorporates many timesaving features that you can instantly make use of.<br><br> It's common for our customers to ask how they can use certain parts of IP.Board within their own website. For example, they'd like to show a list of recent topics or posts. That's no problem as we've had an API class interface since IP.Board 2.<br><br> However, if you wanted to send data to IP.Board, such as a new post or new personal message; things got tricky. Even using a template bit required a lot of code copying.<br><br> For example, if you wanted to make use of our database engine or templating engine, you would need to copy a lot of 'index.php' so that it set up ipsclass correctly. With IP.Board 3, that is no longer required. You can use our engine in your own scripts as simply as this:<br><br></p><p>  require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );    $registry = ipsRegistry::instance();  $registry-&gt;init();</p><pre class="ipsCode">require_once( './initdata.php' );<br><br><br><br></pre><p><br><br> Those few lines of code give you access to: Caches, settings, member management, database management and more.<br><br><b>Writing your own code</b><br> Quite often, you want to add some IP.Board functionality to your own website. With IP.Board 3.0.0 it's very simple.<br><br> You want to add a new post? No problem, simply use that code above and add:<br><br></p><p>    $postClass = new classPostForms( $registry );  $postClass-&gt;setForumID( $forumID );  $postClass-&gt;setForumData( $this-&gt;registry-&gt;class_forums-&gt;forum_by_id[ $forumID ] );  $postClass-&gt;setTopicTitle( "My Topic" )  $postClass-&gt;setPostContent( "Hello, I am post content!" );  $postClass-&gt;setAuthor( $memberID );    try  {      $postClass-&gt;addTopic();  }  catch( Exception $error )  {      print $error-&gt;getMessage();  }</p><pre class="ipsCode">require_once( IPSLib::getAppDir( 'forums' ) . '/sources/classes/post/classPost.php' );<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br></pre><p><br><br> It's really as simple as that! Note the try -&gt; catch block? That's consistent with all the new API-like functions. We take advantage of the PHP 5 exception handler to return information on what went wrong. We also list all the possible exceptions that are returnable in the phpDoc for that function.<br><br> Of course, seasoned modification authors will already be familiar with functions similar to those present in IP.Board 2's API system. The good news here is that this functionality doesn't require an API bridge anymore, it's the exact same code that is used in the normal posting routines.<br><br> Do you want to send a new personal conversation to someone in your own code? Simple!<br><br></p><p>  $messengerFunctions = new messengerFunctions( $registry );  $messengerFunctions-&gt;sendNewPersonalTopic( $toMemberID, $fromMemberID, $invitedUserIDArray, $msgTitle, $msgContent );</p><pre class="ipsCode">require_once( IPSLib::getAppDir( 'members' ) . '/sources/classes/messaging/messengerFunctions.php' );<br><br></pre><p><br><br> Want to get a list of PMs in your own code?<br><br></p><p>  $messengerFunctions = new messengerFunctions( $registry );  $messengerFunctions-&gt;getPersonalTopicsList( $memberID, 'in' );</p><pre class="ipsCode">require_once( IPSLib::getAppDir( 'members' ) . '/sources/classes/messaging/messengerFunctions.php' );<br><br></pre><p><br><br> Another common request is to use IP.Board's templates in your own projects, again this is as simple as:<br><br></p><p>  require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );    $registry = ipsRegistry::instance();  $registry-&gt;init();    print $registry-&gt;output-&gt;getTemplate( $templateGroup )-&gt;templateName( $templateArguments);</p><pre class="ipsCode">require_once( './initdata.php' );<br><br><br><br><br><br></pre><p><br><br> There really is so much that you can do. Listing them all would make for a very large blog entry indeed! We will of course be providing a lot of documentation on these new features.<br><br> Combine this functionality with the new <a href="http://forums.invisionpower.com/index.php?showentry=2572" target="_blank" rel="external nofollow">hooks and plug-ins system</a> and you've got a very quick way to build new code using our core. We're very excited to see what you do with it!</p>]]></description><guid isPermaLink="false">487</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Board 3: Personal Conversations</title><link>https://invisioncommunity.com/news/invision-community/2601-ipboard-3-personal-conversations/</link><description><![CDATA[<p>Around ten years ago, I was hard at work on one of the first 'Private Message' modifications for a board that has long ceased to exist. At the time it was an exciting novelty to be able to message another board member. These days it's an expected feature for any seriously considered forum software.<br><br> Not much has really changed with messaging's core features. Sure, the interface has become a little smarter and there have been a few little bells and whistles added such as message tracking but ultimately it's still sort-of email based in functionality.<br><br> This was a limitation I noted when developing IP.Dynamic. In fact, almost two years ago, <a href="http://forums.invisionpower.com/index.php?showentry=1807" target="_blank" rel="external nofollow">I blogged about Personal Topics</a>, the next logical step in private messaging.<br><br><b>Enter Personal Conversations</b><br> As, with most of IP.Board 3.0.0's new features, personal conversations - as we like to call them - have been a popular request. A request that we have now fulfilled! Why bother CC-ing and forwarding messages to other members when you can invite them right into the conversation?<br><br><b>How it Works</b><br> Where you would normally 'compose' a new message, you now 'start a new conversation'. The form looks largely the same. However, instead of there being a space to "CC" other members, there are boxes for you to invite other members. How many members you can invite is up to the administrator as it's limited to your group settings. In fact, the admin could remove your ability to invite other members completely if they desired to return to a more traditional messaging system.<br><br> The recipient and each invited member will be notified they have a new message (in terms of notification, a message is either a new conversation or a reply to any existing conversation). The new conversation will appear in both their "Inbox" and their "New" folders. It will remain in their "new" folder until its read and then it will only be available in the inbox. Why? Well, because of the magic folders. But more of that in a moment.<br><br> The conversation looks largely the same as a normal topic does; linearly sorted with the newest replies last. There is even a "fast reply" form much like you use when replying to topics. This instantly makes it easier to view previous replies and keep the 'thread' of conversation without having to delving into your 'sent' folder to see what you replied with.<br><br> The topic starter (and any participating super moderator) can choose to 'block' any participant that is blockable. Immunity from being blocked is granted by the "Not Ignorable" setting. This means you can ensure that you (the admin) can never be blocked from a conversation you are participating in. When a participant is blocked, the topic vanishes from their folders until they are unblocked.<br><br> Each participant apart from the topic starter can choose to leave a conversation at any time. Once the participant has left the conversation, it is only available in the magic "Finished" folder and the replies no longer count towards your space allowance. The topic starter cannot re-invite you but you can choose to rejoin the conversation at any time.<br><br> The topic starter can choose to invite more members (up to their invite allowance) at any time from the conversation display screen. Each participant can also view all participants and see the last time they read the conversation.<br><br><b>Magic Folders</b><br> This is the term we give to certain folders that are not editable or removable. They are: "New", "Finished", "All" and "My Conversations". Topics in "New" and "My Conversations" can also be in other folders. "My Conversations" is the default location for any conversation you start. You can then move into another folder -- but it will always be accessible from "My Conversations".<br> "New" simply lists any new personal conversations or any personal conversations with new replies. So, you could have a conversation in "My Folder". When it receives a new reply, it will also be listed in "New" until you read it.<br> "Finished" simply lists all the conversations you've left, allowing you to rejoin if desired.<br> "All", as the name implies, lists all the conversations you are participating in as either a starter, recipient or invitee.<br><br> We think this is a very exciting step forward for personal communication and opens up new ways to communicate via the forum. Ten years is a long time to wait for change. We hope you find it worth the wait!</p>]]></description><guid isPermaLink="false">486</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Board 3 Testing Procedures</title><link>https://invisioncommunity.com/news/invision-community/2599-ipboard-3-testing-procedures/</link><description><![CDATA[<p>As we get further along in the development cycle for IP.Board 3 an obvious step that we will be taking on soon is general testing of the new codebase.  While this happens with every release, both internally and publicly, it is even more important for a release as immense as IP.Board 3.  The entire underlying codebase has changed and vigorous testing will be needed to iron out all of the issues us developers have missed.<br><br> With every test phase of a product release, we frequently get barraged with requests from customers asking to be a part of the testing process.  We wanted to let everyone know that we have come up with a process for IP.Board 3 that we think will please everyone - everyone will be able to test the new release if they wish to. :)<br><br> Progress is happening at an astounding rate, and right now we're working through bugs that we have identified and putting finishing touches on much of the software.  The skin is still heavily being developed and worked on, both on the front end and in the admin control panel.  Trust me when I say we're just as eager to get people in and show off what we've been working on as you guys are to see it.  Please bear with us as we continue working on these rather unexciting yet necessary steps.  We know you're anxious to see it and we want to ensure that what we deliver is what you are expecting.  To that end, please also understand that future blog entries may be a little less exciting than they have been for the last several weeks.<br><br> All of us have begun testing IP.Board 3 internally.  As we discover unfinished areas or bugs, we are working hard to rectify these things to get IP.Board 3 as stable as possible.  We are still working through bug reports from previous versions of IP.Board, as well, to get IP.Board 3 off to a fresh start with as few bugs as possible.<br><br> Once we feel that IP.Board 3 is relatively stable, and that we have worked through all of the issues we have found internally, we will be inviting our customers (you!) to take a look and to give us your feedback.  This first stage of testing we expect to remain tightly controlled, with us hosting a copy of IP.Board 3 and providing you access to this copy.  You will be able to use the features and we would love for you to report back your comments on the functionality, the skin, and any issues you find.  More information about what we will be looking for exactly will be available once we reach this point.<br><br> After we have ironed out all the bugs and addressed all of the feedback we can, we (as per our usual procedures) will be updating our company forum.  This helps give us a chance to really test out the new release in a live environment.  You'd be surprised at some of the issues that never come up during development and basic testing that come up when you move to a live environment.  This also helps give us a chance to test the software under a real-world usage scenario, giving us information about resource usage and areas of the software that we feel need improvement to be able to handle today's large forums.  We are dedicated to ensuring that IP.Board 3 runs efficiently so that you can don't have to worry about how your site runs, but rather how you run your site.<br><br> Finally, once we've gotten to this point and feel we've nailed down all of the bugs we can (or at least most of them) and we feel the software is stable and resource-friendly, we will open up IP.Board 3 for public beta testing.  This is the point where you will be able to download IP.Board 3 and install it on your own servers (but not upgrade your live website) so that you can test it to ensure that our next generation release will meet your needs.  There are, quite literally, thousands of different configuration scenarios and hundreds of different server environments out there, and this stage of testing gives us a chance to help make sure IP.Board will run properly and bug-free in as many setups as possible.<br><br> Throughout this process, we will be contacting modification authors, community project teams, and skinners to help get them started as well.  We would love for IP.Board 3 to launch and have resources available right from the start, or as shortly there-after as possible.  While we have no control over third parties integrating with our software, we will do what we can to assist these developers so that our customers will have as short a wait as possible for the software they need to run their sites.<br><br> From there, we plan to follow the normal routines we follow for release.  We will correct reported bugs, test them internally, and release public betas for further testing.  When we feel we are ready for release, we will put out a "Release Candidate" version of the software.  This release is one that, to our knowledge, should be ready for prime time, but we are providing another chance for customers to test it and report back any issues that they have found so that they may be addressed before we release the software as "final" for general public usage.<br><br> We know everyone is excited about IP.Board 3, and eager to get a look at what we've been working on for the last several months.  We are eager to show it off, and are looking forward to the testing phases described above.  These phases give us invaluable feedback from the most important users - you!</p>]]></description><guid isPermaLink="false">485</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title><![CDATA[IP.Board 3: Friendly URLs at last&#33;]]></title><link>https://invisioncommunity.com/news/invision-community/2594-ipboard-3-friendly-urls-at-last33/</link><description><![CDATA[<p>Possibly the most often requested feature we've had since the very first version of IP.Board is 'friendly URLs'.<br><br>  Although this sounds like you'd expect your URLs to greet you with a  self-empowerment phrase first thing in the morning, it really relates  to making the board generated URLs a little more attractive to both  humans and search engines.<br><br>  I am being very careful to avoid the phrase "Search Engine  Optimization" in this opening few paragraphs despite it being used  often in the request for friendly URLs. What we've added will  definitely help with SEO but it's not a complete solution and neither  is it intended to be.<br><br><b>So, what <i>do</i> you have?</b><br>  In a nutshell: friendly URLs! The process to create and manage them is  far more interesting than the end result, but more on that in a moment.  Lets first look at some examples of the new URLs.<br><br>  Here's a few sample URLs from IPB 2.3.x:<br><i><br>  To show a forum (My Test Forum):<br>  www.board.com/forums/index.php?showforum=10<br><br>  To show a topic (My Test Topic):<br>  www.board.com/forums/index.php?showtopic=99<br><br>  To show a user (Matt Mecham):<br>  www.board.com/forums/index.php?showuser=30</i><br><br>  There's nothing wrong with those URLs. They are short and concise and  they spider very well, but we can do a little better to make them more  attractive.<br><br>  If you are on a Windows webserver, you can use the 'query' string method which presents URLs like this:<br><br><i>www.board.com/forums/index.php?/forum/10/my-test-forum<br>  www.board.com/forums/index.php?/topic/99/my-test-topic<br>  www.board.com/forums/index.php?/user/30/matt-mecham</i><br><br>  If you are on an apache based web server you can make use of the 'path_info' method:<br><br><i>www.board.com/forums/index.php/forum/10/my-test-forum<br>  www.board.com/forums/index.php/topic/99/my-test-topic<br>  www.board.com/forums/index.php/user/30/matt-mecham</i><br><br>  Even better, if you can manage your own .htaccess files, you can make  use of the mod_rewrite functionality. For convenience, the mod_rewrite  code is generated for you. The end result looks like this:<br><br><i>www.board.com/forums/forum/10/my-test-forum<br>  www.board.com/forums/topic/99/my-test-topic<br>  www.board.com/forums/user/30/matt-mecham</i><br><br>  What would happen if you used accented characters like this: M</p>]]></description><guid isPermaLink="false">484</guid><pubDate>Thu, 18 Sep 2008 15:00:00 +0000</pubDate></item><item><title>IP.Board 3 Error Handling Improvements</title><link>https://invisioncommunity.com/news/invision-community/2593-ipboard-3-error-handling-improvements/</link><description><![CDATA[<p>It is necessary in any application to handle error situations.  The  most common method of handling such a situation is to issue an alert to  the user so that they know an error has occurred.  While this is  sufficient in most cases to resolve the problem, we wanted to address  IP.Board's error handling routines a little bit with the upcoming  release to try to make them a little more useful.<br><br>  Firstly, we've gone through all of the errors that are issued, and  clarified and separated them.  No more obscure "Sorry, some required  files are missing" error messages when doing something as simple as  visiting a topic that has been deleted.  The error messages should be  much easier for the end user to understand with the upcoming release.<br><br>  In addition to updating the error messages themselves, we've added  unique error codes to each and every message.  The error codes follow a  defined format so that in the event you need to submit a ticket and  reference an error message you received, by providing the error code  our technicians can look up more information on the error and easily  find where and how it was triggered.  This should help make technical  support more efficient for all of us.<br><br>  At some point following the release of IP.Board 3.0, we intend to make  public this error codes database so that users can easily look up more  information on errors when they need to by themselves.<br><br>  Further to this, we've added error logging.  By default, certain errors  will trigger a log to be generated.  Generally, these logs are only  generated when an error has occurred that could indicate a user is  attempting to bypass security restrictions.  Some administrators may  want to trap more errors, however (perhaps even all generated errors),  and as such we've added a setting that allows you to force IP.Board to  log all errors above a given level (levels range from 1 through 5).   Additionally, you can opt to be notified of all errors triggered above  a certain level.  For instance, if you want to know about all level 5  (serious) errors encountered right away, you can have the board email  you when such an error is generated.  This can help you administrate  your board more effectively and securely by identifying issues you  didn't know existed (for instance, in a custom modification), and can  help our technical support drill down on issues that are unique to your  site.<br><br>  The log pruning task has been updated to support the new error log tables so you can prevent it from growing too large.<br><br>  We have some more ideas for improvements to the error system in general  to provide more value and assistance for you and your users.  Errors  are a necessary part of application development, but we are doing our  part to make them as friendly and manageable as possible.<br><br>  If you have more ideas for improvements to the error management system in IP.Board 3 please share them with us below!</p>]]></description><guid isPermaLink="false">483</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Board 3: Topic Marking Overhaul</title><link>https://invisioncommunity.com/news/invision-community/2589-ipboard-3-topic-marking-overhaul/</link><description><![CDATA[<p>Topic markers have evolved quite a bit over the past few years. What started out as being an almost secondary concern has become quite an important part of the user experience.<br><br><b>A Very Brief History</b><br> Early versions of IP.Board relied on cookies to track read topics. This worked fairly well but it wasn't without problems. Anything to do with cookies is always a little flaky. There is a very finite amount of information you can store and browsers have a habit of eating them or not setting them correctly. The biggest complaint, however, is that topics that you have read on one computer do not stay read on another computer.<br><br> IP.Board 2 introduced topic markers that are stored in a database table. This greatly increased stability and allowed the read topics to remain read regardless of computer used.<br><br> However, this did lead to some performance issues on busier boards as the topic marker table is often in demand whcih can result in locking issues and processes queueing. Also, the code wasn't centralized and sprawled through different files making maintenance very difficult.<br><b><br> Learning From Experience</b><br> It was obvious we needed to centralize all the code and create a common, simple public interface as a matter of course. We also wanted to allow our other applications (such as blog and gallery) to use this system without having to copy code. Making it truly extensible also allows modification authors to use this centralized system without having to maintain their own code.<br><br> Next up was the performance issue. How could we increase performance without losing functionality? The most obvious answer was to store the read topics in the user's session. This was fine in principle but there were obstacles to overcome. First of all, session handling in IP.Board 2 is not entirely centralized. There is a class but it is not used exclusively. Other files such as register.php and login.php are allowed to modify the session table without telling other classes what it did. When you're trying to preserve data, this cannot be allowed. Also, session handling in general isn't an exact science. IP addresses change meaning new sessions can be created several times during a single visit.<br><br> The solution to these problems must be robust, centralized and extensible.<br><br><b>So, what's new?</b><br> First up was tightening up session handling. All session management is now performed through a single class (publicSessions). Other files that need to manage sessions are done so via publicSessions. This allows this one class to keep tight control over the session data.<br><br> The biggest challenge was to allow sessions to handle the marker data and only allowing the markers to be written back to the database table when the session is deleted. The theory is sound and simple but the execution a little trickier. The gory details of which are explained a littler further down for the technically minded.<br><br> In brief, the system loads the markers from the database table when a new member session is created. The markers are saved in with the rest of the session data when the session is updated at the end of a page view (to update the running time and location, etc). This continues until the session is due to be removed, for example, when the member is no longer active and the session is older than the allowed time. The sessions to be removed are captured and allowed to be examined by other classes. The item marking class examines these sessions and writes back the marker information to the marker database. The system also makes use of cookies to give some permanence for guests and those that are not logged in. The cookies are limited to the last 100 items read to prevent cookies being sent that are too large.<br><br> The end result is a much leaner system which should be much more efficient and presents a very simple public interface. Here's some sample code to give you a taste:<br><br></p><p> $itemMarking-&gt;markRead( array( 'forumID' =&gt; 2, 'topicID' =&gt; 10 ) ); # To fetch the read status of an item if ( $itemMarking-&gt;isRead( array( 'forumID' =&gt; 2, 'itemID' =&gt; 99, 'itemLastUpdate' =&gt; 1200098989 ) ) === TRUE ) {     .... } # To fetch the last time an item was marked $lastMarked = $itemmarking-&gt;fetchTimeLastMarked( array( 'forumID' =&gt; 2, 'itemID' =&gt; 99 ) );</p><pre class="ipsCode"> # To mark an item read (an item is a topic for the forums 'application')<br><br><br><br><br><br><br><br><br><br></pre><p><br><br> Modification authors can write their own plug-ins and make use of the system with minimal coding effort.<br><br><b>Listen Up, Here Comes The Science Bit</b><br> For the more technically minded, this section explains how the system works within the new IP.Board 3.0.0 framework.<br><br> The first challenge was to make proper use of __construct and __destruct within PHP 5. This is very straightforward in the case of __construct; this is run when the class is initialized. There are no problems with that. The item marking class grabs and filters the cookie data and also grabs and filters the session item marking data in __construct.<br><br> The real issue is with __destruct. Specifically the order in which they are called. In PHP 5.0.0 to PHP 5.2.4 they are called in the order they were created. This means that by the time __destruct() is called in item Marking the DB connection has been closed which isn't at all helpful. This is because the DB is set up before classItemMarking. Now, as of PHP 5.2.5 the __destruct order has been reversed. This means that the DB connection will still be available.<br> However, that's not very convenient for code that has to be robust on different platforms and with unpredictable version of PHP. Another solution was needed.<br><br> Thankfully register_shutdown_function() executes before any __destruct() calls, so we can reliably use this. There is a __myDestruct function in the ipsRegistry class which calls __myDestruct() in all the registry child classes (DB, Member, Request, Cache, Settings, etc). The member registry class makes use of this to fire a manual destruct function within itemMarking to allow it to save back any data for deleted sessions and to provide information for the session update. A __myDestruct fires within the public session class to actually update the sessions and delete the expired ones.<br><br> Phew! As you can see, there's a lot going on behind the scenes in IP.Board 3.0.0 which makes full use of all PHP 5 has to offer.</p>]]></description><guid isPermaLink="false">482</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Board 3: Skin update</title><link>https://invisioncommunity.com/news/invision-community/2586-ipboard-3-skin-update/</link><description><![CDATA[<p>We wanted to use this blog entry to bring you an update on the brand new IPB3 skin. In my previous entry, I didn't go into any detail about the skin itself, but I did introduce the Style Guide and some goals/ambitions for the front-end interface. We're now at a stage where we can talk about the skin itself.<br><br>Whereas most of our other entries explain one particular feature in-depth, this post will be more of a quick-fire overview of some of things we're implementing on the front-end of IPB3, and some other tidbits.<br><br><b>Popup Windows</b><br>We took the decision to try and eliminate all popup windows from IPB3. Popup windows create several problems: in this day and age, you can't guarantee a user will even see them due to popup blockers, and secondly, with the myriad devices accessing the internet now, you can't be sure that a popup window will be supported, or a good user experience.<br><br>Instead, where browsers support it, inline ajax-populated popups are being used. Where browsers don't support it, the user is taken to the content like they would any other page. Our goal is to keep the entire experience confined to one browser window/tab, as I believe it should be. This includes friends management and warning management (for moderators).<br><br><b>Unobtrusive Javascript</b><br>Going hand-in-hand with the above was a desire to make IPB fully usable even if you had javascript disabled. As such, we've worked to make every feature, as far as is possible, available and usable even without javascript. There are some exceptions to this, e.g. the post editor (although you can still post, you'll just see a textarea), but on the whole we're on our way to making IPB3 much more accessible than IPB2.<br><br><b>Getting at user information</b><br>IPB has a lot of relevant information about each user, but presently it can be tedious to access the important details quickly since you have to go to their profile, taking you out of your workflow. New to IPB3 is a user card which can be accessed almost anywhere; wherever you see a username, simply hover over it to get all the relevant information for that user, including photo, contact details and reputation. This has been implemented in such a way that skinners and modders can also integrate it incredibly easily. We've also added a new bbcode which allows users to create these special links from within their posts.<br><br><b>Better uploading tools</b><br>In the past we've had numerous calls for <b>TRUE multiple attachments</b>. You'll be pleased to know that we've fully integrated <a href="http://www.swfupload.org" target="_blank" rel="external nofollow">SWFUpload</a> into IPB3 for webservers that support it (which should be most). For those unfamiliar with this tool, it allows users to select multiple files in the Open dialog, and javascript then manages the upload queue for you. Another cool improvement is we now support upload progressbars with no additional server requirements! In addition, if you upload images, you'll see a thumbnail immediately, making it easy to insert the right image to your post, right where you want it.<br><br><b>Searching</b><br>The search form and results page have both been completely redesigned. Since the search mechanism in IPB3 underwent such a big change in being able to search all applications at once, we needed a new interface that made this easy to use. The result is a search form that adapts, showing you additional filters based on the applications you've chosen to search. The search results page combines all results from the applications you selected, but also allows you to show the results from just one application at a time. And finally, multiple results from one object (e.g. several matching posts in one topic) are grouped together so it's really easy to see the breakdown of your results.<br><br><b>Other significant improvements</b><br>While almost every page of IPB3 has been recoded from scratch and improved, some areas have undergone more changes than most. I'll cover them briefly so you know what you can expect when we unveil the skin:<br><br></p><ul><li><b><i>Improved board index</i></b><br>One of the first steps I made when developing the new skin was to look at each major page and figure out if it could be made more useful than it is now. One result of this process was to improve the board index - and the new hooks system made this possible. The board index now features a collapsible sidebar, showing relevant information such as recent topics, top posters and more. Naturally, since this is hook-based, mod authors will be able to easily add their own data to this area.<br><br></li><li><b><i>User control panel</i></b><br>The control panel was a big focus right from the start. We first knew we were going to remove the messenger from the UCP, since it didn't fit conceptually. What was left has been redesigned, with settings broken down into tabbed sections, showing only the menu for that section - this should prevent new users from being overwhelmed when they open their UCP and seeing so many links.<br><br></li><li><b><i>Messenger</i></b><br>As noted above, the Messenger is now its own complete section, reducing clutter.<br><br></li><li><b><i>User profiles</i></b><br>User profiles have been redesigned, bringing them more into line with what users might expect from their favorite social networking sites. One new feature we're excited about is a Recent Activity feed, which allows you to see quickly what content a user has contributed recently, be it topics or posts, calendar events, images and more. This is made possible by the search index, which we covered in a previous post.</li></ul><br><br><b>Media tag</b><br>We've added a new  bbcode tag, which will insert all kinds of media right into a post. If you put a YouTube link in a media tag, it'll insert the YouTube player; similarly, if you link to a Flickr album, it'll insert a Flickr slideshow. New media handlers can be created in the ACP for those sites we don't support out of the box, while still using the same  tag - making it really simple for your users.<br><br><b>Quick PM</b><br>One last feature to mention - we have implemented a Quick PM feature, which allows you to PM a member from topic view without leaving the page. We hope this increases personal communication, and reduces the chance of topics going off-topic.<br><br><br>I hope that gives you some idea of what you can look forward to with regards to the front-end appearance of IPB3. We'll be previewing the actual design of the skin in the coming weeks as we ramp up testing, so if you have any questions, comments or suggestions on the things I've covered here, now is a good time to get them out!
]]></description><guid isPermaLink="false">481</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title><![CDATA[The &quot;all new&quot; Output Engine]]></title><link>https://invisioncommunity.com/news/invision-community/2581-the-quotall-newquot-output-engine/</link><description><![CDATA[<p>Way, way back in the early days when we were planning IP.Board 3, a primary consideration was to completely overhaul the output engine to add several new features and to increase extensibility.<br><br><b>Out with the old...</b><br>The system in IP.Board 2.x is really just a perfunctory "engine" build around a few methods in a class. There was no real cohesive structure with many different files and functions accessing 'skin' methods. We decided that a virtual re-write was required.<br>We didn't want to be tied to a single output format. Back when IP.Board 2 was first written, there were no iPhones and the idea of actually viewing a forum on a cell phone seemed more than a little crazy. Times have changed.<br><br><b>...and in with the new</b><br> At first glance, the new system isn't that different from what we had in IP.Board 2. It's when you scratch the surface that its power becomes more obvious.<br><br> The first change is that you can have an unlimited depth for child skins. In IP.Board 2 you could only have one level of child skins which was very limiting to some skinners. Also, in IP.Board 2 there was a single master skin from which each skin inherited from.<br><br> While there is still a single "master" skin in IP.Board 3.0.0, it's completely transparent and instead you can set up several different "root" skins for which child skins inherit from. This instantly makes for more flexibility.<br><br> In IP.Board 3, each skin can have multiple CSS files which can be hard-positioned within the ACP to ensure the correct load order for correct cascading.<br><br> Also, each skin allows you to set group-based permissions so that you can determine exactly who can view and select skins.<br><br> And finally, guests can select a skin (as long as you give them permission to do so!)<br><br><b>Going Deeper: User Agents</b><br> IP.Board has a completely new user-agent system where you can add new user-agents and group together several. This system is now used for the 'search engine spider' settings.<br><br> This also means that you can tie a user agent to a specific skin. Do you want your iPod touch and iPhone users to use a specific skin? You can do that very easily within the ACP. Taking it further, you can even designate specific versions for each user agent. Do you want to take advantage of Firefox 3 or IE 8? That's very simple to do now. You can even set a range of versions very simply.<br><b><br> Going Deeper Still: Output Formats</b><br> The biggest change is that IP.Board can now handle multiple output formats. By this we mean that IP.Board has a plug-in architecture to allow completely different processing for HTML, XML or even WAP. This system is completely extensible so modification authors can easily write their own engine plug-ins which drop in and are available for use immediately.<br><br> Each skin must choose an output format to use which means that you can have completely different skin sets for XML and HTML bringing in even <i>more</i> flexbility.<br><br> You can also use a "gateway" file to set the output format. IP.Board 3 ships with two gateway files. "index.php" which is tied to the HTML output format and "xml.php" which is tied to the XML output format. This means that "index.php?showforum=1" and "xml.php?showforum=1" enable the correct output engine instantly.<br><b><br> Putting it Together</b><br> Take this scenario: You want to support WAP using XML with XLST templates specifically for Nokia cell phones. Done, done and done. All without having to make a single PHP modification.<br><br><i>Now that's a powerful system!</i></p>]]></description><guid isPermaLink="false">480</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Board 3: Reputation System</title><link>https://invisioncommunity.com/news/invision-community/2578-ipboard-3-reputation-system/</link><description><![CDATA[<p>One of the most requested features of the past few years has been for a reputation system and we've already announced that it will be included in IP.Board 3. We're very excited to finally be releasing the details of this new feature and hope that you will enjoy this new feature!<br><br>A user's reputation will be displayed on their profile and is based on the number of points that user has. You can configure 'Reputation Levels' in the Admin CP, a level includes text and/or an image, as well as the point value needed for that level. The point value can be either positive or negative, so you could create a level system like this:<br></p><ul><li>-50 Negative Level 2</li><li>-25 Negative Level 1</li><li>0 Normal Level</li><li>25 Positive Level 1</li><li>50 Positive Level 2</li></ul><br>A user receives or loses points when other users vote up or down the content they have submitted to your community. Forum posts, gallery images, blog posts, etc will all have +/- buttons that your members can use to vote on the associated content.  This system is entirely modular, which means that modification authors can also include the reputation vote buttons in their mods and your members can vote on that content as well.<br><br>The forum includes filters to view or hide posts based on the number of points that post has received.  So you can choose to hide all posts that fall below -25, or any other value that you set.  This system works much like the ignore user feature, the post will be hidden with an option to view it anyway.  It is also possible to set an upper threshold that will highlight posts that have more than X amount of points.<br><br>The system has several configuration options as well.  You can choose to allow your members to only give positive votes, or only negative votes, or both positive and negative votes.  You can choose at what level content becomes 'highlighted', you can exclude specific groups from the reputation system, choose if the reputation is displayed on profiles, and choose if the total point value is displayed on a post or other type of content.  You can also limit the number of positive and negative votes that a user group is allowed to give in a 24 hour period.<br><br>We hope you enjoy this first look at the new reputation system, in the coming weeks we will be releasing more information on this system, including screenshots!  As always, please let us know what you think of this feature, you're feedback is invaluable in finalizing all the new features in IP.Board 3.
]]></description><guid isPermaLink="false">479</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Board 3 Plugins and Hooks</title><link>https://invisioncommunity.com/news/invision-community/2572-ipboard-3-plugins-and-hooks/</link><description><![CDATA[<p>Many of you have been waiting for this blog post, and I can assure you  we've been equally as anxious to get it out to you, but we wanted to  ensure the bulk of the system was in place first before releasing  anything we had to pull back on.<br><br><b>General Overview<br><br></b>First, as used in this blog entry, the definition of a "hook"  is a point in the code execution where a modification author can tell  IP.Board to execute his or her code, and then return to the primary  code execution.  A "plugin" is a collection of hooks (any given  modification may need to "hook" into 2 or 3 files, for instance, but  remain one modification - which we will call a plugin).<br><br>  IP.Board 3, as promised, will introduce a new hooks and plugin system  for modification developers to make use of.  The system is relatively  extensive without a lot of "hook points" manually inserted into the  source files which ultimately requires a lot of maintenance and  never-ending "can you add a hook point at xyz location" requests.  We  wanted to provide something out of the box that would scale, that would  be easy to manage and maintain, and that would accomodate most  modification needs without requiring modifications to the core source  code.  At the same time, during development of the new hooks system we  determined that we did not want to simply shift the modification  responsibilities to the skin system either.  While it is arguably much  easier to modify the skin system than a source file, shifting  responsibilities entirely would not solve the issue we are working to  tackle.  The ultimate goal, of course, is to allow you to enhance your  board without having to modify source files to do so.  This makes  upgrading easier, as you don't have to reapply your mods, makes support  easier, as we can easily disable your hooks without having to sift  through files looking for changes, and makes adding plugins easier, as  you don't have to spend 30 minutes applying code changes from an  instruction file to do so.<br><br><b>How the hooks and plugins work for end users</b><br><br>  There is a hooks management page in the admin control panel where all  of your installed hooks are listed.  You can enable and disable hooks  from this page, and reposition what order they are executed in (while  this generally shouldn't matter, the capability exists in case a plugin  needs to hook into another plugin, for instance).  You can also view  detailed information about the plugin that the author has provided  (such as the author name, email address and website, and all files  associated with the plugin), and check your system against the  minimum/maximum PHP and IPB versions the hook supports.  The hooks  system supports an update check URL that the author can use to notifiy  you if a hook is out of date.<br><br>  To install a hook, you will simply upload an XML file from the ACP  interface - that's it!  The hooks system, similar to the popular  Universal Mod Installer for earlier versions of IP.Board, supports  running necessary database queries, importing settings, language bits,  skin templates, modules, tasks, help files and admin CP help files.   The hook installation routine even supports a custom script callback  system in case the installation routine needs to do something we don't  support out of the box.  Similarly, when you uninstall a hook, all of  the changes are automatically reverted, and the custom script can  perform additional cleanup if needed.<br><br>  It's as simple as that.  Import an XML file and view changes on your site immediately.<br><br><b>How the hooks and plugins work at the system level</b><br><br>  When hooks are imported in the ACP, they are cached to .php files in a  /hooks folder.  Only hooks that are registered in the admin CP are  executed, to avoid wasting resources hunting down hooks that are not  being used presently.<br><br>  There are three types of hooks in IP.Board 3:<br></p><ul><li>Action overloaders</li><li>Skin overloaders</li><li>Template hooks</li></ul><br>  Action overloaders allow you to extend an action file, allowing you to  do nearly anything you can imagine.  An example of this might be to  extend the board index source file, add your output to  $this-&gt;output, and then call parent::doExecute() to allow IP.Board  to finish loading the board index with your output prepended.  Or, you  may want to extend a source file so that when a form is submitted, you  can store additional data in the database.  Most properties and methods  in IP.Board are set as protected, giving you full access to them from  your extended class.<br><br>  Skin overloaders work similar to action overloaders, except that you  are extending a skin file.  A good example of why you might want to do  this might be to entirely change a template's contents if the user  meets a certain criteria, or if you want to prepend or append HTML to a  template without requiring the user to manually edit each of their  skins.<br><br>  Finally, template hooks provide an extremely powerful way to manipulate  the HTML output, which is what most modifications are designed to do.   Before and after each foreach loop, if statement, and else statement,  HTML comments are inserted into the HTML output (automatically by our  skin system, so as to avoid annoying our beloved skinners) with a very  specific syntax.  When you register your template hook in the ACP, you  specify where in the skin you want to hook into.  During display, if  your hook is enabled, it is executed and the HTML comment is replaced  with the output returned from your hook.<br><br>  Overall, this provides methods for injecting your code into source code  functionality and into the final output engine, covering most cases for  modification authors.<br><br>  We will be providing some examples with the releases of IP.Gallery,  IP.Blog and IP.Downloads.  I don't want to give away any details on  these just yet, but some of the things users have been begging us to do  that we've always said we can't as it would require modifications to  IP.Board will now be possible, allowing for a much tighter integration  between our applications than has ever been possible.<br><br><b>How the hooks and plugins work for developers</b><br><br>  In the admin CP when you create a new plugin, you fill in some basic  details such as author, plugin name, and website.  You create the hook  files and then on the form when creating a new plugin you configure  which files are a part of the plugin (there is no limit to the number  of files you can add to a single plugin).  You would then develop your  work as normal.<br><br>  When you go to export the plugin, you can interactively configure  settings, setting groups, language bits, skin templates, modules, help  files, ACP help files, custom installer/uninstaller scripts, tasks, and  database changes that you want to export with the hook.  If you have  used the universal mod installer in the past, this system is similar,  with the main difference being that you interactively configure these  details in the admin CP instead of through an XML file.<br><br>  When you finally export the hook, your source code is collected (as  well as the source code for the install/uninstall script) and included  within the XML file.  The hook import routine takes care of caching the  code and importing all of the data you configured to export with the  plugin.<br><br><b>Closing</b><br><br>  Before starting on the system we wrote down 5 different popular  modifications and requests that we've seen for a while to verify that  once finished we would be able to accomplish each of these  modifications without actually modifying the source code in IP.Board 3  - and we've passed this baseline test.  We intend to release more  details on the system's specifics for modification developers closer to  the release of IP.Board 3 to help them learn the new system, as well as  examples of how to accomplish various things without modifying the  source code, through our <a href="http://resources.invisionpower.com/" target="_blank" rel="external nofollow">official resource site</a>.
]]></description><guid isPermaLink="false">478</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Board 3 Centralizes Reported Content</title><link>https://invisioncommunity.com/news/invision-community/2570-ipboard-3-centralizes-reported-content/</link><description><![CDATA[<p>Managing reported content in IP.Board 2 and our first party applications for IP.Board 2 is decentralized.  When a user reports a post due to inappropriate content, moderators assigned to the area in question will receive either a private message or an email to alert them to the post, and it is then expected that a moderator address the inappropriate content.  It can become difficult to track who has done what, whether the report has been addressed, and so on.<br><br><a href="http://forums.invisionpower.com/index.php?showuser=57416" target="_blank" rel="external nofollow">Luke</a> wrote an addon for IP.Board 2 that addresses this issue and centralizes the reported content into one area.  This addon was so well received (and in our opinion, needed) that (with his permission) we are incorporating his Report Center addon into IP.Board 3 out of the box.<br><br>For those of you familiar with his modification, you will already be aware of what it does and how it works.  For the rest of us, here's a brief summary of how the changes work and the associated benefits.<br><br>Firstly, all reported content from all applications are added into a central repository for moderators to address.  Moderator permissions are still honored, so your Gallery moderators who do not have access to moderate your forums will not be presented with these reports.  By bringing everything into one area, your moderators can quickly determine how many outstanding and unresolved reports are pending action.  Multi-moderation is also available in the report center so you can quickly prune reports, or change statuses for multiple reports at once.<br><br>Statuses and severity levels can be set to help you identify which reports require attention first.  You can configure severity levels based on "points" for the number of times an item has been reported, and based on age (so the oldest reports will be highlighted as needing more attention).  Icons can be associated with the severity levels so that you can customize the final display.  Reports can have basic "open", "closed" and "active" statuses, and you can configure additional statuses as you wish.<br><br>Moderators can comment on the report in private, allowing them (and you) to leave notes about what has been done, whether the offending user has been contacted, and to ask questions.  The comments cannot be deleted by the moderators, allowing you to retain a log of moderator activity on the board.<br><br>When multiple users report an item and an active report is already opened for that item, all of the subsequent reports are stored with the original report to provide a more organized system for your moderators to work with.  Combined with the severity levels, this can help you to more quickly identify things that need to be addressed on the board.<br><br>You can still configure the system to send private message or email notifications when content is reported after it is added to the queue, if you prefer to still receive notifications.  An indicator for moderators is added to the top of the page identifying how many active reports (that you can access) are open, and when viewing reported content an indicator is displayed to moderators if the content has been reported.<br><br>Additionally, if you use Luke's report center modification presently, your existing Report Center data will be retained upon upgrading to IP.Board 3 - we are keeping his same table names during the upgrade, so all of your current reports will still be available.<br><br>We hope the addition of this new feature will help administrators and moderators manage their community easier and with more organization than in previous versions.</p>]]></description><guid isPermaLink="false">477</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Board 3.0 Integration Made Easier</title><link>https://invisioncommunity.com/news/invision-community/2567-ipboard-30-integration-made-easier/</link><description><![CDATA[<p>IP.Board has grown a lot over the years, however at the core of it,  addons have always been just that - additional software layered onto  IP.Board.  Some points of integration have existed to allow things to  work smoothly together, but code separation has forced most  functionality in IP.Board and components to also remain separated.  One  of our primary goals with IP.Board 3 is tighter integration of the core  software and the addons, and to that end we have been working on many  integration points throughout the software.<br><br>  While we won't get into an exhaustive list here, we'll go into a few of the more noticable areas of integration in IP.Board.<br><br>  A common occurrence with addon modules for IP.Board is the need to  provide group and member settings.  Previously you would need to modify  the source code for those forms, or build an entirely new page for  admins to manage those settings.  andIP.Board 3 addresses this issue by  making the group  member editing forms modular.  Your application can  provide a class that will allow you to both output form HTML to be  added to the forms, and to process that submitted form data to be saved  when the form is submitted.  The end result?  Your applications can add  add settings to the group and member forms without having to directly  modify the IP.Board files, and without having to create entirely new  pages.  The end result for admins allows them to manage all of their  group and member settings in one place without having to guess where  they need to jump around to in order to configure their groups and  members.<br><br>  IP.Board can now pull RSS feeds from each application and handle the  general grunt work - your application need only provide the actual RSS  content to output.  This allows for IP.Board to add the RSS HTML link  tags onto every page, instead of you having to manually output the RSS  link somewhere.  This makes it easier for both visitors and browsers to  find all of the RSS feeds available on the site.<br><br>  We  discussed how each application can now make use of our <a href="http://forums.invisionpower.com/blog/ips_news/index.php?showentry=2562" target="_blank" rel="external nofollow">centralized  permissions management system</a> in a previous blog entry.  Likewise  we discussed how you can integrate  into the new  <a href="http://forums.invisionpower.com/blog/ips_news/index.php?showentry=2556" target="_blank" rel="external nofollow">centralized search system in IP.Board 3</a>, allowing  your application to be indexed globally and be available in the  centralized search system.<br><br>  Of course cache loading and session management/parsing from IP.Board 2  is still possible in IP.Board 3, as is the ability to integrate with  the user control panel.  There have been some small enhancements to all  of these areas as well.  For instance, you must define in your caches  array all of the information necessary to rebuild your cache -  afterwards rebuilding your cache (from any file in IP.Board) becomes as  easy as <br><br></p><p></p><pre class="ipsCode">$this-&gt;cache-&gt;rebuildCache( 'cache_name', 'application' );</pre><p><br><br>  You can determine which areas you will be showing the text-editor  throughout your application, allowing administrators to  <a href="http://forums.invisionpower.com/blog/ips_news/index.php?showentry=2524" target="_blank" rel="external nofollow">enable  and disable individual bbcodes throughout your application</a> to  their liking. <br><br>  The ipb_member_sync.php file has been completely scrapped and rewritten  to run in a similar modular fashion, allowing each application to  define it's own requirements when a member is deleted.  This makes it  easier to fix broken content from members when they are deleted by  allowing you a chance to clean it up during deletion.<br><br>  For developers, this means you can much more easily take advantage of  all of the available framework and code in IP.Board without having to  reinvent the wheel each time, so to speak.  And for administrators,  this means it will now be much easier to find what you are looking for,  and much quicker to make global changes to your entire site at once.<br><br>  There are many more integration points throughout IP.Board 3, but the  above should give you a small idea of some ways we are making it easier  for third-party developers to make their application feel more like a  part of the site and less like a separate addon. Stay tuned for more information on our brand new hooks and plugins system next week!</p>]]></description><guid isPermaLink="false">476</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Board 3: Global Permissions</title><link>https://invisioncommunity.com/news/invision-community/2562-ipboard-3-global-permissions/</link><description><![CDATA[<p>When we began planning IP.Board 3, the global search system was one of the first features that we decided would be essential.  We've already talked about the global search, now we're going to tell you about the permissions system that makes the global search and other features possible.<br><br>In previous versions of IP.Board, every application had to maintain it's own permission tables and database information.  This created many different permission systems that all had to be separately maintained.  When you added a new permission set, you would have to go to the forums section, the gallery section, the calendar, and so on to set up permissions.  This system has quickly grown cumbersome to use from a user standpoint, and difficult to integrate with from a developer stand point.<br><br>IP.Board 3 will introduce a new global permission system that every application can use, including modifications.  Rather than maintaining separate permissions, all permissions are now stored in a permission index table.  This table is generic enough to be used by any application.  Each application will include a simple configuration class that will tell IP.Board how to use the permission index for that particular application.  The system currently supports a 'view' permission and 6 'custom' permissions, the custom permissions are defined by the configuration class for each application.  The view permissions is what we use for permission checking during a global search, or any other feature that uses the search index.<br><br>Currently the permission configuration looks something like this:<br><br></p><p></p><pre class="ipsCode">    private $mapping = array(
                                'view'     =&gt; 'perm_view',
                                'read'     =&gt; 'perm_2',
                                'reply'    =&gt; 'perm_3',
                                'start'    =&gt; 'perm_4',
                                'upload'   =&gt; 'perm_5',
                                'download' =&gt; 'perm_6'
                            );
                           
    private $perm_names = array(
                                'view'     =&gt; 'Show Forum',
                                'read'     =&gt; 'Read Topics',
                                'reply'    =&gt; 'Reply Topics',
                                'start'    =&gt; 'Start Topics',
                                'upload'   =&gt; 'Upload',
                                'download' =&gt; 'Download',
                            );</pre><p>

All your application will need to do is edit these values and IP.Board will know how to handle permissions for your application.  If you wanted to check the reply permission, you would simply do this:

</p><p></p><pre class="ipsCode">$this-&gt;registry-&gt;class_permissions-&gt;check( 'reply', $perm_row );</pre><p>

In the Admin CP, if you want to show a permission editor, all you need is this:

</p><p></p><pre class="ipsCode">$permissions-&gt;adminPermMatrix( 'type_of_permission', $perm_row);</pre><p>

This will return the full HTML for a permission editing matrix, to save that matrix you would do this:

</p><p></p><pre class="ipsCode">$permissions-&gt;savePermMatrix( $this-&gt;request['perms'], $perm_type_id, 'type_of_permission' );</pre><p><br><br>In that example, if you were editing a forum, then the perm_type_id would be the id of that forum.<br><br>We hope that this system is going to make integration much easier for mod authors, as well saving them from having to develop their own systems for managing permissions.  We will be providing documentation and example code for this system via the resources site later in development.<br><br>While developers will receive most of the benefits from this new system, it does allow for an important user level feature as well, the ability to manage all permissions from one screen.  Now when you edit or add a permission set, you will see Forums, Gallery, Downloads, and any modification that uses the system all on one screen.  This saves you from having to jump all over the system to edit permissions for any one set, which we think is going to be a great time saver.<br><br>This new permission system is a very important step in one of our primary goals, integrating all applications as closely as possible.  In our next blog post we're going to tell you about even more of the integration features you can expect from IP.Board 3!</p>]]></description><guid isPermaLink="false">475</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Board 3: Global Search</title><link>https://invisioncommunity.com/news/invision-community/2556-ipboard-3-global-search/</link><description><![CDATA[<p>During the initial design phase for IP.Board 3, one of the first areas that we identified for a major overhaul was the search system.  In IP.Board 2, each application is required to have it's own search engine, which creates many silo's of data that can not be easily searched.  IP.Board 3 will introduce a new global search system that will make all of the content of your community easily searchable, no matter where that content is located.  You will have the option of showing the results from all applications within one listing, or filtering your results by application.<br><br>One of our primary goals in IP.Board 3 is to dramatically increase the integration level between all of our community products, so that they feel more cohesive than in IP.Board 2.  This new search system is just one example of how we are working to achieve this.  However, we don't want this ease of integration to apply only to our own products, so modification authors will be able to utilize this same system for their own applications.  Through the use of a simple plugin system, modification authors will be able to have content from their applications show up within the global search results.<br><br>The new search system will also be more streamlined and easier to use.  The new "Advanced Search" form is much friendlier than the form in IP.Board 2 is, making it much easier to determine how to formulate your search.  Additionally, every page will include a quick search box in the header that you can always use to search, no matter where in the system you are.  This quick search box will also include 'live search results' that will dynamically show you a preview of your results as you type the search term in the quick search box.  The live search will be context-sensitive.  That is to say, if you are in a forum, it will search that forum; if you are in a topic, it will search that topic; if you are in the gallery, it will search the gallery; and so on.  It provides a link to view all search results (from all applications) should you require it.  Additionally, there is a setting to disable the live search should you not wish to support it on your board.<br><br>Performance has also been an issue with our current search system, our new system aims to overcome this in a variety of ways.  The first is by creating a global search index, which is what powers all the features that I've mentioned previously.  This global search index is much easier and quicker to search than searching the post table.  Since searches will no longer be performed directly on the post table, there will no longer be any issues with locking that table during a search.  To reduce the disk space overhead and make searches even quicker, the search index has a stripped down version of the content that contains no bbcode or markup of any kind.<br><br>The second way we will be improving search performance is by supporting Sphinx out of the box.  Though you will need to install Sphinx yourself, once you have done so, enabling it in IP.Board 3 will be as easy as changing a setting in the ACP.  You will be able to remove the full text index on the post table using either the new search index or Sphinx, which will dramatically reduce the size of that table.<br><br>The new search index will have the added benefit of enhancing other areas of the forum as well, such as the "View new posts" feature. View new posts will now include any kind of content that is searchable, so you will see forum posts, gallery images, blog posts, etc in the new post listing.  There are some other enhancements as well, but we're going to save those for a future blog post.<br><br>We're very excited about these changes and we hope that you will be too</p>]]></description><guid isPermaLink="false">474</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>Language Management in IP.Board 3</title><link>https://invisioncommunity.com/news/invision-community/2555-language-management-in-ipboard-3/</link><description><![CDATA[<p>Over the past few years our international user base has grown by leaps and bounds, and we want to do our best to support those users and make sure that IPB is a great solution for them.  Toward that end, one of our goals for IP.Board 3 is to dramatically improved our language management system.  So today I want to introduce you to a few of the upgrades that you can expect to see in that system.<br><br>First off, we want to ensure that the entire system can be translated, this includes the Admin CP.  You will be able to create and distribute combined language packs that will cover both the front end and the Admin CP.  For administrators, your language of choice will of course carry over to both, without the need of selecting your language for both the Admin CP and the front end.<br><br>You will also be able to assign a 'locale' to a language pack, which allows IP.Board to format all dates and number specifically for that language pack.  Additionally, both the Admin CP and the front end will use UTF-8 as the default encoding type.  There will also be no need to translate images for a language, as the new skin will not utilize any images with text.<br><br>The language bits themselves are now stored in the database directly and cached to flat files.  When you are editing a language pack, you will be able to see the default English string while you translate the string.  You will also have the option of reverting language bits back to the default English string.  Every string now includes a version number, which will let you know what version that string was last updated in.  If you translate a string in IP.Board 3.0.0, and then that string is modified by us in IPB 3.0.1, the language manager will let you know that your translation is out of date and needs to be updated.  It's possible to bring up a list of all out of date language entries, as well as a list of all entries that have not yet been translated.<br><br>We've also added a search feature to the language system, that will make it easy to find specific text within the language packs.  For example, if you wanted to replace all instances of the word 'forums' with 'boards', you can search for 'forums' and the system will show you everywhere that word is used.<br><br>Each application can include an XML file that specifies all of the language strings for that application.  This file will automatically be processed by the application installer, making it easy for modification authors to distribute language strings with their applications.  They will also be able to make use of the string versioning and the application upgrade system will handle updating the strings and letting you know if any of them are now out of date.<br><br>So those are some of the changes that you can expect to see in the new language system.  We hope that these features will be useful to our international users.  If you have any questions/comments about the new language system, please let us know!</p>]]></description><guid isPermaLink="false">473</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>Template tags, revisited</title><link>https://invisioncommunity.com/news/invision-community/2548-template-tags-revisited/</link><description><![CDATA[<p>A while ago, I posted about the new template tags system in IP.Board 3.0.0.<br><br>After some initial feedback on the syntax and having developed the system further, I felt it was worth revisiting in our blog.<br><br>The template tag system is still based on PHP classes (extends and implements, PHP5 fans) which act as plug-ins. These plug-ins are only run when the templates are cached which makes the system very fast and very efficient.<br><br>The new tag syntax is very straightforward and easy to remember: {parse <i>plugin</i>="data" option="value" option2="value2"}<br><br>The updated system also allows you to embed tags, which we'll see later.<br><br>First off, here are the tags which are currently being used in IP.Board 3.0.0<br><br><b>Expression</b><br>This tag is used to parse an in-line PHP expression which returns a value. This can be any inbuilt PHP function or any IP.Board function.<br><br>{parse expression="intval($data['count'])"}<br>{parse expression="IPSText::alphanumerical_clean( $data['value'] )"}<br><br>This makes it very easy to format data on the fly and removes the need for obsessive intval'ing in your code to ensure that a correct value is displayed such as a zero rather than nothing at all!<br><br><b>Template</b><br>This tag is used to insert any other template bit from IP.Board.<br><br>{parse template="pageLinks" group="skin_global" params="$data['start'], $data['end']"}<br><br>The benefit of this tag is immediately obvious. You don't have to 'hack' the PHP sources to re-use template bits.<br><br><b>Variable</b><br>This tag is used to set and alter a template variable.<br><br>To set up a variable with they key 'className':<br>{parse variable="className" default="tdRow1" oncondition="$data['foo'] == 'bar'" value="tdRow2"}<br><br>To alter the variable based on different data:<br>{parse variable="className" oncondition="$data['foo'] == 'foo'" value="tdRow3"}<br><br>To use the variable:<br>{parse variable="className"}<br><br>Lets look at a practical example:<br><br>{parse variable="className" default="row1" oncondition="$data['banned'] === TRUE" value="rowBanned"}<br>&lt;foreach loop="$key =&gt; $data"&gt;<br>    &lt;div class="{parse variable="className"}"&gt;<br>&lt;/foreach&gt;<br><br><b>Striping</b><br>While Rikki was working on the new IP.Board skin, he mentioned that it would be very handy to have some kind of tag that could handle the 'zebra' striping (the alternate row colours when viewing a forum list, etc).<br><br>To set up a striping tag:<br>{parse striping="someKey" classes="tdrow1, tdrow2, tdrow3"}<br><br>To use a striping tag:<br>{parse striping="someKey"}<br><br>When parsed, this tag will cycle through the classes, repeating the cycle if required.<br><br>Let's look at a practical example:<br><br>{parse striping="rows" classes="row1, row2"}<br>&lt;foreach loop="$data as $key =&gt; $value"&gt;<br>    &lt;div class="{parse striping="rows"}"&gt;$key = $value&lt;/div&gt;<br>&lt;/foreach&gt;<br><br><b>AddToHead</b><br>It can be difficult to adhere to strict standards when dealing with templates and piece-meal code. Often you compromise and have javascript and CSS scattered throughout the finished document.<br><br>IP.Board allows you to add content to the document &lt;head&gt; very quickly and simply:<br>{parse addtohead="/js/someScript.js" type="javascript"}<br>{parse addtohead="/css/someCSS.css" type="css"}<br>{parse addtohead="&lt;script&gt;alert('boo')&lt;/script&gt;" type="raw"}<br><br><b>Date<br></b>In previous versions of IP.Board, all the date processing was performed inside the PHP code which made it very hard to customize the date formats beyond what was allowed in the Admin CP. <br>Now, IP.Board allows you to process dates using the date tag in templates.<br><br>Examples:<br>{parse date="now"}<br>{parse date="1765346750" relative="1" format="long"}<br>{parse date="-1 hour" format="manual{d, m, Y}"}<br><br><b>URL</b><br>IP.Board 3 allows a very easy way to format URLs without having to reply on special PHP variables.<br><br>Examples:<br>{parse url="showtopic=1" base="public"}<br>{parse url="showforum=5" base="publicWithApp"}<br>{parse url="photo1.jpg" base="upload"}<br><br><b>Format Number</b><br>IP.Board 3 allows a quick and easy to to access the built in "format_number" function.<br><br>Example:<br>{parse format_number="123456"}<br><br><b>Replacement</b><br>To keep our tags uniform, we've removed the old 'macro' tag (&lt;{MACRO_HERE}&gt;) and replaced it with the new 'replacements' tag:<br><br>{parse replacement="macroKey"}<br><br>Of course, the real power in this system is that you can very quickly and simply create your own template tags and drop them in the template tags folder for them to be available instantly.</p>]]></description><guid isPermaLink="false">472</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item><item><title>IP.Shoutbox 1.0.0 Beta 1 + IP.Tracker 1.2.0 Beta 1</title><link>https://invisioncommunity.com/news/invision-community/2539-ipshoutbox-100-beta-1-iptracker-120-beta-1/</link><description><![CDATA[<p>We are pleased to announce that the beta releases of IP.Shoutbox 1.0.0 and IP.Tracker 1.2.0 are now available for immediate download!<br><br><span style="font-size:12pt;line-height:100%;"><b>IP.Tracker</b></span><br>IP.Tracker is a bug/issue tracking system, it allows members and staff to track certain issues, for examples, bugs within a project you are working on, or even building a house! IP.Tracker supports statuses, severities, and much much more to bring you an extensible Tracker to use however you wish to.<br><br>IP.Tracker 1.2.0 builds upon what was available in previous releases, whilst adding vital features such as sub-projects, custom fields, an advanced search library, and better database recognition of when an issue has been read.<br><br>IP.Tracker 1.2.0 has been developed by the Tracker team (krocheck, Jaggi, and Alex) but as stated in a previous blog entry, we will be introducing ways so that <b>you</b>, the community, can assist coding features, and fixing bugs.<br><br>Here is a list of the main changes in IP.Tracker 1.2.0<br></p><ul><li><b>Subprojects</b> - We have added functionality allowing you to add subprojects to an existing project</li><li><b>Custom Fields</b> - Custom fields have now been implemented, and are very advanced, you can choose to only show a custom field in a certain project, and in the project edit screen, you can edit how custom fields are display in that particular project. Custom fields now also support permissions</li><li><b>Advanced Search</b> - We have now added advanced search to IP.Tracker, and you can also search within a particular issue</li><li><b>Database recognition</b> - We have changed how the database records if an issue is read, and there are no longer issues with it, as cookies are no longer used. We have also changed how issue changes are recorded to allow better recognition (statuses, severities etc.)</li><li><b>Last post information on project overview</b> - A rather simple, but informative feature. Projects will now display last posts on the right hand column, just like IP.Board</li></ul><br><br>As said, these are the main features in 1.2.0, however when we are nearer a stable release, we will post a full changelog.<br><br>We hope you like the changes in IP.Tracker, we certainly do! To discuss IP.Tracker 1.2.0, please use <a href="http://forums.invisionpower.com/index.php?showtopic=275440" rel="external nofollow">this</a> topic.<br><br><span style="font-size:12pt;line-height:100%;"><b>IP.Shoutbox</b></span><br>IP.Shoutbox is our feature-rich chat room for your IP.Board without the need for Java, Flash or any other browser dependency!<br><br>One of the main concerns people had about the base we chose for IP.Shoutbox was server load, and query counts. We are pleased to inform you that the two developers, myself, and Brandon have been going through the code to try and reduce this as much as possible, and we think you will be impressed. Wherever possible, the majority of the content is cached, and this has rapidly shown in the query count. The original base code has 16 queries per page load, IP.Shoutbox has as little as 8, 5 of those being IPB queries themselves. We have got IP.Shoutbox down to three queries per page load, we said you'd be impressed!<br><br>1.0 is mainly a code rewrite, however more features will be added in future releases once the new code base is complete. There are a few changes from the base modification, outlined below:<br><br><ul><li><b>No file edits</b> - We promised we would do this, and we have, all that is needed is a simple skin edit, which also gives you the power of limiting the global shoutbox to certain skins!</li><li><b>Moderators</b> - IP.Shoutbox now supports both groups and individual members, whilst the base only supported individual members</li></ul><br><br>To discuss IP.Shoutbox, please use <a href="http://forums.invisionpower.com/index.php?showtopic=275398" rel="external nofollow">this</a> topic.<br><br>Lastly we would like to express huge thanks to the developers for these two, amazing products: krocheck, Jaggi, Alex, vadim88, and terabyte!<br>As we said, this blog entry is a bit vague, but we will be posting more details over at the Community Projects page at IPS Resources when the time comes!
]]></description><guid isPermaLink="false">471</guid><pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate></item></channel></rss>
