this page is located in its own section, adding an entry to the menu ; error if the section assigned already exists
can be
activated ; the first time it is activated it runs the (optional) installation function
deactivated
deleted ; runs the (optional) desinstall function
can have dependencies with other plugins
can have its own configuration file
can have its own translation files
respects the directory structure
/plugins/PluginName
PluginName.php ; main plugin file, defining meta information about the plugin, optional hooks, optional widgets, etc
Controller.php ; if the plugin wants to display data it needs a controller
API.php ; if the plugin wants to publish an API easily using Piwik architecture, this is the place to go
A widget
is - generally - a small piece of data to display
is displayed within Piwik
can be included in the Piwik dashboard
is embeddable
can be included in any website or blog using the Iframe / javascript technique
can also be included in other personalized homepage (igoogle netvibes etc) by using the clearspring.com converter
by default, the widget is not displayed
can be included in the dashboard by the user
can be included in the plugin's output if the plugin developed decided to include it
has properties
a title
a description (optional)
is basically the output of a php function or method and can be added in the widgets list in the dashboard by calling the Piwik_AddWidget function
The homepage in piwik is the Dashboard that
is made of widgets
is customizable like netvibes/igoogle (add/remove widgets, move widgets in the dashboard)
has multiple columns, the widgets have different heights ; number of columns customizable
the number of columns is FIXED (even when resizing the window to a small width, the widgets should stay on the same line)
the dashboard should handle when the window is resized (eg for width=800 or width=1600 it should occupy 100% of the screen width)
handles the multiple columns widget (eg a widget can be 1 column or 2 columns or 3 columns)
The dashboard can be customized per user
each anonymous user can customize the dashboard freely as well
way to serialize/unserialize the dashboard state
the widgets in the dashboard are loaded via ajax. Simple way for the developer to "reload" a widget via a javascript function.
the dashboard should work in a non-javascript mode (the links to other categories should work even if the dashboard itself doesn't display the data loaded in ajax)
Menu hierarchy: 2 levels of depth
Dashboard
Visitors
Overview
Loyalty (frequency, visits per visitor / time spent by visitor, visitor recency)