Creating and Managing User Groups in Joomla! and VirtueMart

Exclusive offer: get 50% off this eBook here
Joomla! E-Commerce with VirtueMart

Joomla! E-Commerce with VirtueMart — Save 50%

Build feature-rich online stores with Joomla! 1.0/1.5 and VirtueMart 1.1.x

$29.99    $15.00
by Suhreed Sarkar | April 2009 | Joomla! MySQL Content Management e-Commerce Open Source PHP

In the previous article you have seen how to allow customer registrations to your VirtueMart shop, how to manage the registered users, how to define extra fields for customer registration and account maintenance forms. In this article by Suhreed Sarkar, we learn how to create and manage user groups and assign permissions to user groups. You will also see how to create permission modules and functions that are used for implementing a permission system for special groups.

User manager

In Joomla!, there is one User Manager component from where you can manage the users of that site. However, for the VirtueMart component, there is another  user manager which should be used for the VirtueMart shop. To be clear about  the differences of these two user managers, let us look into both.

Joomla! user manager

Let us first try Joomla!'s user manager. Go to the Joomla! control panel and click on the User Manager icon or click on Site | User Manager. This brings the User Manager screen of Joomla!:

Creating and Managing User Groups in Joomla! and VirtueMart

We see that the users registered to the Joomla! site are listed in this screen. This screen shows the username, full name, enabled status, group that the user is assigned to, email of the user, date and time when they last visited, and user ID. From this screen, you may guess that any user can be enabled or disabled by clicking on the icon in the Enabled column. Enabled user accounts show a green tick mark in the Enabled column.

For viewing the details of any user, click on that user's name in the Name column. That brings up the User:[Edit] screen:

Creating and Managing User Groups in Joomla! and VirtueMart

As you see, the User Details section shows some important information about the user including Name, Username, E-mail, Group, and so on. You can edit and change these settings including the password. In the Group selection box, you must select one level. The deepest level gets the highest permission in the system. From this section, you can also block a user and decide whether they will receive system  emails or not.

In the Parameters section, you can choose the Front-end Language and Time Zone for that user. If you have created contact items using Joomla!'s Contacts component, you may assign one contact to this user in the Contact Information section.

VirtueMart user manager

Let us now look into VirtueMart's user manager. From the Joomla! control panel, select Components | VirtueMart to reach the VirtueMart Administration Panel. To view the list of the user's registered to the VirtueMart store, click on Admin | Users. This brings the User List screen:

Creating and Managing User Groups in Joomla! and VirtueMart

As you can see, the User List screen shows the list of users registered to the shop. The screen shows their username, full name, group the user is assigned to, and their shopper group. In the Group column, note that there are two groups mentioned. One group is without brackets and another is inside brackets. The group name mentioned inside brackets is Joomla!'s standard user groups, whereas the one without brackets is VirtueMart's user group. We are going to learn about these user groups in the  next section.

For viewing the details of a user, click on the user's name in Username column. That brings the Add/Update User Information screen:

Creating and Managing User Groups in Joomla! and VirtueMart

The screen has three tabs: General User Information, Shopper Information, and Order List. The General User Information tab contains the same information which was shown in Joomla!'s user manager's User: [Edit] screen. The Shopper Information tab contains shop related information for the user:

Creating and Managing User Groups in Joomla! and VirtueMart

The Shopper Information section contains:

  • a vendor to which the user is registered
  • the user group the user belongs to
  • a customer number/ID
  • the shopper group

Other sections in this tab are: Shipping Addresses, Bill To Information, Bank Account, and any other section you have added to the user registration or account maintenance form. These sections contain fields which are either available on the registration or account maintenance form. If the user has placed some orders, the Order List tab will list the orders placed by that user. If no order has been placed,  the Order List tab will not be visible.

Which user manager should we use?

As we can see, there is a difference between Joomla!'s user manager and VirtueMart's user manager. VirtueMart's user manager shows some additional information fields, which are necessary for the operation of the shop. Therefore, whenever you are managing users for your shop, use the user manager in the VirtueMart component, not Joomla!'s user manager. Otherwise, all customer information will not be added or updated. This may create some problems in operating the VirtueMart store.

User Groups

