What I won't be doing with Zed X

1 year ago by Nicholas Hubbard in #PHP

Through the process of working on Zed X, I have been looking at many other open-source CMS products, and seeing what sort of features they offer. In doing this, I have realized a few things that I don't like about other CMS's:

  • They have too many requirements making it very difficult to use on shared hosting, which, the majority of users will be using.
  • Many CMS's have a steep learning curve, involving over complicated interfaces, too many config options and confusing terminology that non-technical users don't understand.
  • Installation is a long and difficult process.
  • Templates are difficult to create, leaving non-technical users very confused. Users don't want to have to mess with PHP, just to customize their own template/design!
  • Many are bloated with so many features, that users think it is an overkill and don't choose that product.
  • Editing web content is confusing to users who are used to products like Microsoft Word, and don't understand why they can't edit in the same way.

Here are a few things that I think are absolutely necessary for a CMS:

  • A clean and simple edit and admin interface. Very minimalistic, not showing extra options to users when not needed.
  • You shouldn't have to browse through multiple screens just to change the name or design of a page.
  • Editing of content should be done visually, while "browsing" your website.
  • When editing a page, all tools should be available within that same screen, without browsing elsewhere. Think photoshop palates.
  • Users shouldn't have to know HTML.
  • Image editing (cropping/resizing, etc) should be done in-page.
  • In edit mode, users should be able to see real-time css changes to their content and layouts.
  • Rulers and guides should be available in edit mode for laying out a page.

Having said those things, I am going to make it crucial that I follow these while building Zed X. I don't want to end up with an over complicated product, that no one can understand. It should be useable out of the box, work on shared-hosting, and non-technical users should not be confused about a thing.

The programming of the CMS is coming along nicely. I am having to work on it in my free time, so progress is slow, but I think quality work is being produced. Duncan Robertson has expressed interest in helping with design, so that is exciting news.

I am happy to hear any other suggestions that you might have, be it features that you want to see, offers to help, etc.

Development on the Zed X CMS

1 year ago by Nicholas Hubbard in #PHP

The Zed Said Studio Blog has been quiet for some time, and I wanted to let everyone know the reason.

I have been working on a brand new project that, has nothing to do with MySource Matrix. Which, is slight surprising since I love it so much! But, I have come to a point where I need a customized CMS for clients of mine that are not able to use MySource Matrix. Over the past year I have looked for a solution to this problem, but I have not been happy with what I have found. Coming from the world of Matrix, I expect a lot out of a CMS. So, I was looking for certain features that I did not find.

So, I have set out to write my own CMS that has the features that I want, runs on shared hosting, and will provide the power and flexibility that I need. Clients don't like to be told that they have to pay for a totally new host, that is 2x the amount that they are currently paying. They don't want to hear all of those details, they just want their website online, and they want to edit/manage it with ease.

So, this is the focus of my new CMS, is ease of use, and focus on easy editing as well as tight keyword integration across the CMS. I am pretty excited about this new project, and it has been coming along nicely. So far, the MVC has been built, as well as the DB integration, base function and interfaces.

One thing that is really needed is a designer for this project as well as a new name. When I started this, I figured Zed X would be nice, but now, I am not so sure. The CMS will be GPL in the future, but not for some time and there is plenty of work to still be done. But, if you are interested in helping with design, your talent and name will definitely be seen throughout the project.

I will continue to post updates here about how the progress is going, let me know if you have any questions!

Custom Development in MySource Matrix

2 years ago by Nicholas Hubbard in #PHP #Matrix

I spent a good part of my day working on the MySource Matrix Community, which is soon to launch. In doing so, I realized that the MySource Matrix Javascript API was lacking a few features that I needed. I wanted to restrict to a few different root nodes, but my asset only allowed for one to be added. So, I went off looking through other Matrix assets to understand how I could add a root node chooser that allows multiple roots.

  • iphone

In order to add the new multiple asset finder (as Matrix calls it) I had to add my own custom print and process functions to that attribute. For these functions I used the following:

/**
* Paints the root node selection box
*
* @param object &$asset asset being painted
* @param object &$o             backend outputter
* @param string $prefix prefix for the html doc element name
*
* @return boolean
* @access public
*/
function paintRootNode(&$asset, &$o, $prefix)
{
        $write_access = $asset->writeAccess('attributes');
        $curr_list = $asset->attr('root_node');
        
        if ($write_access) {
                multiple_asset_finder($prefix.'_roots', $curr_list, Array('asset' => 'D'));
        } else {
                if (empty($curr_list)) {
                        echo translate('js_api_no_root_nodes_selected');
                } else {
                        ?><ul style="margin:1px 15px;"><?php
                        foreach ($curr_list as $assetid) {
                                echo '<li>'.get_asset_tag_line($assetid).'</li>';
                        }
                        ?></ul><?php
                }
        }

        return $write_access;

}//end paintRootNode()
/**
* Processes the value input from root node selection box
*
* @param object &$asset asset being painted
* @param object &$o             backend outputter
* @param string $prefix prefix for the html doc element name
*
* @return void
* @access public
*/
function processRootNode(&$asset, &$o, $prefix)
{
        $roots = array_get_index($_POST, $prefix.'_roots', Array());
        $root_list = Array();

        foreach ($roots as $root) {
                if (!empty($root['assetid'])) {
                        $root_list[$root['assetid']] = $root['assetid'];
                }
        }

        return $asset->setAttrValue('root_node', $root_list);

}//end processRootNode()

The important part of the first function, that actually prints the root node selector, is the multiple_asset_finder() function. This takes a few different parameters, including the assets prefix and an array of values saved in the asset attribute.

In our processing function, we have to manually grab our newly set values from the $POST array and set them as attributes using the setAttrValue() function.  Once this was done, we finally had an asset chooser that could selected multiple root nodes.

My other two tasks were to add a new attribute called ignore_permissions and remove the API key from displaying unless a user had acquired a lock.  Both of these were relatively easy to add.  The ignore_permissions functionality only required some small changes in the js_api.inc file as well as adding it to the normal places to add a new attribute.  It was added so that a user does not have to have permissions in order to call functions such as createAsset() or setAttributes().  

Making sure that the API key is not displayed until a user has acquired a lock is a security precaution.  If you have users in your system that have read access to assets, they could easily view the details screen of an API asset and copy down the API key.  Now, with this additional feature, users will have to be able to get locks on the attributes before seeing the key, meaning that they have to have write access to the asset.

All in all, it was a nice day of programing and getting work done on the MySource Matrix Community.  As the Community continues to evolve, I am sure there will be more features that I will need to write into the API.  

I will be submitting these new features to Squiz, so I am assuming they would make it into 3.24.2 next month.

MySource Matrix Javascript API Asset Released in 3.22.2

I am very excited to say that I just got another asset that I built added to MySource Matrix. This time, it is the Javscript API asset that I wrote, and has been added to 3.22.2. The Javascript API asset is now part of the Web Services package, but is itself a GPL asset, so you can download it for free.

  • iphone

Right now the Javascript API asset is at version 1.0 and includes the following features:

  • Returns a JSON object to asset calls.
  • The asset will act as a normal .js file when no data is sent to it, but if key, id, and type are sent it will return JSON based on the function called used.
  • Error checking is included to make sure that the user does not try to send incorrect data, and return incorrect data. Errors are also logged in the normal error log as well as returns a JSON error.
  • Currently, the API has the following core features: Get General Info, Get Attributes, Set Attributes, Trash Asset, Get Metadata, and Set Metadata.
  • A root node can be set, to restrict API calls to a specific location in the tree. Error checking makes sure that this is enforced.
  • Slick new icon. :)
  • API Key is set using the setApiKey() function. e.g., setApiKey('123'); This sets the key as a global variable for all functions to use and is required to use the API.
  • All "get" functions have an optional callback, that is passed as the second parameter in the function.

It is exciting to have yet another asset added to MySource Matrix. I am continuing to work on new features for this asset, as I really feel that it will benefit many!

Feel free to let me know what you think and go download MySource Matrix 3.22.2!

Video File Asset Added to MySource Matrix Core

2 years ago by Nicholas Hubbard in #PHP #Matrix

