I have Autoboot working, mostly. I still have to finish the method that creates/updates the configuration file to store domains -> configurations. I only spent about an hour on it, so considering I worked a night shift and then worked on Autoboot I think I did ok.
CF is amazing, and yes I am biased. To implement Autoboot's functionality took about 10 lines of code, 1 class extending the \clay class. I wouldn't have even had to extend \clay, if it wasn't for a static property I needed to access configuration data.
To use it you create an "installation" of the Autoboot package and name it 'default'. Then in the "installation" set up you match a domain name to an installation. That's it. The 10 lines of code does the rest. It's only accessible from the Clay Installer.
I also added a feature to rename "installations" to Clay Installer. I did that yesterday before going into work. It doesn't set up a restore point, which I may add later. The Site Restore feature isn't complete, so I didn't want to dive into that too much.
Once I put the finishing touches on Autoboot, I'll be back to working on ClayCMS. I'm hoping to have enough content apps soon to use Autoboot and launch clay-project.com.
Autoboot is a package I started on a while back, but could never think of a good way to implement it. It is a multisite boot utility, which works by taking the current domain name and determines which site configuration is being requested. This has become fairly easy to implement, now that \clay::bootstrap delegates initialization to the site configuration.
I started working on it again yesterday, but had to stop to get virtual domains working in Apache on my development server. I finally figured out what I was doing wrong and now I can make up my own domains and point them all to my Clay file system. Anyway, I'm finishing Autoboot so I can begin setting clay-project.com and other sites using the same Clay files as daviddyess.com (right now they all just show up as daviddyess.com).
I decided to work on it, because it had gone mostly forgotten so long. I didn't want to get ready to set up clay-project.com and then realize Autoboot isn't finished (making me rush it out). The idea right now is an Autoboot installation will be the 'default' site configuration and it will then hand off site initialization to the site being requested. Fairly typical for multisites, just adapted to the Clay style of doing things.
Downtime: It's a Clay Installer package that lets you take a site offline for maintenance. Doing it.
This one I've dreaded for a while. The problem with making applications loosely knitted, is when you need to make a menu. I'm still trying to decide how to do the Menu block. There are lots of potential ways, but those are based on other CMS' and none are perfect. Still trying to hammer this one out. I think I'll fall back to something like Xaraya's, which a few usability improvements (I hope). Anyway, don't be surprised if we end up with several menu blocks haha.
I've started to put the foundation for the Blocks app. It's going to be rather simple at first, just a service type and a way to create/group blocks. I have bigger plans on this front, but something simple will be easier to upgrade later on.
Objects is an app that I started a while back and it just sat for a long time. ClayCMS has a skeleton library named dataobjects, it allows you to build data structures for different types of purposes. The Objects app is a potential successor to dataobjects, if not a companion. It doesn't do a lot by itself, but can be used in a way similiar to Services. It allows you to create an object type and assign pieces of functionality called properties to that object. It can then be implemented in various ways by manipulating which properties are included in the assignment. The key to this functionality is the properties can inherit or be assigned other properties, which allows each structure to potentially be entirely different. One of the first implementations I've experimented with is a Forms app that allows you to build forms for data input. I've mentioned all of this before, in part, but it's been a while. It's similiar to DynamicData in Xaraya, but the implemenation is very different. I haven't decided on a name for it, exactly, but it's now dataobjects and I've toyed with the idea of renaming it ClayDO. I haven't decided if ClayDO and/or Objects app will be in early releases of ClayCMS or not. Unfortunately I had something a little simpler in mind with ClayCMS, so I may add it as an optional feature, instead of making it a Core requirement.
The idea for dataobjects actually began as another Application Platform I want to build using Clay Framework. While ClayCMS is intended to be a simple and straight-forward development platform, Sculpt, the other platform, would allow you to build a web site of applications without having to write any code. Applications would be created by assigning dataobjects properties and designing a template from the user interface, that's all. This is very different from what I have now. I have a lot to learn before I can build something like Sculpt, so I wouldn't be surprised to see dataobjects or ClayDO or Objects app-like functionality in ClayCMS for the time being.
I huge jump for PHP, they've now released version 5.4. This release has a lot of big changes. I plan to continue to support PHP 5.3+ in the current build of Clay Framework, but will begin working on the next version as well. As soon as the docs are finished I'll begin releasing CF betas, with 1.0 probably coming shortly after the launch of clay-project.com.
I don't have a lot left to do in CF to finish up the milestones for 1.0. Mainly, I need to do some namespace changes and add PostgreSQL support to ClayDB. The namespaces are the only truly important change. PostgreSQL support can be added in a 1.1 release later, if needed.
Since I finished making Clay Framework/ClayCMS PHP Strict Standards compliant, as my goal was for this next week, I have a few more goals. I still want to work on the Blocks system, but I need to work on the manuals some more and at least document the recent changes. Off an on I will probably work on changing CF's namespaces to match the folder structure. That is something that will be done in a separate branch, so it wont affect anything else until it's time to merge the changes. I also want to work on the Services Manager and Privileges Manager. Those are going to be lengthy projects, so the more I can hammer away the better. Still lots to do. I'm sure I'll think of other things to work on too, I think it is getting time to do a code audit again and make sure everything is still good to go. I want to have some releases very soon, at least of CF, perhaps even ClayCMS at this rate. At the very least I would like to get ClayCMS worthy to push out onto Github.
I worked on the Dashboard some more last night. I added the System app service hook and it has a few options I'm working on still. It will be where you set system settings, such as Theme, default Application, Site name, slogan, copyright info, etc. It also has a section that displays information about your PHP/Server, using phpinfo().
I finished my goal for the week of making Clay Framework/ClayCMS PHP Strict Standards compliant. There wasn't alot to fix. The major change from that was I split the template() method off from \application\object and added a Static method to \application. It complicates the code a little more, but provides better way to extend the template engine as well.
I set up a temporary fix to the HTML filter, so it should make it's debut in the next site update (within the next week - according to my bi-weekly update goal). It affects performance a little, which I hate, but I guess it's a necessary evil. From initial testing, it adds about 0.05 seconds to load time, which isn't much, but is taking me above me goal of 0.1 seconds max (around 0.13). I'm hoping to find a speedier solution. Right now it validates the HTML, makes sure it is structured properly (starting/closing tags, completed attributes, etc), strips unallowed attributes from tags, and strips unallowed tags. That's quite a bit, but it is dealing with something that must be handled safely.
Windows 8 isn't that bad. The Metro UI is a pain, but once I realized what the keyboard shortcuts were it became kind of convenient. I just had how they basically made it another desktop, instead of combining the regular desktop and the Metro apps seemlessly. I set up a couple of share drives in a few minutes and now the wife and I each have about 300Gb of network storage to play with (with another 300Gb still unpartitioned). Remote desktop on Linux always seems to be slow as mud for me, but Windows 8 is extremely responsive. It's very fast anyway, but I can't tell a difference between remote and physically sitting at the computer. I remember when Linux ran faster on that computer, but Windows 8 can hold its own in performance. Granted, it is pretty much a bare install, as I'm using it as a file server. Anytime I've ran Linux on it, it would be running several databases and servers on top of whatever I was working on.
I worked on the Dashboard some last night. I've been working on getting administrative features in the dashboard. I have the Application manager (add/remove) and the beginning of the App settings manager (settings for all apps). I fixed a few display bugs in the dashboard that didn't show up until the layout was pushed a little (the Apps manager uses a grid to show/categorize the apps). A lot of CSS changes back and forth and back and forth, most of it ended up being fixed with a simple "right:0;" haha. The content was flowing well beyond the right edge of the screen and sometimes would jumble up instead of extending the height of the page. The dashboard just opens at the top of the page above the current page and that makes the positioning a little trickier. Mix in several different style sheets controlling the same styles and things get confusing. Anyway, I had a nice CSS refresher after not using it that much the last year or so. This week I plan to finish the Apps Settings and begin working on the System administration portion. I'll probably work in a few Blocks experiments as well.
Until recently Clay Framework was unintentionally suppressing PHP errors, which meant I missed a few little coding errors. I figured out why the errors were suppressed, so now that is fixed, it's time to fix the errors. My goal for this next week is to make CF PHP Strict standards compliant, which means there are no notices about coding style. PHP has for a long time been a very non-strict language, but it is transitioning toward strict and that is a good thing. When I enabled E_STRICT error reporting earlier there were only a few things I had been doing that threw the non-compliance notices. Unfortunately those few things were rather prevalent in the code base. I'll chalk that up to learning and adapting. They should be easy fixes, it'll just take some time to replace it throughout the code base. I guess pursuing Strict compliance is at least better than ignoring it.
So I installed Windows 8. The installation was fast and had very few options. I let it run for about 30 minutes and when I came back it was ready to create an account. It gives you the option of signing in with a Windows Live account (email address), but Live.com appears to be down for maintenance so I haven't tried that yet. The metro desktop is, well, I don't like it. It's a pain to multitask and as far as I can tell they just dumbed it down to the point my 3 year could use it. As far as I can tell, from 10 minutes of using Win 8, there's no easy way to close a Metro App. I had to use the Task Manager, which has had a decent upgrade. Everything is full screen, one app at a time. The good thing is there is still a regular desktop, but they aren't tied together and the desktop seems to just be for accessing the file system and things like that. There is no Start menu. So, after 10 minutes, I don't like it, yet. It's free (right now) and I can finally use my 1 TB hard drive for network file sharing, which I could never get to work with Windows 7 Home and Fedora. It's free, I can use it for network storage, and, well, it's free.