glFusion v1.1.0 Development Roadmap / Design Ideas

The purpose of this page is to document the features planned for the next release of glFusion, v1.1.0. The goal is to release by the end of October 2008, with a soft code freeze in the 3rd week of September let's shoot for the end of September.

Update: code feature freeze for v1.1.0 will be Oct. 11, 2008, with a beta release planned shortly thereafter. Hopefully a final release will come Oct. 31, 2008.

CSS / JS Handling - Done

Improve how JavaScript and CSS are handled by glFusion.

See css_js for a detailed discussion of proposed changes to support better handling and the necessary features for Site Tailor.

Menu Enhancements - Done (except for multilingual?)

Proposed by Mark Evans & Eric Warren

Objective

Allow Site Tailor to manage more than one menu. Ability to manage block menus, header menus, even footer menus.

Design Details

The current database design for Site Tailor does not support the necessary flexibility. The following database table structure is proposed:

  menu table
    id
    menu_name
  menu_config table
    id
    menu_id (maps to gl_menu_table.id)
    conf_name
    conf_value
  menu_elements
    id
    menu_id
    parent_id
    element_label
    …

While this proposed structure provides a good degree of flexibility, it does not promote efficient calls to retrieve menu details and items. Since glFusion is using ‘instance caching’ for the menu, the queries are actually only run when the menu changes, so efficiency is not as critical since the queries will not be run with each page load. Also, the volume of data will be very small.

Build the menu data structure:

  SELECT * from gl_menu_table as menu LEFT JOIN gl_menu_config_table as config on menu.id=config.menu_id;

This will return multiple rows with all the configuration options:

  while ($M=DB_fetchArray($result)) {
      $menu[$M[‘menu_id’]][$M[‘conf_name’]] = $M[‘conf_value’];
  }

Whether or not the menu table is really needed should be evaluated…

Now that the configuration options are built, we need to retrieve the elements.

We want this all to be object oriented, so we’ll need a couple of classes to handle the actual menu and its elements;

class stMenu {
}

for the menu elements;

class stMenuElements {
}

Displaying a Menu

glFusion will detect that Site Tailor is installed and active. If available it will automatically render the menu named header in COM_siteHeader().

A block can display a menu by calling phpblock_getmenu(menuname);

glFusion will automatically render a menu named footer in COM_siteFooter();

Need to determine a method to call other menus in the header and footer if necessary.

Why not use the menu ID as part of the tag, so for instance placing {gl_menu05} will render menu 05, etc. Thoughts?

Menu Styling

We want to build an intelligence engine so you can easily change how the menu renders. What class names to use, what li / ul types, etc. The following attributes should be configurable through Site Tailor:

  • Main <ul>
  • Main <li>
  • Main Parent <ul>
  • Sub <li>
  • Sub <ul>

These elements should be tied to a menu, so each menu can have a unique set of class names.

Multi-Lingual Support

Should we try to support multi-lingual sites? My initial thought is yes, but I would prefer not to do it the traditional Geeklog way of creating a language table. Instead, I would like to leverage the ability to use $LANG variables in CTL. If a site wants to support multiple languages, they can create a language.php file that contains all the menu labels, then use the $LANG_WHATEVER[‘menu_label_name_here’] in the Site Tailor menu editor. If there is a german.php file, then Site Tailor will use it if the user’s language is set to German. This is not as elegant, but it provides the necessary features without the expense of more database overhead.

Theme Enhancement - Moved to v1.2.0

Proposed by Mark Evans & Eric Warren

Objective

Develop a method to allow the site administrator to manage themes for their site. Enhance Site Tailor with a ‘Theme’ tab that will provide the following options:

  • List available themes (with thumbnail and zoom)
  • Ability to select default theme
  • Ability to select if user can override
  • Ability to enable / disable themes
  • Ability to set permissions on who can use / view theme
  • Ability to upload new theme / Scan for new themes

Design Details

Theme Database

To accomplish many of the goals, glFusion must implement a theme table in the database. Proposed structure is:

Id
Name
Description
Enabled
Visible To

Core Modifications

Several core functions would be modified to pull theme data from the database:

  • COM_getThemes()
  • configmanager_select_theme_helper()
  • lib-common.php – where it checks and sets the user’s theme. This will need to be enhanced to validate the theme is available (exists, is active, has permissions, etc.)

Will leverage existing config.class.php functions to update default theme.

Site Tailor Enhancements

A new tab will be created labeled, Themes. This tab will display a list of existing themes.

The thumbnail view will use some descriptive icons to provide a quick status.