Do you want to decide who can do what in your shop? There is a very good way for doing that in Joomla! and VirtueMart. Both Joomla! and VirtueMart have some predefined user groups. In both cases, you can create additional groups and assign permission levels to these groups. When users register to your site, you assign them to one of the user groups.

Joomla! user groups

Let us first look into Joomla! user groups. Predefined groups in Joomla! are  described below:

User Group

Permissions

Public Frontend

Registered

Users in this group can login to the Joomla! site and view the contents, sections, categories, and the items which are marked only for registered users. This group has no access to content management.

Author

Users in this group get all the permissions the Registered group has. In addition to that, users in this group can submit articles for publishing, and can edit their own articles.

Editor

Users of this group have all the above permissions, and also can edit articles submitted by other users. However, they cannot publish the contents.

Publisher

Users in this group can login to the system and submit, edit, and publish their own content as well as contents submitted by other users.

Public Backend

Manager

Users in this group can login to the administration panel and manage content items including articles, sections, categories, links, and so on. They cannot manage users, install modules or components, manage templates and languages, and access global configurations. Users in this group can access some of the components for which the administrator has given permission.

Administrator

In addition to content management, users in this group can add a user to Super Administrator group, edit a user, access the global configuration

settings, access the mail function, and manage/install templates and language files.

Super Administrator

Users in this group can access all administration functions. For every site, at least one should be in this group to perform global configurations. You

cannot delete a user in this group or move him/her to another group.

As you can see, most of the users registering to your site should be assigned to the Registered group. By default, Joomla! assigns all newly registered users to the Registered group. You need to add some users to the Editor or Publisher group if they need to add or publish content to the site. The persons who are managing the shop should be assigned to other Public Backend groups such as Manager, Administrator or Super Administrator.

VirtueMart user groups

Let us now look into the user groups in VirtueMart. To see the user groups, go to VirtueMart's administration panel and click on Admin | User Groups. This shows the User Group List screen:

Creating and Managing User Groups in Joomla! and VirtueMart

By default, you will see four user groups: admin, storeadmin, shopper, and demo. These groups are used for assigning permissions to users. Also, note the values in the User Group Level column. The higher the value in this field, the lower the permissions assumed for the group. The admin group has a level value of 0, which means it has all of the permissions, and of course, more than the next group storeadmin. Similarly, storeadmin group has more permissions than the shopper group. These predefined groups are key groups in VirtueMart, and you cannot modify or delete these groups. These groups have the following permissions:

Group

Permissions

admin

This group has permissions to use all of the modules except checkout and shop. The admin group does not need these because admin users usually do not shop in their store.

storeadmin

This group has fewer permissions than admin group. Users in this group can access all the modules except the admin, vendor, shop, and checkout modules. They cannot set the global configurations for the store, but can add and edit payment methods, products, categories, and so on.

shopper

This group has the least permission among the three key groups. By default, users registered to the shop are assigned to this group. Users in this group can fully access the account module, and can use some functions of the shop, coupon, and checkout modules.

demo

This is a demo group created by default so that administrators can test and play with it.

For most of the shops, these four predefined groups will be enough to implement appropriate permissions. However, in some cases you may need to create a new user group and assign separate permissions to that group. For example, you may want to employ some people as store managers who will add products to the catalog and manage the orders. They cannot add or edit payment methods, shipping methods, or other settings, except product and orders. If you add these people to the storeadmin group then they get more permissions than required. In such situations, a good solution is to create a new group, add selected user accounts to that group, and assign permissions to that group.

Creating a new user group

For creating a new user group, click on the New button in the toolbar on the User Group List screen. This brings Add/Edit a User Group screen:

Creating and Managing User Groups in Joomla! and VirtueMart

In the Add/Edit a User Group screen, enter the group's name and group level. You must type a higher value than existing groups (for example, 1000). Click on the Save icon to save the user group. You will now see the newly created user group in the User Group List screen.

Joomla! E-Commerce with VirtueMart Build feature-rich online stores with Joomla! 1.0/1.5 and VirtueMart 1.1.x
Published: March 2009
eBook Price: $29.99
Book Price: $49.99
See more
Select your format and quantity:

Group permissions

