We'd like to think that all these changes have been for the better, and that PostNuke has moved forward. Some of the more fundamental changes, the new PostNuke Software Foundation and the Steering Committee, stand PostNuke in good stead for rapid future development and evolution. A number of important projects will be completed at some point in the New Year, and we'd like to focus on two specific projects - the .8 release and the new PostNuke website.
The first major advancement next year will be a .8 'adam_baum' MS (milestone) release, some time in Q1. Although this release won't be feature complete, or even considered completely stable, it provides an opportunity for third party developers to examine the exciting new technology to be made available for .8, and signifies a moment when the .8 codebase is mature enough to run in a developmental environment. We'd expect this to be the first in a series of milestones and release candidates before we near a full, stable release of .8, but everyone agrees this is an important step forward.
Secondly, we aim to have a fully redesigned www.postnuke.com website published. For some time now, the current muti-site structure has been confusing to newer users and prevented us making available the right information to both new and established members of the community. This project is coming along very well, and while we don't have an estimated finish date yet, we will make available more information as the time draws nearer.
Finally, we'd all like to thank you for your continued support, and we hope you are looking as forward to the New Year as everyone in the PostNuke team.
Merry Christmas and a Happy New Year from the PostNuke Team
Task forces may be formed as necessary for individual tasks. An example of this are is PostNuke site redesign task force. These are more dynamic team elements, led by a specific member of the PostNuke team (not necessarily a team leader named above). Task forces are more temporary, and could include members of the community who are not PostNuke team members but offer a specific skill set needed for the task in hand. Leaders of task forces should also report to the Steering Committee monthly.
Each team and task force leader should report to the PostNuke Steering Committee approximately once per month outlining progress (if any has been made). 'Reporting' is meant in a loose sense, and can be a quick informal chat or an email. This information is then combined with information on the activities of the Steering Committee and sent to the postnuke-teams list for internal review. When internal discussions on the information presented have taken place (this could be setting goals, making suggestions, improving plans), a community announcement should be made.
This is not set in stone. Everyone is a volunteer and timescales are flexible as a result. It is also entirely acceptable to report 'nothing has been done', providing the project can be seen to progress at regular intervals. Deadlines and completion dates will not be set unless absolutely necessary, such as when one project is dependent upon the actions of another. In general, flexibility is the key.
Team leaders in bold.
All teams come under the Steering Committee excepting development, which at this time has autonomy for the purposes of keeping the development of PostNuke software objective.
What are pixel ads?
In case you haven't heard about the newest fad in online advertising, a pixel ad allows you to purchase a space for an image, paying 'by-the-pixel', a link, and the alt. text tied to the image - unlike other banner or pay-per-click (PPC) advertising there is only a one time cost associated with a given duration that your pixel ad is visble. PostNuke guarantees visibility of purchased pixels for a duration of 2 years.
Why buy?
Buying pixels at PostNuke.com is a smart business move because it's inexpensive, you get results and you can demonstrate your support for the project. For a minimal one-time investment, a $100 square works out to 14 cents a day, which drives traffic to your site for the next 2 years. A prominent link to the Pixels.PostNuke.com page from the PostNuke.com home page will assure a constant stream of traffic and exposure of the pixels.postnuke.com page. As we grow your link will directly benefit – the more popular we get, the more traffic you'll get -- and you will directly benefit, without having to pay anything extra, from all the additional clicks.
Does it work?
The PostNuke pixel ads page will be promoted and linked directly from the PostNuke.com homepage so supporters can be assured of traffic, and it will be a great resource for anyone looking to work with companies who actively support the PostNuke project.
Visit the site to view or buy pixels today!
http://pixels.postnuke.com
About PostNuke.com & PostNuke Software Foundation (PNSF)
Launched in July 2001, the PostNuke project is an open source content management system distributed freely under the open source general public license (GPL) with hundreds of thousands of sites using the software around the world. In June 2004 the PostNuke Software Foundation was established to provide the legal structure & identity in the form of a non-profit foundation to ensure the project continues to grow and develop beyond the individuals contributing. The founding members of the PNSF organization are Harry Zink (Fizbin Consultants, LLC), Mark West (Lead Developer), German PostNuke Foundation (currently represented by Andreas Krapohl), Drak (HostNuke), and Vanessa Haakenson (Distance-Educator.com).
This brings many advantages, in PostNuke .8 you will know what you need to run your site, and what you can throw away. Additionally, you won't have to remove all the modules you don't want to use prior to installing PostNuke, as the main distribution will come empty, ready for you to expand. There will also be a greater sense of structure to the PostNuke distribution.
Having said that, there will also be disadvantages. The main PostNuke distribution will have nothing other than the basic framework to run a site. You won't have any of the old content modules, hook modules, or anything to allow you to simply download and use PostNuke. This is where the targeted distributions come in. On PostNuke.com, we will be distributing a set of targeted distributions aimed at different audiences. These targeted distributions won't necessarily contain just core modules, third party modules can also be included. How third party modules could be included and what quality control measures would be implemented is still under debate, as having code not directly maintained by the Core Development team in the official distributions brings its own problems.
So what sort of distributions could we see? Well, there's plenty of scope for distributions of all kinds. For example, some categories could be:
Of course, the targeting doesn't just stop at modules. We'd like to see a new set of themes in the core distribution, and these can also be targeted. In addition to a few core themes, each distribution could have several themes intended for the specific audience of the category of site chosen.
So, as necessary, each different distribution can include forums, content modules, a helpdesk, blogging utilities, the list is endless. And, thanks to this new approach to distributing PostNuke, users should find it easier to start off with PostNuke. Rather than downloading the core distribution now, seeing some content modules with some obvious gaps in functionality, much of what a user could need for a specfic type of site should already be available to them. Furthermore, the demo distribution can include a selection of modules that best give an idea of the huge functionality PostNuke provides, hopefully attracting more and more people to experience the power of a PostNuke website.
None of this is set in stone, but this article should give you a fair idea of what is to come and how the distributions will work in future. If there are any further questions on specific aspects of the PostNuke .8 release, please do raise them, and we will do our best to answer through comments or articles as appropriate.
The modules included in .760 which are templated, and taken direct from the .8 CVS are as follows:
Admin
Admin Messages
Autolinks
AvantGo
Blocks
Censor
Credits
Ephemerids
Groups
Header_Footer
Legal
Mailer
Members List
Messages
Modules
Permissions
pn_bbcode
pn_bbsmile
pnRender
Quotes
Ratings
RSS
Sniffer
Typetool
Xanthia
This represents a significant percentage of the .8 code, but there is still more to do. The aim of this article is to try and outline some of what remains to be done before we can consider a release of .8.
We have identified six main sub projects vital for a release of .8. These projects cover wide areas, and each are at different stages of completion. The six projects, in no particular order, are:
This article also includes a little information on some of the other new code to be introduced with .8 this is at the end, where we look at EZComments and the Error Handler.
The new Database layer reuses the existing pntables information to provide an object representation of database rows. The advantage of this approach is that it allows you to basically remove manually coded SQL statements and replace with what's typically a 1-line statement. Some sample invocations of such code are shown below:
[code] $myObj =& DBUtil::selectObjectByID (<pntable_key>, $id); $myObj =& DBUtil::selectObject (<pntable_key>, $where); $myObjArray =& DBUtil::selectObjectArray (<pntable_key>, $where, $sort); DBUtil::insertObject ($myObj, <pntable_key>); DBUtil::updateObject ($myObj, <pntable_key>); [/code]These functions all return an associative PHP array, or in the case of array functions, an array of arrays. The fields in this array are cleaned up in the sense that any field prefixes have been removed. This DB API also gives you the ability to have generate associative (object) arrays, expanded arrays with other table fields joined in (which means that you can save SQL lookup calls) as well as store/retrieve dynamic attributes without altering the underlying table structure. Together this provides a highly flexible API which can take care of all storage & retrieval operations.
On top of the DB layer sits the Object Layer. Objects provide a component model which features transparent persistence facilities. Objects/Classees are loaded though the Loader API though
[code] Loader::loadClassFromModule (<module>, 'foo') // <-- single object class Loader::loadClassFromModule (<module>, 'foo', true) // <-- array class [/code]and classes are searched for in <module>/classes and take the following naming convention (for an object called foo):
[code] PNFoo.class.php PNFooArray.class.php [/code]The object layer is quite flexible; you can use it handle object persistence but it's also capable of abstracting object class usage cases without providing persistence. The object layer is built in such a way that for most typical objects, providing a 5-line constructor is enough to implement the basic DB persistence features needed. The object implementation provides a lot of hooks to further customize the behaviour of (complex) objects. Since objects provide a standard API, handling code (such as pnuser.php) can also be written to use generic object which results in substantial code savings since 1 function can be built to handle (for example) retrieval of *any* object.
Together the database and object layer allow you to implement complex functionality while writing very little code thus greatly facilitating and speeding up module development while resulting in higher code quality since most persistence operations are now handled by a standard library.
pnCategories is the new central PN category manager. It is based on a path-based model because this can provide some semantic meaning to the programmer. In a nested/set based model you would access your Category through an ID (such as 5231) which has the drawback that 5231 (or any other number) has no semantic meaning whatsoever. This category manager uses a path-based approach since this gives allows you to do
[code] CategoryUtil::getCategoryByPath ('__SYSTEM__/Modules/Topics'); [/code]which right away tells you "aha, I want the topics catgory". Due to MySql limitations the path field is not indexed (MySql4 can only index up to 255 Characters in a text field), however an alternative repesentation exists internally which is a numeric path field, so that the above path category retrieval can also be implemented as
[code] CategoryUtil::getCategoryByPath ('1/12/32', 'ipath'); [/code]This field is indexed and if you access something by a (string) Path, the first resolution is done by (string) path and any subsequent gets are done by the (integer) path. There are probably some more refienmens which can be applied to this model, but fundamentally it works and has proven it's usefulness since most of the OpenStar modules use this category manager without any issues.
The category manager also provides 5 extra data fields which means that the category manager can also be used to provide extended categories (think of PostCalendar where each category also has a color code associated to it) without having to write extra code. In short, this category manager has the potential to get rid of a lot of small supporting tables.
In line with the aim of creating a slim core which can then be expanded on in customised releases, the installer has been recoded to increase the flexibility of the install process. The new installer is now in CVS, and you can test it out by downloading the latest CVS snapshot. The process now includes context driven help links, simplifying the install process for new users.
Xanthia in .8 will be given a major overhaul. The underlying code has been completely rewritten to turn Xanthia into a subclass of pnRender, thereby greatly reducing the size of the Xanthia module, and also giving a performance boost, especially under PHP5. Furthermore, the user interface will also be redesigned, and we are looking at a closer integration of Xanthia's block control and the Blocks module itself. These usability enhancements should help those new to Xanthia build up knowledge of the system quicker, and those already experienced in the use of the module should find that using Xanthia has become 'streamlined', and more intuitive.
One of the major tasks remaining for .8 is in the area of User management, and the user modules in general. This can be further sub-divided into three sections.
Some users of the third party modules pnGroups and pncGroups will already be familiar with the functionality enhancements the .8 Groups module could benefit from. We are investigating adding additional features taken from pnGroups and pncGroups as well as the enhancements already seen in the .760 Groups module.
Simply put, the Profiles module will display all the profile information for a user, in the way that the Users module does currently in .760. Franky Chestnut's advProfile module, as see at pnConcept is the base for this module. It supports Smarty plugins so that third party developers can take advantage of the profile functionality by adding their own information to the page. For example, a user's latest forum posts could be displayed if the correct plugin was available.
There are many feature requests in the NOC Feature Request Tracker that will be implemented into the users system. The key here is flexibility, in .8 we'd like to see the Dynamic Userdata become more usable, and as a result a separate module to handle this functionality has been created. There will also be the ability to search through the userbase for a specific user, and many other enhancements. New features should include:
As previously mentioned, many of the .8 content modules still need to be integrated into the categories system. There also remains further development to be done on some modules. This is a less critical area of development, as the content modules will no longer be included in the main distribution with .8, however all modules maintained by the core development team will be templated through pnRender and fully API compliant in the .8 release.
With the new Error Handler module in .8, a developer can now throw an error using the standard PHP function trigger_error() such as:
[code] if(empty($myvar)) { trigger_error('myvar is empty!', E_RROR); } [/code]In this case the script is stopped immediately and the user will see "myvar is empty!". Normal notices E_NOTICE or warnings E_WARNING will not be shown unless the error handler is configured to do so. Should the user have administration permissions over the module that caused the error the lines of code causing the error will also be shown.
An extension of this might be to log all errors in a database table so that the Admin can check from time to time what went wrong, e.g. missing or duplicate defines that throw a notice, the use of an uninitialized variable or severe errors he has not been informed about by his users. It is also possible to dump all variables that were active when the error occured (which is still under review as ADODB stores passwords in plain text in its object).
We do not use exceptions because they are a feature of PHP 5 and we do not want to raise the minimum requirement for PostNuke from PHP 4.1.2 to PHP 5.x. And exceptions are not as easy to use as the error handler, a lot of code is needed to get them working, mainly in the modules that want to use this feature.
EZComments will replace the core Comments module for .8, removing the disparate and non-API compliant comments solution available in previous versions. The advantage of EZComments is that it provides a single solution to add comments functionality to all module supporting display hooks, and the module also includes advanced moderation features not present in the current version of the Comments module. The recently released RC version of EZComments (see the article on http://mods.postnuke.com gives a preview of the features to expect in the upcoming version. Should you wish to take advantage of EZComments functionality before .8, the News module in .750+ supports display hooks, however a patch is available in CVS for .761 to provide better integration with EZComments until .8 is released. You can download the patch here.
If you are interested in tracking PostNuke's progress towards .8, you can subscribe to the postnuke-cvsnotices mailing list. This send you each change made to the central CVS repository by email, so you can see the changes as they happen. We recommend this primarily for third party module developers. For more general use, the latest snapshots from CVS can be downloaded here. We endeavour to keep the CVS in a working state, however as the PostNuke code is constantly changing things will occasionally not work. If so, please submit an entry to the bug tracker (link below).
Useful Links