A month or two ago I had developed a Video File asset for MySource Matrix, which I then submitted to Squiz for inclusion in the core product. I am happy to say that it finally made its way into Matrix, and is available for download!

Check out Squiz's Developer Newsletter for more information about this new Video File asset that I wrote.

New CAPTCHA Enhancements Added to Matrix 3.20.3

2 years ago by Nicholas Hubbard in #PHP #Matrix

I just got word last night that the CAPTCHA Enhancements feature that I built have made it into the new version of MySource Matrix, 3.20.3, which will be released on April 6th. It is exciting to work on a feature that makes it into the shipping product, and something that, in my opinion, greatly enhances aspects of the product.

So, stay tuned, and download a copy of MySource Matrix 3.20.3 when it is released on April 6th!

CAPTCHA Enhancements in MySource Matrix

3 years ago by Nicholas Hubbard in #PHP #Matrix

For a long time I have hated the way the MySource Matrix CAPTCHA looks. It is just standard PHP GD fonts, which look horrible. They look so grainy it is a typographers nightmare, and most of the time they are hard to read even for humans! So, I set out to make the MySource Matrix CAPTCHA much better by allowing user customizable colors, as well as allowing the user to select any True Type Font to use for the CAPTCHA.

  • jQuery Matrix
  • jQuery Matrix

The colors were never customizable, which really bothered me. I didn't like having a border around the CAPTCHA let alone being restricted to blacks and grays. We need a CAPTCHA that can prevent spam on forms, but is also pretty to look at!

  • jQuery Matrix

Adding the options and code to use True Type Fonts took a while to figure out. MySource Matrix is so expansive that it took me 20 minutes to even track down the files that I would need to work with! But, I finally got it working, and as expected you can choose a font on a per form basis, as well as customize the font size. If you don't want to use custom fonts, you can just turn it off and go back to using the default GD fonts that MySource Matrix currently uses.

I have a list of features that I am going to continue to add to the CAPTCHA, such as lines through the text for higher levels of spam prevention, transparent text, and multicolored text. Let me know if you have any CAPTCHA feature requests and I will try to add them in.

MP3 File Asset to be Released in 3.20

3 years ago by Nicholas Hubbard in #PHP #Matrix

Recently I wrote an MP3 File asset for MySource Matrix which will let you upload file types of .mp3 and the asset will extract the ID3 tags which are then usable in Matrix. This asset is based off of the standard File asset type, but goes one step further for MP3 files giving them a new type code, as well as ID3 extraction functionality.

  • iphone

I am excited to say that I submitted the asset to Squiz and they will be including it in the 3.20 branch. My fingers are crossed that it will be released in the 3.20.0 release, but if it does not make it in that, it will be released in 3.20.1 in February. Squiz has to run it through their test suite first to make sure that the asset does not break any core functionality of MySource Matrix (it better not!).

Right now the MP3 File asset is at version 1.0 which includes the following features:

  • Uses getID3(), a great library that gets mp3 tags along with lots of other audio formats. This can be downloaded at www.getid3.org. Right now version 1.7.8 is the version that I am recommending, as the 2.x branch has a few bugs.
  • getID3() is a new option in External Tools Configuration (error checking is done in the asset to make sure this is turned on, and that the files exist).
  • Asset extracts ID3 tags automatically when the file is uploaded (error checking also if there are none).
  • Asset checks for ID3v1 and ID3v2 and uses the appropriate extraction method for the correct version.
  • ID3 information can be manually parsed on the assets details page (Great in case you change the tags manually and want to revert back to the ID3 tags in the mp3).
  • Custom keywords have been added which dynamically get the ID3 tag information and print it. This information does not have to be in the database.
  • Bulk File Import Tool updated to allow bulk importing to .mp3 files through FTP as well as Admin interface. Importing .mp3 files in this way will also extract ID3 tags for each file.
  • Squiz coding standards have been followed.

It is exciting to get to write an asset which will be added to MySource Matrix! I will continue to be the person that is in charge of the asset and I already have some additional feature ideas to add to the asset.

Feel free to let me know what you think and go download MySource Matrix 3.20 on January 5th!