Each user group has permissions associated with it. Although there is no simple way to view all of the permissions a user group has, we cans still view the associated permissions for all user groups. To view the permissions associated with the user groups, click on Admin | List Modules. This brings the Module List screen:

Creating and Managing User Groups in Joomla! and VirtueMart

The Module List screen shows the modules and the group's permissions to access those modules. As you can see, our newly created storemanager user group is also in the list.

Assigning permissions to user groups

We must now assign appropriate permissions to the storemanager group. First, select the store module. This module allows us to see store-wide configurations and store information. We don't want to allow the storemanager group to change the store information. However, we are selecting this store module, because to display the VirtueMart Administration Panel, this module is necessary. Click on the Function List link against the store module. That shows Function List: store screen:

Creating and Managing User Groups in Joomla! and VirtueMart

In the Function List: store screen, you can see the main functions available in the store module. From here, you can select functions that will be available to the storemanager group. To know what each functions do, click on the function name to see the Function Information screen:

Creating and Managing User Groups in Joomla! and VirtueMart

The Function Information screen shows the function name, class name, class method, groups which have permission to use that function, and a description of the function. This will help you understand where the function comes from and for what purpose it serves.

As our store managers will not change any settings regarding credit cards, payment and shipping methods, and export modules, in the Function List: store screen, we need to uncheck all modules for the storemanager group.

For the storemanager group, select the store, product, order, reportbasic, account, and help modules. Then, click on the Save Permissions link.

After giving access to these modules, we can assign permissions to specific functions under these modules. Click on the Function List link against each module and select the functions you want to allow for store managers. For example, we want store managers to add new products, but not to delete products once added to the catalog. To implement this rule, click on the Function List link against the product module. You get the Function List: product screen:

Creating and Managing User Groups in Joomla! and VirtueMart

In the Function List: product screen, you may select all of the functions for the storemanager group except the productDelete function. After checking and clearing the checkboxes under the storemanager column for different functions, click on the Save Permissions link to save the permissions you have set.

When you see the none column checked, that means no restriction is applied for that function or module. Also note that, in both the Module List and Function List screen, there is a New button in the toolbar. You can add a new module or function by clicking on this New button.

Adding new module

Why do you need to add a new module while assigning permissions to groups? Generally, the default modules listed in the Module List screen are enough for assigning permissions to most of the functions. However, in some cases, you may like to assign permissions to a group of functions, which have not been explicitly assigned, to any group. For example, by default, functions related to managing payment methods are listed under the store module. Someone may like to make another module named payment and put the related functions under this module. This will help assign permissions to payment functions easily. Therefore, the first step will be to create a module named payment.

For creating a module, go to the Module List screen by clicking on Admin | List Modules. In the Module List screen, click on the New icon in the toolbar. This opens up the Module Information screen:

Creating and Managing User Groups in Joomla! and VirtueMart

In the Module Information screen, we need to provide the name of the module, and some additional information. In the Module Name field, type payment (or any other name which is not used as a module name already). In the Module Perms list, select the groups to which you want to give permissions to access this module. Select Yes in the Show Module in Admin menu? drop-down list. This will show a section named Payment in the admin menu. Assign the display order, say 7, in the Display Order field. Finally, give a description what the module does. Click on the Save icon to save the module. You can now see this module in the Module List screen.

Adding new function

After adding the module, we need to add functions to the module. In the Module List screen, go to the payment module and click on the Function List link. The Function List: payment screen will show no function. This is because we have not yet added any function to the payment module. For adding a function, click on the New icon in the toolbar on the Function List screen. This shows the Function Information screen:

Creating and Managing User Groups in Joomla! and VirtueMart

From the Function Information screen, you need to configure the following fields:

  • Function Name: Provide a function name. If you are adding the function for allowing the group to add a payment method, the function name will be paymentMethodAdd.
  • Class Name: From this drop-down list, select an appropriate class file. As we are adding functions for payment methods, select the ps_payment_method class file here.
  • Class Method: When you select a class file in the Class Name field, you will see the available functions from that class in this drop-down list. You will notice that, in the ps_payment_method class, there are add, update, delete, list_method, and some other functions. The functions named here are usable by user groups. Other functions, such as validate_add, validate_delete, validate_update, and so on, are automatically executed upon use of the add, delete or update functions. For the time being, select the add function from the drop-down list.
  • Function Perms: Select the user groups who will be able to use this function. You can select multiple groups from the list.
  • Function Description: Provide a description of the function to help administrators understand what this function is for. As the paymentMethodAdd function will add a payment method, type Adds a payment method in this text area.

