phpFox v2
As we progress with the development of phpFox2 we were able to discuss the actual release dates for the products Beta, Release Candidate and Stable versions. We estimated our first release would be for the first quarter of 2009 and we plan on sticking with that time frame.
Release Dates:
- Jan 14, 2009 - Development Release
- Mar 25, 2009 - Beta 1 Release
- Apr 8, 2009 - Beta 2 Release
- Apr 22, 2009 - Beta 3 Release
- May 6, 2009 - Beta 4 Release
- May 20, 2009 - RC1 Release
- Jun 3, 2009 - RC2 Release
- Jun 17, 2009 - RC3 Release
- Jul 1, 2009 - RC4 Release
- Jul 15, 2009 - Stable Release
We will release four Beta and RC versions before we release the final stable version. We have given each version a span of two weeks before the next release. This should allow enough time for debuggers to test each release and report back any problems so we can fix them for the next release.
We will release a Development Version on Jan 14, 2009 and this version will only include the core product so 3rd party developers can start to learn the new product before the first Beta release and start working on creating plug-ins, modules, themes etc...
We plan on sticking to the release dates mentioned, however I need to add that depending on how the Beta/RC versions go these dates could vary. We are confident that these dates have given us enough time to complete the new product and to stabilize it as well. If any changes will be made to the release dates we will be sure to update the community.
This is a heads up for developers. We will document the coding standards before we release the early "developers" release of phpFox2, however just wanted to get as much information out there to prepare anyone interested in creating mods for the upcoming release.
Our current version (1.6.x) is not compliant with many of the MySQL sql-modes provided. Many clients running MySQL 5 has had problems since strict mode was enabled so we needed to provide a way to disable this setting if enabled which we did shortly thereafter.
Since phpFox2 will support other database drivers and not just MySQL we needed to implement a strict set of coding standards for SQL. So when developing a mod you will need to use standard SQL coding standards and make sure to not get too comfortable with a lot of the lax queries allowed with MySQL when no sql-modes are set. We are developing the product using MySQL and in order to make sure it will be compliant with the other database drivers the following needs to be added/updated in your MySQL configuration file (my.cnf):
sql-mode = "STRICT_TRANS_TABLES,STRICT_ALL_TABLES,PIPES_AS_CONCAT, ANSI_QUOTES,IGNORE_SPACE,NO_KEY_OPTIONS,NO_TABLE_OPTION S,NO_FIELD_OPTIONS"
For more information on the sql modes MySQL provides you can check them here.
This entry is the continuation of my first entry which had info on our new engine that will be powering phpFox2.
Database & Supported DB Drivers
phpFox2 unlike all of our past versions will support MySQL (MySQLi), Postgresql, Oracle, MsSql and SQlite. Postgresql, MySQL (MySQLi) and SQlite will be released with the core package. Oracle and Mssql will be released as extra drivers that can be purchased for a set one-time fee.
Method of executing a query will be a little different from the current version released.
An example of a conventional MySQL query:
<code language="php">
$hQuery = mysql_query("SELECT user FROM user");
$aRow = mysql_fetch_array($hQuery);
</code>
With phpFox 1.5+ we use the following method to do the same query:
<code language="php">
$oDb = Database::get();
$aRow = $oDb->getRow("SELECT user FROM user");
</code>
With phpFox2 the same query will be:
<code language="php">
$oDb = Phpfox::getLib('phpfox.database');
$aRow = $oDb->select('user')
->from('user')
->execute('getRow');
</code>
The reason for this change is we added an extra layer that handles all the queries a lot faster then parsing an SQL query depending on the SQL driver you plan on using. By using the database layer we provide it will assure that all your Apps will be compatible with all the database layers provided so no problems will arise for clients.
Friends Feed
There have been many requests asking of we were going to develop a friends feed for phpFox2 and I am glad to say that yes it will be part of phpFox2 and is one of the first things we worked on so its already completed. It will work similar to feeds found on MySpace and Facebook. Admins can control if a feed should only be displayed for friends or anyone joining the site. Because of this option we plan on simply calling it a "News Feed". I may think of another name at a latter time so we are a little original with the feature. The reason you may want to allow anyone to view the feed and not just friends is if you have a brand new site and user content is important so it will be easier for your members to interact with one another. Admins can also control how many feeds can be displayed as well as how long to keep a feed before it is considered old news. For those creating 3rd party apps in the future can use the news feed class via the plug-in system.
Login Method
Your members can either login via their Username, Email or Username and/or Email. Admins have full control over the method of login for their site. We offer at the moment the 3 alternatives which can be controlled direct from your Admin CP.
Multilingual Support
phpFox2 like phpFox 1.6+ will be multilingual complaint. The language packages will work similar to that of the current version, however since phrases are separated by the modules they are created for you will only install the phrases for the modules you have installed. phpFox2 will also only load the phrases for the modules loaded on a specific page that is being displayed. All phrases are stored in the database for easy access for Admins and once ready to be used it is cached. We also developed an option where you could cache phrases that are specifically used for a page instead of loading all the phrases that belong to the modules that are loaded. For example depending on a module it can have 50-100 phrases. If a page you visit has 4 different modules loaded you could have around 250 phrases loaded. Many of which you won't be using. This method is of course still better then loading an entire language package which could have over 3000 phrases, however with this new featured enabled and if the page for example only had 50 phrases it would simply load just those 50 phrases and nothing more. Its not a major user feature, however this has skimmed a lot of milliseconds of a pages overall load when doing our preliminary tests. Benchmarks for this and other tests will be released shortly.
Ajax
We introduced minimal Ajax capabilities with phpFox v1.5.1, we then added more with v1.6.x. phpFox2 will go even further and anything that does not require a feature to be crawled by a search bot we will be using Ajax. Now our goal is to use as much Ajax as possible to make it a lot more user friendly for your members, however we don't want to take it too far so some areas we will be leaving the final decision up to you if you want the feature or page to have Ajax capabilities. For phpFox2 we have created our own Ajax class that will handle all the requests and handle all the output we plan to return back.
JavaScript Library
phpFox2 will be using jQuery as its main JavaScript Library.
Stay tuned for Part 3 for more details on phpFox2.
With the start of our company blog today I wanted to write an entry about our phpFox Konsort 2 and its progress.
We will focus on updating the community as much as we can, however we still cannot release any information regarding what sort of features will be released with version 2 at this point in time. So whats there to write about then? I will write as much as I can about the development process so the community will know how far along we have come with v2. If you develop plug-ins for phpFox now following up on the blog is a good idea as we will start to introduce information on how the plug-in system works and how to create them for v2. Just so you are a step ahead once the first beta is out.
If you want to make sure the feature or features you had in mind for v2 gets developed make sure you add them to our Feature Requests section. If you have already added requests try to mark them to the community this way your request can get more votes. The more votes a request has the more likely it is that it will get added to the product.
Moving forward to v2 details...
Release Date
The release date for v2 is still estimated for the first quarter of 2009. Once we can get a confirmed month we will update the community. The first release will be a Beta and it will be demoed live. The 2nd Beta release will allow clients the opportunity to download and install the product but not upgrade their current phpFox communities. Beta 3 will introduce the upgrade script. We plan that we will release at least 4 Betas before we move on to RC (Release Candidate). 4 RC releases are also planed with v2, however its still very early to judge how many Beta and RC releases there will be. This information is based on how things worked out with past releases.
New Engine
As many of you already know v2 will be a complete rewrite from the current engine. We have had 3 engines thus far and our method of versioning has not been the best so from the versions released in the past you won't be able to guess when the new engine came out unless you were around for those days. If you were not around the products first public release was version 1.0.3 and that engine lasted till version 1.1. We then released version 1.5. This introduced a new engine which was developed under an OOP (Object-oriented Programming) architecture compared to its predecessor. The current stable release at the time of this writing (v1.6.21) released a whole set of features using the same engine provided by v1.5.x. This engine will retire with v1.6.x and will be replaced with the new engine currently under development for v2. Developing a new engine for v2 is something we took some time to plan before taking on this endeavor. We started planning v2 early March of this year (2008) which was just after the release of v1.6.20. With that release it freed up some time for us to start planning v2. We first needed to decide if we were going to use the current engine (v.1.5.x+) or develop a new one. The decision from the developers point of view was easy and that was to create a new engine as there were many things we could not do with the current engine unless we did some major overhauls. Overhauling PHP code was not the problem, it was redesigning the database to work with some of the future plans we had with the product and still keep the engines architecture we felt would cause problems further down the line. From the business perspective keeping the current engine was the right choice as the community would be happier since a new version would be released a lot sooner. It would probably be already out if we worked with the current engine. Another reason was a lot of funds were invested in building version 2 and simply replacing it while investing more funds into creating a new engine did not seem wise. Plus the major problem we faced was the delay it would cause to release a new version as developing modules/features for a completed engine takes time but creating a whole new system takes a lot more time as it needs to be thoroughly tested at a very early stage many times over to make sure we can use the engine with modules we have in mind and modules we haven't thought of adding yet. The planning for v2 took a good month to come up with the final decision to either keep our current engine or create a new one. We decided to develop a new engine. This engine "officially" started development on April 4th (2008) and got its first lines of code.
The decision to develop a new engine was a crucial one and we feel it was the right one. Many in the community may disagree and to be honest I understand as getting a new version with tons of new features now is a whole lot better then waiting over a year for a new version. However, at some point the current engine will not suffice and we need to think for the future as sites are growing at a much faster rate and the demand for 3rd party plug-ins is very high. Developing a new engine opens a lot of doors for us to fix a lot of the things our current engine has which could only be fixed by making some major changes to the architecture thus leading us back to the need for creating the new engine. There is so much we want to do with the product and we felt that it was all not all possible with the current engine, however with the new one we have been able to create a framework that will open up many doors in the future to easily improve the product faster and easier.
PHP5
Now that the decision was finalized to create a new engine it was time to decide if we were to develop the product for PHP4+ or PHP5+. This took a few days to consider but we felt with the ETA for v2 next year (2009) going with PHP5 was the right choice especially with the announcement of PHP4's end-of-life.
Module Architecture
The new engine will be OOP and based on a modular architecture much like the current one. The modular system has greatly been improved. The goal with using such an architecture is to allow 3rd party developers the ability to create new modules fully separated from the core itself and other modules as well. Each module can be designed to rely on another module however must are intended to be self reliant thus allowing clients to plug-in in 3rd party apps and not worry about modifying the core source code. Obviously there comes a time when a 3rd party module needs to interact with another module or the core itself. To solve this problem we have created a hook system. Hooks will allow you as developers to "hook" onto other modules/core class and do what needs to be done in those files to complete the tasks for your module. All modules will be PHP class files that extend the core library. Because of this it will easily allow 3rd party developers the ability to interact with the core system without the need to modify any of the core files. If direct interaction is needed and using the extended method will not work we have setup hooks throughout the core system to allow developers the ease to modify the behavior of these files if necessary. So the idea behind the new engine is to separate the core phpFox system from the modules which will be both released by us and 3rd party developers. Modules are what run each of the sections on a phpFox site such as Blogs, Galleries, Forums etc... so building a system that will allow developers the ease to create new modules without having to worry about other modules as well as modifying the core product thus causing problems with future version updates. This new system will hopefully introduce a lot more modules and not just smaller hacks for the product.
Plug-ins
Not all 3rd party apps will be modules as some are a lot smaller and for these we will call them as "plug-ins". These plug-ins can directly be hooked onto another modules as they are much smaller and will mainly be used to improve modules or add new functionality to them. All hooks created for plug-ins will be stored in the database and later cached into the servers memory or flat file depending on your sites cache settings. Because they will be stored in the database it will be easy to install these plug-ins as it will not require you as clients to open up an FTP client and upload files to your server. It will simply be uploading an XML via your phpFox Admin CP. Note that some plug-ins may include images so the only safe way of installing such a plug-in will be via an FTP client, however that will just be uploading the actual images to the server. The install routine will work the same with the XML file. The idea behind this is to make it user-friendly and to make sure none of the plug-ins released will cause problems with upgrading the product in the future.
So both our module and plug-in system has been designed to function separate from the core and allow Admins the ability to switch off all none core modules and plug-ins at anytime.
Caching
Caching is something we have been paying a lot of attention to with v2. You may have noticed we introduced some caching of data to flat files with v1.6.x. After having such good results we wanted to take caching even further with v2. By default we will provide the same flat file caching which caches complex and semi-complex queries to PHP files on your web server. Instead of running a database query each time a user visits a specific page that has a complex query it will instead load data from the cached PHP file. Caching to flat files is great but using Memcached for example has given us far better results. Since it stores data into memory getting such data is far faster then pulling it from a flat file on the server. Currently phpFox2 supports both Memcache and Flat File caching. We will release some benchmarks in another blog entry.
Templates
We will no longer be using Smarty as our template engine. We have instead developed our own. Developers need not worry as Smarty tags are supported and is what we use when developing the product. All templates much like how phpFox Konsort works now has its HTML seperated from the PHP logic. The current version (1.6.x) has all its templates found within the "design/" folder. With v2 we split up module templates and templates that belong to a "theme". Currently phpFox 1.6.x has only one theme and the ability to create many styles for that theme. Changing a theme with the current version is hard since there is a lot of files that would need to be modified. With v2 a theme has max 10 files that need to be modified and by just changing those files you alter how your entire site will look and not just the style. So v2 will allow 3rd party developers to create both themes and styles. A common question that has been coming in is if we were going to use divs instead of tables for v2. The answer to that is yes.
Much of the information I provided in this entry has already been mentioned in earler threads I created within our community. I tried to add more details in each of the items I brought up and wanted to share how and when phpFox2 started. As you may have noticied from the title this is just Part 1 and I will continue adding new entries that continue this specific article. I want to cover all the progress we have accomplished thus far and from there we can focus on writing status reports and benchmarks for the product while under development.
If there is something you would like me to write about in my next entry please leave a comment here and I will try to get your questions answered with the next entry. Note that I may not be able to answer if a certain feature will be part of v2, however it never hurts to try. To be sure your request gets heard add it to our Feature Requests section so others can vote on it.
Stay tuned for Part 2 for more details on phpFox2.