Theme Editor Mockup

  • Clicking on the thumbnail will open a larger view image.
  • The orange alert icon will display if the theme is not “certified” for the current version of glFusion. This won't disable the theme, but will just be a visual reminder.
  • A panel either to the right or below the image will house some informational icons about the theme.
    • “Running” status: green for site default, blue for available to be selected by users, and grey for disabled (no permissions for regular users).
    • “Lightswitch” icon to go to expanded settings screen where they can edit permissions, etc. (see below for more info).
    • “Info” icon which on hover displays the theme name, author, and description.
    • NEED TO ADD - Edit icon to send them into the online theme editor that will allow them to edit .thtml files and automatically save them in the appropriate /custom directory.
    • NEED TO ADD - Clone icon to create a clone of the theme.
    • NEED TO ADD - Delete icon on this panel? Or have the delete option within the Settings screen?
    • NEED TO ADD - Link to online theme documentation wiki.

At the bottom of the main theme thumbnail page will also be an upload box to allow the administrator the option to upload new themes. Themes must be in the ‘glfusion’ format (described later).

Edit Settings Screen

  • Theme Name Theme Description Enabled Default Visible To: Delete
  • Theme Name – The actual name of the theme. - not configurable, just pulled from theme.ini or database.
  • Theme Description – A brief description of the theme. - not configurable, just pulled from theme.ini or database.
  • Theme Version – A version number for the theme. - not configurable, just pulled from theme.ini or database.
  • Supported glFusion version – What version of glFusion is this theme designed for? - not configurable, just pulled from theme.ini or database.
  • Enabled – A checkbox to denote if the theme is active or not
  • Default – A Radio button used to select the default theme
  • Visible To – A list of all glFusion groups with the visible to group selected. NOTE: If the default radio button is selected, this value must be All.
  • Delete – A red X icon that allows the administrator to remove the theme.

Another option to consider is a clone or new option. This would allow the administrator to create a new theme interactively; they would specify the name, description, visible to options and then have the ability to choose a ‘source’ theme as the base. On save, this would add the theme to the database, create the new theme directory and copy over the ‘source’ files. Eric wants to promote the practice he started with Nouveau 1.4.1 where you only need to copy the modified template files over. The remaining templates stay in the base nouveau/ directory. Given this objective, there may not be any source files copied during this operation.

Ultimately, a directory listing to transverse the theme directory files and an online .thtml / .css editor screen would be valuable as well. This would allow an admin to work on a layout live, without having to download local copies of the files, edit, save, re-upload, etc. This is meant more for tweaking, or copying to another theme like mentioned above, it's not intended for creating an entire theme from scratch.

Theme Packaging

Themes must be packaged with a theme.ini file (we may need a better name) that will contain:

  • Theme Name
  • Theme Description
  • Theme Version
  • Theme Author
  • Theme Support Site
  • glFusion version supported
  • Theme Thumbnail

This file will be used to populate the database when a new theme is uploaded.

Themes should use a standard set of CSS class names. This will allow integration with Site Tailor for color customizations, etc. Will need to document this standard.

Impact

This should not have a great impact on the core code. Although a new database table will be created, a stock Geeklog install would not require this table and would not conflict with this implementation.

Site Tailor will require some core modifications to become ‘theme aware’. The goal will be to allow different menu colors, images based on the theme.

As glFusion continues to evolve, it will be more difficult to have themes that can work with both Geeklog and glFusion. Since Site Tailor is glFusion only and the themes will become more reliant upon Site Tailor, the themes will not be compatible with Geeklog.

Theme Customizations

Site Tailor should have the ability to customize various attributes of a theme. These should include:

  • colors
  • fonts
  • font size
  • navigation block width
  • extra block width
  • fluid or fixed width
  • logo / slogan positioning adjustment

We need to keep performance in mind, we don’t want to break this down to multiple .css files to minimize the number of calls a browser must make to initially load the page.

A possible solution is to treat the style.css file as a template, build it dynamically from the various attributes defined in Site Tailor and then output to the browser. We can create a ‘serial number’ for the style that can be passed in the <link> statement, so it will look like:

<link rel=“stylesheet” type=“text/css” href=“http://gll.ecsnet.org/layout/nouveau/getstyle.php?ver={serial_number}” title=“nouveau” />

This will allow the browser to recognize that a change has been made to the style sheet and force a reload.

Leveraging instance caching, we can reduce the number of DB calls needed to build the styles.

Need to validate that passing styles via PHP call will cache locally in the browser.

Site Color Picker

In anticipation of creating a site-wide color picker in Site Tailor (functioning like the Menu Builder color picker), we've consolidated the css color information into one style-colors.css file. The intent in making it a separate css file is that it allows one to easily override the consolidated color for any given element simply by adding !important to the end of their css value in the regular stylesheet (where we've left all the individual color properties in tact).