When you have entered all this information, click on the Save icon in the toolbar. That adds the function to the payment module. Similarly, add three more functions named paymentMethodUpdate, paymentMethodDelete, and paymentMethodList. All of these will use the same ps_payment_method class and use the update, delete, and list_method class methods respectively.

Warning: You may get an error message while adding new functions. It happens if another function exists with the same name. As the paymentMethodAdd, and other functions we have added now, are part of store module, you will first need to delete those functions in store module.

After adding all the functions, go back to the Function List: payment screen, and you will see the function listed there:

Creating and Managing User Groups in Joomla! and VirtueMart

From the Function List: payment screen, you can see the permissions assigned to the different user groups. If you want to change some of these permissions, do so, and click on the Save Permissions link to save the settings.

In principle, the function name field should take any string that is not the same as other functions. However, you may find it strange when you name the update() function as updatePaymentMethod instead of paymentMethodUpdate. You will get a message saying that the function is not registered:

Creating and Managing User Groups in Joomla! and VirtueMart

Let us investigate why this happens. Open the file ../administrator/components/com_virtuemart/html/store.payment_method_form.php. Now, go to line #186. The variable $funcname specifies what functions will be used. The line looks like the following:

<!--[if gte mso 9]>







 







  Normal







  0







  







  







  







  







  false







  false







  false







  







  EN-US







  X-NONE







  X-NONE







  







   







   







   







   







   







   







   







   







   







   







   







  







  







   







   







   







   







   







   







   







   







   







   







   







  







<![endif]--><!--[if gte mso 9]>







 







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







  







 







<![endif]--><!--[if gte mso 10]>







<! 



mce:1



-->

<!--[endif]-->$funcname = !empty($payment_method_id) ? "paymentMethodUpdate" :
 "paymentMethodAdd";

As you can see, function names are specified in the file. Therefore, whenever you are adding such a function, make sure the function name you provide is the same as mentioned in the $funcname variable.

Assigning users to groups

We have already seen how to view a user's information in VirtueMart. For viewing and updating user information, go to Admin | Users. Then, click on the username whose details you want to view. That brings up the Add/Update User Information screen. Go to the Shopper Information tab in this screen:

Creating and Managing User Groups in Joomla! and VirtueMart

In the Shopper Information tab, you can assign appropriate permissions to the user. Select the user group from the Permissions drop-down list. For example, we assign the user to the storemanager user group, which we created earlier. When the user group is selected from the Permissions drop-down list, click on the Save icon in the toolbar. Now, the user is a member of the storemanager group and will have the permissions that are assigned to the storemanager group.

Checking how these work

We will now check how our user groups and permissions work. We have created a user group named storemanager, given permissions to manage products and orders to this user group, and fnally added a user to this user group. Now, to see the effect, we need to log in as that user, and see whether we can add products and manage orders. Before testing, we need to publish the mod_virtuemart module, because a link to administration section is visible in this module when the user has the necessary permissions.

Lets try it first! Go to the shop frontend and log in using that username and password. After logging in, search for the Admin link in the VirtueMart module. Is it there? No, you can't see that now:

Creating and Managing User Groups in Joomla! and VirtueMart

For getting the Admin link in the VirtueMart Module, and also to get some administrative permission, we have to apply a little hack. We need to edit two files. First, open the file ../components/com_virtuemart/virtuemart.php. At line #96, you get the following code block:

if ( vmIsAdminMode()
&& $perm->check("admin,storeadmin")
&& ((!stristr($my->usertype, "admin") ^
PSHOP_ALLOW_FRONTENDADMIN_FOR_NOBACKENDERS == '' )
|| stristr($my->usertype, "admin")
)
&& !stristr($page, "shop.")
) {

As you will notice, in the second line of the code above, two user groups are mentioned. If we want to give other groups access to the administration panel, we must add that group's name here. So, we change the above code block as follows:

if ( vmIsAdminMode()
&& $perm->check("admin,storeadmin,storemanager")
&& ((!stristr($my->usertype, "admin") ^
PSHOP_ALLOW_FRONTENDADMIN_FOR_NOBACKENDERS == '' )
|| stristr($my->usertype, "admin")
|| stristr($my->usertype, "storemanager")
)
&& !stristr($page, "shop.")
) {

The changed lines are highlighted in above code block. We have added the storemanager group in second line, and also added another line after || stristr($my->usertype, "admin"). With these changes, the user will get the assigned permissions and have access to the administration panel. However, you still will not see the Admin link on the VirtueMart Module. For getting that, open ../modules/mod_virtuemart/mod_virtuemart.php file. In line # 139, you will see the following code block:

<?php
}
$perm = new ps_perm;
// Show the Frontend ADMINISTRATION Link
if ($perm->check("admin,storeadmin")
&& ((!stristr($my->usertype, "admin") ^
PSHOP_ALLOW_FRONTENDADMIN_FOR_NOBACKENDERS == '' )
|| stristr($my->usertype, "admin")
)
&& $show_adminlink == 'yes'
) { ?>

In plain language, the above code block says that if the users are of type admin or storeadmin, then show the admin link. Therefore, to show the admin link to other groups, we need to add that group's name here. Change the above code block as follows:

<?php
}
$perm = new ps_perm;
// Show the Frontend ADMINISTRATION Link
if ($perm->check("admin,storeadmin,storemanager")
&& ((!stristr($my->usertype, "admin") ^
PSHOP_ALLOW_FRONTENDADMIN_FOR_NOBACKENDERS == '' )
|| stristr($my->usertype, "admin")
|| stristr($my->usertype, "storemanager")
)
&& $show_adminlink == 'yes'
) { ?>

The changed lines are highlighted above. Like the previous code block, we have added the storemanager group to the list.

Warning:While listing the group names, do not use spaces. Using spaces will not show the Admin link. For example, admin,storeadmin, storemanager will work fine, but admin, storeadmin, storemanager will not work. Be careful when applying this hack.

Now, log in again with the same username and password and see what happens. Wow! We got our Admin link on the VirtueMart module:

Creating and Managing User Groups in Joomla! and VirtueMart

To access the VirtueMart administration panel, and manage products and orders, click on the Admin link. You will get the VirtueMart Administration panel (in Standard Layout):

Creating and Managing User Groups in Joomla! and VirtueMart

As you can see, there is a Back button for going back to frontend. You also get the list of modules in the left sidebar. Clicking on one module will bring out the available functions. I hope you remember that we have assigned permissions to the storemanager group to manage products and orders only. They can add new products, but cannot delete any product. Click on the Products module, and then on List Products. This shows the list of products available in the catalog. Try deleting a product by clicking on the trash icon in the Remove column. You get a message like the following:

Creating and Managing User Groups in Joomla! and VirtueMart

Also, try managing the orders. Click on the Orders module and then on List Orders. You will see the list of orders placed so far. Try deleting an order from the list by clicking on the trash icon in the Remove column. As we have not given permission to the storemanager group to delete an order, you will get the following message:

Creating and Managing User Groups in Joomla! and VirtueMart

Try to do something else for which the group has no permission, and you will get messages like these. From this, we understand that the permissions we have given to users are in effect. This is one wonderful way for giving access to a frontend user to manage the shop's specific tasks.

What other changes were made? Yes, we created a module named payment and added four functions to that module: paymentMethodAdd, payMentMethodUpdate, paymentMethodDelete, and paymentMethodList. The storemanager group can use all of the methods except the paymentMethodDelete. Lets try that.

But where is the payment module in left sidebar? All other modules are there, only our newly created payment module is missing. Then how do you try to add, update, and list the payment methods. During creation of the payment module, we indicated that this module should be displayed in the administration panel. However, it is not showing there. To show the module, and other links to that module, we need to edit a file.

If you click on the Store module, you get two payment method related links: List Payment Methods, and Add Payment Method. As the group storemanager has permission to do both, you may try and see what happens. Surely, you will be able to add a payment method, edit a payment method, and to see the list of payment methods. However, you will not be able to delete a payment method, as you have no permission to do so.

Summary

In this article we learnt how to create and manage user groups and assign permissions to user groups. You have also seen how to create permission modules and functions that are used for implementing a permission system for special groups. In the next article, the last in the series, we will learn about managing orders, viewing an order's details, updating an order's status, creating and managing order status types, and also managing and updating product inventory.

 

If you have read this article you may be interested to view :

 

Joomla! E-Commerce with VirtueMart Build feature-rich online stores with Joomla! 1.0/1.5 and VirtueMart 1.1.x
Published: March 2009
eBook Price: $29.99
Book Price: $49.99
See more
Select your format and quantity:

About the Author :


Suhreed Sarkar

Suhreed Sarkar is an IT consultant, trainer and technical writer. He studied Marine engineering, served on board the ship for two years, and then started journey in to IT world with MCSE in Windows NT 4.0 track. Later he studied business administration and earned MBA from University of Dhaka. He has a bunch of BrainBench certifications on various topics including PHP4, Project Management, RDBMS Concepts, E-commerce, Web Server Administration, Internet Security, Training Development, Training Delivery and Evaluation, and Technical Writing.

He taught courses on system administration, web development, e-commerce and MIS. He has consulted several national and international organizations including United Nations, and helped clients building and adopting their web portals, large scale databases and management information systems. At present he is working on building a framework for education sector MIS, and promoting use of ICTs in education.

Suhreed is renowned technical author in Bengali – having a dozen of books published on subjects covering web development, LAMP, networking, and system administration. He authored Zen Cart: E-commerce Application Development, Joomla! E-commerce with Virtuemart, and Joomla! with Flash, published by Packt Publishing.

While not busy with hacking some apps, blogging on his blog (http://www.suhreedsarkar.com), reading philosophy of Bertrand Russell or management thought of Peter F Drucker – he likes to spend some special moments with his family. Suhreed lives in Dhaka, Bangladesh

Contact Suhreed Sarkar

Books From Packt

Joomla! Web Security
Joomla! Web Security

Drupal 6 Social Networking
Drupal 6 Social Networking

Learning jQuery 1.3
Learning jQuery 1.3

Magento: Beginner's Guide
Magento: Beginner's Guide

Drupal 6 Site Builder Solutions
Drupal 6 Site Builder Solutions

Learning Joomla! 1.5 Extension Development
Learning Joomla! 1.5 Extension Development

Zen Cart: E-commerce Application Development
Zen Cart: E-commerce Application Development

jQuery UI 1.6: The User Interface Library for jQuery
jQuery UI 1.6: The User Interface Library for jQuery

 

 

 

 

No votes yet
It doesn't work if Joomla SEF is on by
Hi, grate tutorial, Right on the money! But if I turn the SEF on the page shows with no CSS and no Java. Can you figure that out? Best Regards, AC Costa accosta[at]artmedia.net
Problem by
Hi, my email is coffee.express@hotmail.com, please i need help, i use your tutorial or one of my websites and works perfect, i see the administration link for user groups, but when im trying install in another website, not shows the administration link, both websites are on the same hosting and i use the same version of joomla and virtuemart, i dont know what the problem can be.Please help.
Great Tutorial by
You have solved my problem for a non storeadmin group user seeing the Admin link on the VM Module in the front-end. Thanks very much.
Nice Tutorials by
Its nice tutorials for user management in virtuemart,but i have a problem here,i'm not creating new user group named storemanager,but i'm using default user storeadmin. When i'm login from front page as storeadmin i cant found admin link,account maintenance and download area. I just found shop cart. Any sugestion for this problem? thanks before

Post new comment

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
a
q
A
b
2
U
Enter the code without spaces and pay attention to upper/lower case.
Code Download and Errata
Packt Anytime, Anywhere
Register Books
Print Upgrades
eBook Downloads
Video Support
Contact Us
Awards Voting Nominations Previous Winners
Judges Open Source CMS Hall Of Fame CMS Most Promising Open Source Project Open Source E-Commerce Applications Open Source JavaScript Library Open Source Graphics Software
Resources
Open Source CMS Hall Of Fame CMS Most Promising Open Source Project Open Source E-Commerce Applications Open Source JavaScript Library Open Source Graphics Software