Library & Compatibility
This is an open discussion with 71 replies, filed under Extensions.
Search
What about the possibility for people to “watch extensions” and see all compatibilities in a list, much like the forum-filter? :-)
What about adding compatibility information to the extensions about()
array? I suppose this could be parsed by the download section to offer information here on this site. Furthermore it would be possible to check for compatibility issues before running update.php
and prompt a note to the user which extensions need special care.
Nils: Great idea, I didn’t think about update.php
! But how will it find out if a certain extension won’t work? One could ask extension devs to try out the RCs but then you won’t recieve feedback from all of them…
Also I doubt it will be possible to parse that data in the downloads-section.
Also I doubt it will be possible to parse that data in the downloads-section.
Well, the raw code of any extension.driver.php
can be accessed on github. Shouldn’t it be possible to autodiscover these links and parse them?
By the way: does github have an API?
But how will it find out if a certain extension won’t work?
If this site would store the compatibility information fetched from github, the updater could phone home to check for incompatibilities and newer extension versions.
Symphony CMS Extensions Library
How about if we use GitHub to track extensions and compatibility. If someone adds or updates an extension, they add their extension to the list and submit a pull request to the extensions repository. The repository simply tracks a list of submodules. So if you want all the latest extensions, you simply clone this repository and update the submodules.
We can also have different branches, which contain different collections of extensions:
- Default
- Stable
- Development
- Experimental
- My Favourites
So each of us can have a list of favourites in our own branch repository that we can checkout for our projects.
Extensions Compatibility
I have started a test branch with an example list of extensions with compatibility information for each:
- Name (linked to GitHub repository)
- Description
- Author
- Version
- Release Date
- Compatibility
The compatibility can remain as n/a
until verified by the community that the extension is compatible.
I forgot: I was going to add a “Type” or “Category” column.
- Field
- Data Source
- API Extension
Or something similar. What should the categories be?
How about if we use GitHub to track extensions and compatibility. If someone adds or updates an extension, they add their extension to the list and submit a pull request to the extensions repository. The repository simply tracks a list of submodules. So if you want all the latest extensions, you simply clone this repository and update the submodules.
I’m not sure if I like this idea. I see some problems:
Setting up submodules, cloning and all this git related stuff may be easy for some of us. Personally, I’m a visual thinking person and I really hate that git is a command line powered monster. I learned the basics to push and pull things but man how often have I screwed up a repository due to problems while pushing to and pulling from GitHub. And GitHub is nothing more than a visualisation of what’s in a git repository - nothing more.
If we like to have a working compatibility tracking, I think the needed information should reside inside the extensions themselves. E. g. in the about()
array. A compatibility check should be done automatically by the system and it should offer an easy way to upgrade in the Symphony interface (at least a link to the download area).
Remember the green update icon in version 1.7? This was a nice an clean interface and it was tracking visually what was happening technically. That was the “Symphony way” for me which has been cut off when Symphony 2 was created. I know this was done to reduce clutter and to concentrate on the core features. But I thought these nice features (all those that were in the system wide drawer with calendar and search) will at least return as extensions. In my opinion these user interface candies should return for compatibility checkups.
If technically GitHub is used for this check-up: okay (I’m not sure if it’s a good idea to be dependent on GitHub in all areas though). But in the first place we need an idea of a good user experience. And for me git is not a good user experience if you are not a techie.
github does seem a bit over-engineered…
Really, wouldn’t this be pretty easy to with Symphony itself?
Alternatively, and I know this might be controversial…, but wouldn’t a third-party wiki work equally as well for documenting this kind of thing and other documentation? (I don’t doubt that you could build a decent wiki with Symphony but I personally think it would be better to focus on Symphony itself rather than building tools that could, arguably, be serviced better by other tools..) I guess an example of what I’m suggesting is Atlassian’s Confluence extension area.
Simon
I’m not keen on using Github for this at all — it’s a huge barrier to entry.
I think we need an integrated way of doing this, such that extensions define their compatible Symphony versions as Nils suggested in the about()
or similar.
During an upgrade Symphony would report which extensions are out of date and ask the developer whether they want to continue or not (knowing it could break things).
If there was some way of tracking the current version number and compatibility (by using the Github API for example) the upgrade process could also tell you which version you need or the latest version, with a direct link to Github.
I think there needs to be tighter integration between these things — having a big list on Github feels like a step backwards.
Well, this is in no way a suggestion that this should be the official means of dispersing this information. More of a stop-gap solution in the interim, and an aid to developers who are accustomed to using GitHub.
I think the consensus is that we all want extensions compatibility checking, and updating, available through the Symphony admin, similar to the way it used to be with Campfire Services. The same goes for the core application and for workspaces/themes.
GitHub is not a tool that will appeal universally, so I would much rather see a Symphony native solution in the long run. More than anything, I just want to keep the dialog open about how create a better user experience for Symphony users who are looking for extensions.
At this point, we’re still waiting for a well-documented extensions API. I’m wondering whether we need an about
method for the Extension class that provides more information than it currently does:
public function about() { return array( 'name' => 'Extension Name', 'version' => '1.0', 'release-date' => '2009-07-30', 'author' => array( 'name' => 'Author Name', 'website' => 'http://example.com/', 'email' => 'author@example.com' ) ); }
Some extensions still contain a description
variable, which seems to have been deprecated at some point. Do we also need variables for compatibility
and type
? If all extensions are to have a GitHub repository, there should also be a source
variable that points to this repository.
So, I figured out a way to modify the content.systemextensions.php
file to output a list with all the necessary information for a comprehensive list. But, since the $about
array was created pre-GitHub, the array seems incomplete to me, because it is missing a link to the source on GitHub.
If I take code from the symphony/content/content.systemextensions.php
file and modify the list view to output this instead:
foreach($extensions as $name => $about){ ## Setup each cell $github = $about['name']; if(isset($about['github'])) $github = Widget::Anchor($about['name'], $about['github']); $td1 = Widget::TableData($github); $td2 = Widget::TableData($about['description']); $td3 = Widget::TableData($about['version']); $td4 = Widget::TableData($about['release-date']); $link = $about['author']['name']; if(isset($about['author']['website'])) $link = Widget::Anchor($about['author']['name'], General::validateURL($about['author']['website'])); elseif(isset($about['author']['email'])) $link = Widget::Anchor($about['author']['name'], 'mailto:' . $about['author']['email']); $td5 = Widget::TableData($link); ## Add a row to the body array, assigning each cell to the row $aTableBody[] = Widget::TableRow(array($td1, $td2, $td3, $td4, $td5), NULL); }
Then, I am able to create a table listing of all the extensions.
Name | Description | Version | Release Date | Author |
---|---|---|---|---|
Activity Log | 1.0.1 | 2009-05-19 | Rowan Lewis | |
Additional Page Types | Adds JSON and CSV as page output types | 0.1 | 2009-03-02 | Max Wheeler |
Admin CSS Override | 1.0 | 2009-05-31 | Michael Eichelsdoerfer | |
Advanced Symphony Database Connector (ASDC) | 1.2 | 2009-01-21 | Alistair Kearney | |
Akismet Spam Filtering | Allows you to add a spam filter to your front end saving events. | 1.3 | 2009-02-08 | Alistair Kearney |
Breadcrumb | 1.0 | 2009-01-02 | Alistair Kearney | |
Browse DevKit | 1.0.1 | 2009-05-20 | Rowan Lewis | |
CacheLite | Allows for simple frontend caching using the CacheLite library. | 0.1.5 | 2009-07-29 | Max Wheeler |
Calendar Overlay | Converts date fields into calendars. | 1.0.3 | 2009-04-02 | Rowan Lewis |
Can Of Spam | Protect your forms against spam with a hidden field. | 1.003 | 2009-02-18 | Rowan Lewis |
Clean URL Params | Allows you to use /key:value/ instead of ?key=value in URLs. | 1.0.0 | 2009-03-24 | Rowan Lewis |
Collapse Sectionfields | Add a link to collapse all fields in section edit pages, making field ordering a lot easier. | 1.0.1 | 2009-07-11 | Carsten de Vries |
Content Type Mappings | 1.3 | 2009-04-30 | Symphony Team | |
Cookie Monster | 1.1 | 2008-05-16 | Symphony Team | |
Data Source: Gravatar | 1.1 | 2008-10-21 | Nick Dunn | |
Data Source: Server Headers | 1.1 | 2008-08-19 | Alistair Kearney | |
Data Source Cache | Force refresh of data source caches | 0.1 | 2009-02-23 | Nick Dunn |
Debug DevKit | 1.0.3 | 2009-07-24 | Rowan Lewis | |
Deutsche Übersetzung | 1.0 | 2009-01-23 | Nils Hörrmann | |
Dynamic Event Redirect | 0.0.5 | 2009-04-01 | Max Wheeler | |
Entity Diagram | 1.3 | 2009-07-01 | Nick Dunn | |
EventEx: multiple section form submission | 1.01 | 2009-01-21 | Your Hero Paul | |
Export Ensemble | 1.9 | 2009-07-28 | Alistair Kearney | |
Field: Advanced Taglist | 1.0 | 2009-01-21 | Alistair Kearney | |
Field: Advanced Upload | An enhanced upload field with image preview. | 1.004 | 2009-04-23 | Rowan Lewis |
Field: Bi Link | A bi-directional linking system for Symphony. | 1.0.11 | 2009-04-28 | Rowan Lewis |
Field: Curl Input | A field that validates and tests URLs with curl. | 1.0.4 | 2009-03-30 | Rowan Lewis |
Field: Date Tag List | A new way of storing dates, merging a tag list with a date field. | 1.002 | 2008-12-05 | Rowan Lewis |
Field: Enhanced Tag List | 1.2 | 2009-06-01 | craig zheng | |
Field: Expression | Define simple expressions and test values against them in a data source. | 1.0.1 | 2009-07-03 | Rowan Lewis |
Field: Filter | Allows to filter datasource and publishing with expressions and parameters. | 1.0 | 2009-03-12 | Marcin Konicki |
Field: Flex Date | A field that stores an expiry date allowing quick and easy manipulation. | 1.004 | 2009-03-19 | Rowan Lewis |
Field: Hash | 1.0 | 2008-04-13 | Symphony Team | |
Field: Increment Number | 1.0 | 2008-12-19 | Nick Dunn | |
Field: Language | Adds browser-languages parameter to list of all parameters available for data-sources and XSLT to use. Enables language field. | 1.0 | 2009-03-04 | Marcin Konicki |
Field: Map Location | 1.0 | 2008-02-01 | Symphony Team | |
Field: Mediathek | 1.1.3 | 2009-03-13 | Nils Hörrmann | |
Field: Number | 1.4 | 2008-05-14 | Symphony Team | |
Field: Numeric Grouping | Group entries on output every nth entry. | 1.0.2 | 2009-03-30 | Rowan Lewis |
Field: Page Select Box | 1.2 | 2008-12-23 | Symphony Team | |
Field: Publish Notes | Lets you add arbitary HTML to the Publish screen. | 0.1.0 | 2009-07-29 | Max Wheeler |
Field: Reference Link | 1.1 | 2009-02-13 | craig zheng | |
Field: Reflection | Allows you to automatically combine multiple fields into one. | 1.0.6 | 2009-04-23 | Rowan Lewis |
Field: Repeating Date | A field that generates, stores and filters repeating dates. | 1.0.6 | 2009-05-15 | Rowan Lewis |
Field: Select Box Link | 1.10 | 2009-07-27 | Symphony Team | |
Field: Signed File Upload | 1.02 | 2009-07-31 | Tony Arnold | |
Field: Sub Section | Edit linked sections within a parent section. | 1.009 | 2009-01-29 | Rowan Lewis |
Field: Text Box | An enhanced text input field. | 2.0.6 | 2009-07-24 | Rowan Lewis |
Field: Unique File Upload | Upload files with unique names, using the UNIX timestamp. | 1.0 | 2009-05-06 | Michael Eichelsdoerfer |
Field: Unique Text Input | 1.3 | 2008-12-12 | Symphony Team | |
Field: XML | Textarea field that only accepts valid XML | 1.0 | 2009-04-29 | Alistair Kearney |
Field: XML Select Box | 0.1 | 2009-07-22 | Nick Dunn | |
File Manager | Upload, Edit and manage files and folders. | 0.8.2 | 2008-01-31 | Alistair Kearney |
Filter: Email Template | 1.0.13 | 2008-04-01 | Rowan Lewis | |
Filter: No Editing of Entries | Allows you to prevent users from editing entries from front end forms. | 1.0 | 2009-06-12 | Nils Werner |
Firebug Profiler | View Symphony profile and debug information in Firebug. | 1.1 | 2009-05-05 | Nick Dunn |
Formatter: Rich Text (TinyMCE) | 1.01 | 2009-07-23 | Symphony Team | |
Formatter: Textile Plus | Format text using Textile with some extra features. | 1.0.2 | 2009-05-15 | Rowan Lewis |
Formatter: widgEditor | 0.1 | 2009-01-21 | Max Wheeler | |
Front End Authentication | 1.0 | 2008-09-24 | Symphony Team | |
Frontend Member Manager | Allows you to manage a member driven community. | 1.008 | 2009-03-18 | Rowan Lewis |
Global Parameter Loader | Allows you to add parameters, PHP evaluated or not, to Symphony’s parameter pool. | 1.1.7 | 2009-05-24 | Carsten de Vries |
Global Resource Loader | Allows you to select datasources and events to be used on all pages. | 1.001 | 2009-01-08 | Rowan Lewis |
Google Custom Search Engine | Use Google AJAX Search API as data source in Symphony. | 2.3 | 2009-06-25 | Marcin Konicki |
HTML Formatter | Allows HTML to be used as input, safely. | 2.0.1 | 2009-06-26 | Rowan Lewis |
Import Manager | Import data from XML documents directly into Symphony. | 1.002 | 2009-01-06 | Rowan Lewis |
Improved Page Resolve | Pass parameters to index if none of them selects valid page. | 1.0 | 2009-03-02 | Marcin Konicki |
IP Location Lookup | 1.0 | 2008-05-04 | Alistair Kearney | |
JIT Image Manipulation | 1.02 | 2009-03-06 | Alistair Kearney | |
jQuery Date Picker | 1.1 | 2009-01-20 | Max Wheeler | |
Logs DevKit | 1.0.1 | 2009-05-20 | Rowan Lewis | |
MailChimp | Supports subscribing a new address, first name, last name to your MailChimp account. | 1.0 | 2009-05-8 | Mark Lewis |
Maintenance Mode | 1.1 | 2009-01-27 | Alistair Kearney | |
Markdown and SmartyPants Text Formatter | Includes 3 Text Formatters: PHP Markdown, PHP Markdown Extra and PHP Markdown Extra plus SmartyPants. This Text-to-HTML conversion tool is developed by Michel Fortin. | 1.8 | 2007-12-06 | Alistair Kearney |
markItUp! | Add some basic text editor buttons to every textarea that is using one of supported formatters. | 1.0 | 2009-03-09 | Marcin Konicki |
Multiselect to Checkboxes | Convert all multiselect fields into checkboxes | 1.0 | 2009-05-17 | Fazal Khan |
Nested Cats | 1.0 | 2009-03-28 | Andrey Lubinov | |
New Visiter | Use to differentiate between new and repeat visitors. | 1.0 | 2009-04-12 | Mark Lewis |
Order Entries | 1.6 | 2009-06-28 | Nick Dunn | |
Page Fields | 1.0.3 | 2009-07-05 | Simon Keary | |
Pages Editor - Minimal | 1.0 | 2009-04-30 | Alistair Kearney | |
Page Templates | Create pages from predefined templates. | 0.65 | 2009-06-13 | craig zheng |
PayPal Payments | Allows you to process and track Website Payments Standard transactions from PayPal. | 1.0 | 2009-07-10 | Max Wheeler |
Ping-o-Matic | 1.1 | 2009-06-11 | Symphony Team | |
Populate Entry | Choose an existing entry and with its existing values create a new entry. | 1.0.0 | 2009-07-23 | Carsten de Vries |
Profile DevKit | 1.0.1 | 2009-05-20 | Rowan Lewis | |
Publish Filtering | Add a filter box to publish index pages. | 1.2 | 2009-07-14 | Nick Dunn |
reCAPTCHA | This is an event that uses the reCAPTCHA service to help prevent spam. | 1.0 | 2008-05-07 | Symphony Team |
Section Schemas | 1.2 | 2009-04-16 | Nick Dunn | |
Select Box Filter | Automatically add a filter to select boxes. | 1.0.0 | 2009-03-23 | Rowan Lewis |
SEO Manager | Manage page titles, descriptions, keywords and even headers. | 1.002 | 2008-12-11 | Rowan Lewis |
Session Monster | 1.0 | 2008-05-12 | Symphony Team | |
Shrimp | Intelligent short URL redirection. | 1.0.0 | 2009-07-01 | Max Wheeler |
Templated Text Formatters | Allows to chain text formatters into one text formatter and/or create new text formatters based on installed templates. For example You can chain Markdown and BBCode text formatters, so text will be formatted by Markdown first and than by BBCode. | 1.5 | 2009-06-25 | Marcin Konicki |
Textformatter Labels | 1.0.1 | 2009-06-25 | Michael Eichelsdoerfer | |
Translation Manager | Import and export translation files, check state of translations. | 0.9 | 2008-12-24 | Marcin Konicki |
Typogrify Text Formatters | Format entries using Typogrify formatter | 1.0.1 | 2008-03-23 | Tony Arnold |
Uploadify | Add an upload progress bar to file uploads. | 1.000 | 2009-02-26 | Nick Dunn |
Vimeo Videos | Cache a video from Vimeo. | 0.1 | 2009-02-23 | Nick Dunn |
Yahoo! Search BOSS | Use Yahoo! Search BOSS API as data source in Symphony. | 1.3 | 2009-06-25 | Marcin Konicki |
If all extensions developers could include the description
and github
indices to the $about
array, we could very easily have a complete list of extensions with links to their respective GitHub repositories.
public function about() { return array( 'name' => 'Type: Extension Name', 'github' => 'http://github.com/author/repository/tree/master', 'version' => '1.0', 'release-date' => '2009-07-31', 'author' => array( 'name' => 'Author Name', 'website' => 'http://example.com/', 'email' => 'author@example.com' ), 'description' => 'A brief description of this extension.', 'requirements' => 'Symphony 2.0.5', ); }
While we’re talking about it: what about splitting up name and type?
Concerning the requirements: what about extensions that do work in all versions but one, e. g. Symphony 2.0 required but not working in 2.0.2?
The Unofficial Symphony CMS Extensions Library
I’ve been fiddling around with these submodules for a bit, just testing how well the download works. I had encountered some issues before because I hadn’t properly updated the .gitmodules
file, but now everything is working smoothly. It’s beautiful to watch all 107 extensions download without a hitch, all with a couple commands:
git clone git://github.com/bauhouse/extensions.git git submodule update --init
@Nils, good points. It would be much more preferable to have the name and type split. Plus, for requirements, some extensions have dependencies on other extensions or libraries, and these should be indicated here. The dependencies might need to be an array of GitHub tree hashes.
Another issue is that there can be multiple versions of the same extension. Someone can fork, for example, the Content Mappings Extension. Does this become a new version? Should it be renamed? It could get really confusing, really fast. I think we need some guidelines or policies so this business of creating extensions doesn’t go off the rails.
- Naming conventions
- Requirements
- Best practices
Which is basically saying, is there something we can do to help get an extensions API documented?
@bauhouse Wow! Thanks for pulling that together!
@bauhouse and others… This thread will be a tremendous help as we put together the new Extensions area. Good work!
Create an account or sign in to comment.
I mentioned that
Would it be possible to add an area for extension developers to note compatibility of their extensions with each release in the list of downloads?
Update: Here’s my Unofficial Symphony CMS Extensions Library