In addition to the color picker which will provide for a near infinite set of color combinations (and you thought Chameleon's 88 thousand possible combinations were a lot! :-) ) we want to provide a drop down selector box with some pre-defined color styles spanning a wide range of the color gamut.

Site Theme Editor

We could continue to itemize out every available option, (like Chameleon did) but ultimately I (Eric) feel that allowing for complete control of editing files through an online interface to be the most flexible in allowing customizations.

By providing an Edit screen that has a file tree browser, and a text editor window (that automatically styles html or css code for ease of readibility! Visit http://codepress.org for a taste! :-P) that allows live edits from the site to the .thtml / .css / .js files within the /layout directory, I think that this would help out a lot of admins, and give them a cutting edge interface to customize their site.

Also, by automatically saving their changed files in the appropriate /custom directory, we basically auto-manage their customizations always leaving the base file in tact and just saving over the customized one! …How cool could THAT be! If they go to open a file, the system should be smart enough to detect if they already have a custom version in place and ask to edit that, or the original one. 8-)

Installation Enhancements - Done

Proposed by Mark Evans

The installation / upgrade routine will need to support 3 possible situations:

  • glFusion Fresh Install
  • glFusion Upgrade
  • Migrate From Geeklog

This means we will need to support upgrading from any production version of Geeklog. There is a potential for conflicts in version number variables that must be addressed.

Configuration Enhancements - Done

Proposed by Mark Evans

The goal will be to centralize the configuration options of all plugins into the main Configuration GUI. This also resolves some permission issues we've seen on installs and upgrades. No more writing to configuration files, instead use the configuration database / GUI.

Social Networking features FIXME (status?)

Proposed by Trinity Bays

Objective

Improvement of the user profile page, user configuration and user control menus to facilitate situations where social networking is desired.

The idea is to make users experience more myspace.com like. These changes will pave the way for a Friends plugin, User Groups plugin, a Messaging plugin, and a User Blog plugin as well as other socially centered plugins not yet conceived.

Design Details

  • Separation of the Profile seen by the user and the profile seen by other users. Should also consider separation of profile and account settings
  • Modification of the user functions block I.E…. Add photo and direct links to user gallery management
  • Improve plugin api for adding links to the user functions block and adding status blocks for various other plugins social networking specific features.
  • Redesign of profile page view when viewed by other users and allow customization of its look and feel using CSS and minor HTML like myspace can
  • Change the way Plugins interact with the the profile display page and profile setting page1) as well as allowing users to only display what they want in a profile view by other users.
  • The profile display page will be a 2 column page with a minimal header and footer. Plugins will create profile specific blocks that can be displayed in the profile display page in those columns
  • We should consider modifying and improving current included plugins integration into this social networking functionality and consider making plugins support user specific versions of their functionality. Examples include allowing users to create there own polls, calendar events, links, and blogs.
  • social networking aware plugins should allow permissions to limit display of items based on anonymous, logged in user, or friend status which includes various friend groupings

Core Modifications

lib-common.php

  1. Modify COM_userMenu()
    • Allow display of the users profile image/avatar.
    • Slight redesign of templates this function uses in themes.

==== lib-plugins.php ==== 2)

  
- FIXME 

Additional Plugins

In addition to the reworking of the core to improve social networking capability these plugins interface to this functionality

==== Social Plugin ====3)

This plugin adds friends list and user messaging capabilities to the glfusion platform. The message que will also be used to send friends requests to users for approval

Notes

These features can be controlled site wide by the admin to limit what end users can do and not do if need be

Media Handling - Done

Proposed by Mark R. Evans

Currently, the Media Gallery plugin has a well tested and mature multi-media processing library. I propose we move this library into the glFusion core code where it can be leveraged by other plugins and by the core code itself.

This would require the upload.class.php class to be modified to use the new processing routines. Also, both FileMgmt and Forum would be enhanced to use the new core library.

The online configuration section for graphics would be enhanced to support this new functionality.

Image and Language Clean Up - Done

Proposed by Mark R. Evans & Eric Warren

There are a lot of outdated language files, image files that aren't used, etc. in glFusion that we would like to see cleaned up. Since we don't have dedicated language file maintainers at this point, we would like to move the non-english language files out of the release tarball and make it available as a separate download for those that are interested.

In the future when we do have some updated language files, we can re-visit including them in the default release tarball.

Forum Enhancements - Done

Proposed by Eric Warren & Mark R. Evans

Additional Bookmarks tab that collects all your bookmark starred threads. Sortable by title, date, poster, counts, etc. Also an additional tab called Latest Posts that is a configurable continuation of the forum center block on the home page. The idea is to give you a place to easily see the last n number of posts. More so than just in the homepage centerblock.

1) We should also probably think about redoing how user settings are stored in the db. Perhaps make it work some what like the site settings are stored so the settings section can by dynamic. [Don't go too far with this idea. I've been planning to move user settings into the config database. This way when you add a config setting that users can override, you just set a flag during the $c→add() call and that's it. It's taken care of for you.–Joe]
2) Mark im not sure where you are in the config and profile display plugin api improvements [trinity]
3) im starting to think joes proposed plugin and marks msging plugin would be a better option for this [trinity]
roadmap/glfusion110.txt · Last modified: 2014/05/24 20:20 (external edit)
 
Except where otherwise noted, content on this wiki is licensed under the following license: GNU Free Documentation License 1.3