Thursday, January 22, 2009

Remove unwanted tabs from pages

Description

Some modules add tabs to pages that are not needed for general users, or not needed at all. You may wish to link to the page in a different way, as some users don't understand that they can click on the tab above a node.

There is currently no way to alter the hook_menu() generated tabs from code, so this function will find and strip out a tab based on its name.

Step 1 of 2

Locate your theme's template.php file. If one doesn't exist create an empty one. This is where you can place customisation PHP code.

Step 2 of 2

Custom functions placed in the themes template.php file should begin with the theme name. In the code snippet below replace "yourthemename" with the actual name of your theme, such as "bluemarine".

You may already have a '_phptemplate_variables' function defined depending on what theme you are using, if so do not include the function again from the snippet below.

function _phptemplate_variables($hook, $vars = array()) {

if(
$hook == 'page') {
yourthemename_removetab('address book', $vars);
// add additional lines here to remove other tabs
}

return
$vars;
}

function
yourthemename_removetab($label, &$vars) {
$tabs = explode("\n", $vars['tabs']);
$vars['tabs'] = '';

foreach(
$tabs as $tab) {
if(
strpos($tab, '>' . $label . '<') === FALSE) {
$vars['tabs'] .= $tab . "\n";
}
}
}
?>

The tab removal work is done in the yourthemename_removetab() function, pass in a plain text tab label, along with the PHPTemplate variables, and the function will remove the tab.

In the above example snippet the 'address book' tab added by the eCommerce package is removed from the users profile page.

Notes

  • Call yourthemename_removetab('tab name', $vars); for each tab you wish to remove.
  • No other modules need to be installed to use this.

Wednesday, January 21, 2009

symfony 1.2.2 - Doctrine service release

The symfony team sat together on a bugfixing day on Tuesday, resulting in over 40 closed tickets for 1.2.2. Pretty much for a bug-fix release. So wait no more, symfony 1.2.2 is now available. The main bugfixes included in it take care of issues in the sfDoctrinePlugin and its admin generator. We also include the fresh Doctrine 1.0.6 release, so you are getting the newest and best support for your favorite ORM.

The other batch of bug fixes takes care of Form framework related issues, like file uploads or presets, and some testing facilities were fixed.

If you use neither Doctrine nor the Form framework, a few performance improvements which were put into symfony for 1.2.2 might be of interest for you. Especially Ticket #5356 could be of interest for users with many small files cached. Feel free to run the tests on your box and append your results to the ticket.

The whole list of closed tickets can be found in the Trac Roadmap for 1.2.2 or the Changelog file

Upgrade

Please upgrade your existing projects by updating the reference to the 1.2.2 subversion tag or by running the PEAR upgrade command:

$ pear upgrade symfony/symfony-1.2.2

If you use the 1.2 branch from our SVN repository, just run the svn update command to upgrade your project.

Last but not least, don't forget to clear your cache by running for doctrine:

$ php symfony doctrine:build-model
$ php symfony doctrine:build-forms
$ php symfony doctrine:build-filters
$ php symfony cache:clear

or when using propel:

$ php symfony propel:build-model
$ php symfony propel:build-forms
$ php symfony propel:build-filters
$ php symfony cache:clear

and enjoy your shiny new symfony 1.2.2!

symfony 1.3

As a side task, I created the symfony 1.3 branch, which will now be the main development stream. Kris Wallsmith will be taking over the responsibility for this branch, I will try to keep 1.2 in a good shape.

Blog to it - The social blog directory

Blog to it is a social blog directory developed using 100% contrib modules. Well, there were a few tweaks to one module and a few more tweaks in the theme. This case study has been written to give an insight into how and why Blog to it was developed.

What is it?

"Do you have a blog that you would like to share with others? Do you enjoy reading blogs but don’t know where to effectively look for them? If you’re in this predicament, drop by Blog.to.it and take a look at what they have for you to enjoy.

Blog.to.it is a website that allows users to import all of their blog posts via RSS or start a new blog directly on their site. The site has eight different blog categories including technology, business, science, gaming, lifestyle, entertainment, sports, and other. Whatever you want to write or read about is easy to find, just look through the categories that interest you most.

Once posts are in they can be voted on, commented on, and sorted by rating, category, or date. Blog.to.it hopes to be a great place to find new blogs to read. The site merges loads of features from current sites and brings them to a new audience, the personal blogger. There are many blogs world wide and it is often hard to get noticed between all the corporate blogs out there, this site is trying to help bloggers come together in a space that’s just for them."
From Killer Startups

Features

  • Hosted user blogs - Just like on Blogger or Wordpress a user can start blogging on Blog to it, this isn't a key feature but was more or less there, so why not use it.
  • RSS user blog import - This is the key driver of the site by allowing users to add their existing blog posts automatically to Blog to it.
  • Blog post commenting - It was never fully decided if this should be on the site or not, should comments be on Blog to it or on the original blog. Maybe one to work on?
  • Blog post rating / voting - This also another key feature. The main way to view posts is by number of votes. (Digg like)
  • Browse posts by rating
  • Browse posts by date
  • Browse posts by category
  • Browse posts by user / blog
  • Browse blogs by tag
  • Personal and site wide Twitter updates - This is a really great feature to have. It both helps the user integrate more with the site, and is a great marketing tool. A lot of the traffic is coming from Twitter and Twitter aggregation.

How was it done?

Modules

Blog to it screenshot
The whole site was developed using Drupal 6 and then moved to Acquia Drupal once live. It is heavily based around the core blog module because user blogs are created in the default Drupal way, and RSS imports are imported into the Blog content type.

By using the DrupalMU Helper module which is part of the Drupal MU install profile it helped turn the core blog module into a multi-user blogging system and gives vital functions that were used when creating views and the theme.

One of the other key modules was the FeedAPI module which is used to import an external blog into the blog content type via RSS feed. The Content Profile was used to add the RSS feed URL field to the user's profile. Simple feed was also looked into as a way of importing feeds, but it didn't seem to attach the imported nodes to the user who setup the import. This may of been a development error rather than a fault with the module, but FeedAPI was suggested a better module, and it worked.

Posts can be voted on using the VotingAPI and Plus1 modules. Voting API was an obvious choice when creating a site that requires voting, but which module to use with Voting API was a harder choice. Drigg seems the most advanced to allow +1 and -1 voting, but this was not available for Drupal 6 (it was tested once the first 6 release and seemed too specific), so after spending a few hours installing, testing and uninstalling Plus1 seemed to offer what was needed for the Blog to it use case.

This site is not very complex, but works well. The uptake has been good and by adding Twitter integration this helps with marketing. The Twitter module allows each user to import their Twitter posts, and announce their new posts on Twitter. It also allows the announcement of all new posts via Triggers and Actions on http://twitter.com/blogtoitnew.

Views also plays a big part in this site, much like it does in other sites. It allows many pages to be developed showing the posts in different ways. There is one main view for the site which creates three pages for each category.

Theming

The theme was based upon Raincity's Basic theme, this really helped speed up development. There was very little special development in the theme. The only exciting aspect is the use of the Drupal MU helper functions. The function returns the UID of the user whose blog or profile is being viewed. This allowed custom theming for user pages such as hiding the Blog to it logo and displaying the site name.

Infrastructure

The site was developed on a budget VPS from VPS Empire who has now merged with VA Serv. After launch and after a lot of hunting a hosting partnership was found with Castlegem, so far the site has been running very well, and Castlegem were great at getting the server setup, including custom nameservers, DNS and backup.

What next?

Blog to it screenshot
Blog to it has currently been released as an Alpha version so many of the bugs can be ironed out. Development will continue until the beta version is ready early 2009.

So far very few bugs have been found, the hardest aspect seems to be perfecting the usability. For example, should anonymous users be able to vote and comment? what should be displayed on each page? what is a "top post"?

Also because there are so many posts being imported cron needs to run every 2 mins. This means that on each cron run there is only 1-2 posts and twitter updates being imported, where as if cron was run every hour there many be 50+ posts and twitter updates being imported. This also helps the site stay very up to date, but puts a big strain on the server

There are many ideas of how to move the site and project forward, and by using an array of contrib and custom modules it is planned to add more social features to the site. Such as friends and / or followers, what posts your friends have added, other people who have voted on this post. It is also planned to launch a more feature rich profile page displaying a user's friends and what posts they have voted on.

Please head over to Blog to it, register, add your blog and vote up posts you like.

Tuesday, January 20, 2009

A week of symfony #106 (5-11 january 2009)

A new year means new symfony versions and therefore, this week symfony developers started committing changesets to 1.3 branch. In addition, the winner of the Jobeet design contest was announced and symfony 1.2.2 was released.
Development mailing list
Discussions about symfony 1.2 admin generator partial feeds and sfForm vs Factories.yml
Development highlights
r14468, r14469: [1.0, 1.1] backported fix from #2240 to 1.0 and 1.1 after having it tested in 1.2 version
r14481: [1.1] fixed autoloading for PHP 5.1.2
r14483, r14484: [1.1, 1.2] fixed unfinished ob_start in sfValidatorFile
r14485: [1.2] fixed form and view_cache tester are not overridable
r14486: [1.2] fixed sfTesterUser inability to test attribute for namespaces
r14507: [1.2] fixed uppercase POST/GET are not XHTML valid
r14511: [1.2] fixed generate:app and escaping-strategy
r14515: [1.2] silenced possible warning
r14516: [1.2] fixed multiple selector chaining in sfDomCssSelector.class
r14518: [1.2] added cast of generate:app escaping strategy to boolean
r14523: [1.2] publish-assets now canonicalizes pathes before creating the links, thus allowing "\.." and "\."
r14561: [1.3] Created symfony 1.3 doc branch from symfony 1.2.2
Milestone 1.2.2 completed
r14591: [1.3] implemented ArrayAccess interface for sfUser attributes
r14592: [1.3] implemented ArrayAccess interface for sfRequest parameters
r14593: [1.3] added accessor for request content
r14594: [1.3] added accessor for request options + added to web debug bar
r14596: [1.3] made web asset (js, css, image) paths customizable
r14599: [1.3] tweaked cache reload url in web debug bar (to maintain environment)
r14600: [1.3] added accessor for logger options + set dispatcher
r14601: [1.3] added php error handling when using web debug logger (partially reverted)
r14602: [1.3] added better logging for sfBasicSecurityFilter
r14619: [1.3] added upgrade structure for 1.3
sfDoctrinePlugin:
r14466: [1.2] fixed issue with sfDoctrineFormFilter::processValues
r14470: [1.2] corrected fix for resetting filters
r14472: [1.2] fixed issue where i18n doesn't fall back to default culture
r14498: [1.2] adding coverage for ticket
r14499: [1.2] form filters now perform a stricter check
r14500: [1.2] fixed issue where filter functions for fields are not camelized
r14501: [1.2] fixed sfDoctrineRoute to return object instead of null
r14510: [1.2] fixed lingering uppercase method attribute
r14512: [1.2] admin generator resets default filter values correctly
r14550: [1.2] fixed error when uploading files for embedded forms
r14597: [1.3] fixed ability to disable admin generator css by setting false
sfPropelPlugin:
r14470: [1.2] corrected fix for resetting filters
r14480: [1.2] updated bg translations of the admin generator
r14499: [1.2] form filters now perform a stricter check
r14509: [1.2] fixed the way propel handles batch deletions to notify deletion behaviours
r14512: [1.2] admin generator resets default filter values correctly
r14597: [1.3] fixed ability to disable admin generator css by setting false
Updated dwhittle branch
...and many other changes
Development digest: 170 changesets, 39 defects created, 54 defects closed, 6 enhancements created, 14 enhancements closed, 20 documentation defects created, 31 documentation defects closed and 23 documentation edits.
Book and documentation
Updated How to use FCK editor page
Published spanish, italian and vietnamese translations of Jobeet tutorial
Published some vietnamese translations of cookbook tutorials: Quản lý giỏ hàng với plugin sfShoppingCart, Thay đổi cấu trúc thư mục mặc định and Dùng Doctrine để lấy dữ liệu
Wiki
New Job Postings:
Symfony Developer for various plugins and projects - freelance, based in Berlin or Leipzig, Germany - Contact: info [at] mahono [dot] com
Symfony Developer @ Cortica - half or full-time based in MATAM, Haifa (Israel) - Contact: koby [at] cortica [dot] com
New developers for hire:
Boxlight Media Ltd: London based new media agency specializing in enterprise web application development and e-mail marketing strategies who are actively using symfony as their preferred and recommended application development framework.
New symfony blogger:
Lapin Blanc (feed)
gestadieu.blogspot.com (feed)
Plugins
New plugins
sfTidyPlugin: provides automated code repair (ex. users input from TinyMCE or FCKEditor) and produces valid XHTML or XML code. Plugin requires PHP Tidy extension.
sfMicroBlogPlugin: provides a tool box to manipulate microbloging sites. Currently twitter, ping.fm, identi.ca or any other laconi.ca are supported.
sfCookieSessionStoragePlugin: session data is directly stored in an encrypted cookie on the client side (no persistent session on the server side).
sfScriptaculousPlugin: additional JavaScript helpers formely found in JavaScriptHelper.php
sfSocialPlugin: adds social network features for your users: contacts, messages, status, etc.
sfWebRPCPlugin: allows ultra easy creation of RPC servers with symfony
Updated plugins
sfDatagridPlugin: fix the exception when the date filter value cannot be converted
DbFinderPlugin: fixed wrong exception text
sfSmartyPlugin: updated require_once to work with PEAR installed Symfony or Symfony installed as an external, updated to allow Smarty from PEAR installations
i18nTranslatePlugin: initial import
sfDoctrineUserPlugin: added a branch for 1.2
sfExtjsThemePlugin: added in ability to set actions
sfPhpDocPlugin: changed base class of sfGeneratePhpDocTask to sfBaseTask
sfImageTransformPlugin: fixed role attribute in package.xml
sfOpmlPlugin: fixed sfOpml::fromArray()
sfDoctrineActAsTaggablePlugin: various additional fixes for symfony 1.2 upgrade
tsTitlePlugin: added support for cache, fixed tsTitleTest
ckWebServicePlugin: updated README, created branch for sf1.1 version, added folder for 1.2 branch,
swToolboxPlugin: updated sendMail method
ysfYUIPlugin: changed calls to sfLoader::loadHelpers() to sfApplicationConfiguration::loadHelpers()
dwSwfChartPlugin: fixed issue with relative url root
sfDoctrineAdminGeneratorWithShowPlugin: update from official theme
sfEasyDebugPlugin: modification to allow to work when stack is not complete
sfFormExtraPlugin: fixed Autocomplete getStyleSheets() returns incorrect files, updated sfFormExtraPlugin package.xml
Some new symfony powered websites
TrustedReviews: UK's premier source of technology news and reviews
Kann nicht Auto fahren: (german) complain about bad car drivers and emberass them by adding photos and videos
ListasEmCaixas: (portuguese) social list making application
They talked about us
Functional Testing a Secured Module
How to Embed Forms in Symfony 1.2 Admin Generator Part 2
Formation symfony 1.2 + Doctrine le 21 janvier 2009
Offline Version of Symfony 1.2 Book + Jobeet Tutorial
Tutorial Jobeet completo e in Italiano
Come trovare l’ultima query eseguita da propel
Using doctrine with symfony 1.2 (2/4) - inheritance
Symfony 1.2.2 available at ServerGrove
Se publica Symfony 1.2.2
Add reCaptcha widgets to symfony forms
Invoicr (former CS-4U), what's new?
Twitto - A web framework in a twit
Jobeet se convertirá en un libro
Twitto: PHP Framework in 140 Zeichen
Twitto, el framework PHP más pequeño
German Symfony trainings
Zend Framework o Symfony
Choosing a PHP framework to work with
Symfony: Paginacja przy własnych/nietypowych warunkach SQL
More: Synchronization using phing
The bittersweet rewrite
Symfony 1.2 sous Ubuntu
Astuce symfony : changer le chemin du cookie de session de symfony
404ページをカスタマイズする場合の注意
アクションキャッシュを使用する場合にテンプレートではなくアクションから直接出力しているとキャッシュされずにページが真っ白に
Web framework
簡単にsymfonyをインストールするスクリプト
Optymalizacje: sfPropelPager::getResults()
[symfony] javascript/cssのロード

Monday, January 19, 2009

Call the expert: Using a custom version of Doctrine

Now that the release of Doctrine 1.1 right around the corner their has been a bit of noise about how users can use 1.1 instead of the default bundled 1.0.
With sfDoctrinePlugin it is easy to swap out the version of Doctrine used by simply changing one configuration value.
Below you will find an example of how you can configure sfDoctrinePlugin to use a different version of Doctrine, for example 1.1.
First we need to check out the version of Doctrine we want to use into lib/vendor/doctrine:$ cd lib/vendor
$ svn co http://svn.doctrine-project.org/branches/1.1/lib doctrine
Now we can configure the sfDoctrinePlugin to use that version of Doctrine instead of the one that comes bundled with the plugin. In your ProjectConfiguration::setup() method you need to change the value of the sfDoctrinePlugin_doctrine_lib_path with sfConfig, like the following:public function setup()
{
sfConfig::set('sfDoctrinePlugin_doctrine_lib_path', sfConfig::get('sf_lib_dir') . '/vendor/doctrine/Doctrine.php');
}
Now you can enjoy the great features of Doctrine 1.1 without too much work. You can check out what is new in Doctrine 1.1 by reading the upgrade file.

The “Practical symfony” book is now on sale

Two years after the publishing of “The Definitive Guide to symfony” book, I am happy to announce that the Jobeet tutorial is now available as a printed book: “Practical symfony“.

During the last two weeks, I have updated and enhanced the Jobeet tutorial based on the feedback from the community. I have also updated the screenshots to reflect the new Jobeet design. The “Practical symfony” book is the printed version of this tutorial and as such covers the symfony 1.2 version.

The book is available in two editions: Propel and Doctrine. You can already buy the Propel version. Jon is working on the Doctrine version and the book will be available very soon.

The book content is the same as the one available on the website. The only differences are the table of contents and the day 24 cross-references, where all links have been converted to page references.

If you want to read the Jobeet tutorial comfortably in the train or in your bed, or if you simply want to support the symfony project documentation effort, you can buy the book on lulu.com.

A week of symfony #107 (12->18 january 2009)

Symfony development continues at full pace with more than 230 changesets in just one week. Symfony 1.3 was the most updated version, including its Propel and Doctrine plugins. In addition, Jobeet tutorial was highly updated, 10 new plugins were published and tens of post about symfony were published around the world.

Development mailing list

Development highlights

  • r14660: [1.3] updated doctrine svn:externals to version 1.1
  • r14684: [1.3] made autoloaders case insensitive
  • r14688: [1.3] updated unit test bootstrap script to check for an active configuration (i.e. if called from a task)
  • r14689: [1.2, 1.3] fixed simple autoload unregister not changing registered flag
  • r14691: [1.3] added reloadAutoload method to base task
  • r14692: [1.3] updated generate:project task to generate a relative path to the core autoloader when symfony is nested within the project directory
  • r14697: [1.3] added array access + call to sfContext
  • r14698: [1.3] added $request to preExecute() and postExecute()
  • r14699: [1.3] added parsing of request content as put parameters
  • r14700: [1.3] added sfMailer + sfSwiftPlugin + tests
  • r14701: [1.3] updated core autoload
  • r14730: [1.1, 1.2, 1.3] fixed discrepancy in embedFormForEach function signature
  • r14776: [1.3] added registration of autoloadAgain when in debug mode without registering different methods on the same autoload class
  • r14829, r14830, r14831: [1.1, 1.2, 1.3] fixed notice in sfPearRestPlugin
  • r14852: [1.1, 1.2, 1.3] fixed sfForm::offsetUnset doesn’t properly unset private members
  • sfDoctrinePlugin:
    • r14698: [1.3] added $request to preExecute() and postExecute()
    • r14702, r14703: [1.3] updated test fixtures
    • r14779, r14780: [1.2, 1.3] fixes regression in sfDoctrinePager and adds additional coverage to tests
    • r14782: [1.2, 1.3] adding coverage for unique columns
    • r14783: [1.2, 1.3] Fixes _list_td_tabular.php using wrong classname
    • r14784: [1.2, 1.3] Fixes renderFormTag() to allow custom method
    • r14793: [1.2, 1.3] Fixes regression with sfDoctrinePager and the use of setQuery()
    • r14815: [1.2, 1.3] Fixes issue with wrong option being passed to insert sql task
    • r14816: [1.2, 1.3] Fixes bug where 404 is not thrown when no records are found
  • sfPropelPlugin:
    • r14691: [1.3] added reloadAutoload method to base task
    • r14698: [1.3] added $request to preExecute() and postExecute()
    • r14728: [1.1, 1.2, 1.3] fixed foreign keys are assumed with column name “ID” in auto generation of forms
    • r14731: [1.3] moved contents of config.php into configuration class
    • r14732: [1.3] removed unnecessary conditional around inclusion of behavior file
    • r14733: [1.3] added IS_I18N peer constant
    • r14770: [1.3] fixed coding standards in inheritance objects
    • r14783: [1.2, 1.3] Fixes _list_td_tabular.php using wrong classname
    • r14784: [1.2, 1.3] Fixes renderFormTag() to allow custom method
    • r14788: [1.3] added isToString column attribute to object builder, generation of __toString() magic method
  • Updated dwhittle branch: added array access + call to sfContext, removed sfContext::getMailer in favor of call, added $request to preExecute() and postExecute(), added parsing of request content as put parameters, added sfMailer base class, added initial commit of sfSwiftPlugin, updated doctrine externals to 1.1 for symfony 1.3, cleaned up doctrine test
  • …and many other changes

Development digest: 237 changesets, 44 defects created, 26 defects closed, 6 enhancements created, 3 enhancements closed, 8 documentation defects created, 18 documentation defects closed and 27 documentation edits.

Book and documentation

Wiki

Plugins

  • New plugins
    • sfGenExtraPlugin: adds extra components to work with Symfony’s generated forms (3 way sort on admin generated forms, filter on a range of numbers instead of exact values, validate a field against a constant value)
    • sfGuardHardenedPlugin: hardened version of sfGuard to avoid dictionaries attacks and sniffing tools
    • sfCliPlugin: allows to execute the symfony commands on a web console
    • sfWorkerPlugin: manage worker from symfony requests. Workers as in external process which may be longer than a single HTTP request
    • swDoctrineAssetsLibraryPlugin: a Doctrine version of the sfAssetsLibraryPlugin
    • QRcodePlugin: generates QR code image
    • sfEventDeferrerPlugin: provides the mechanisme to defer sfEvent triggering
    • sfUnobstrusiveWidgetPlugin: packages useful widgets for symfony
    • sfMultisiteThemePlugin: allows a site owner to have one or more domains pointing to one Symfony project, but allows them to set up different layouts(themes) for each URL. Allowing the same content on each site
    • sfEditTemplatePlugin: provides modules to edit template files in your symfony projects
  • Updated plugins
    • sfGravatarPlugin: added symfony 1.2 compatibility, updated default gravatar image which looked ugly
    • sfPropelActAsCommentableBehaviorPlugin: created 1.0 branch of the plugin for sf 1.0
    • sfDateTime2Plugin: fixed a roundup issue in sfDate::diff()
    • sfExtjsThemePlugin: changed so that params:field_type would also work for datastore, modified onLinkClick method to use the new default tabpanel, modified edit cancel button to close the tab, modified edit save button to update the list grid, initial import of working ExtjsGeneratorPlugin under symfony 1.2
    • limexPlugin: corrected a bogus path, added required methods to functional test case
    • swToolboxPlugin: added swValidatorTrilean (true, false and null), allow to add specific raw SQL code into Doctrine Query
    • sfDatagridPlugin: updated README, add the column comparator options for the datagridPropel, change the default text in english by default
    • sfWebRPCPlugin: debugging IXR_library, added makefile to package easily, added documentation, fixed a bug in IXR_Library
    • sfSuperCachePlugin: added ability to preserve some HTTP headers when check_lifetime is set to true. That way, client-side cached actions live well with the plugin
    • sfSocialPlugin: added count of unread messages, fixed bug in $sfSocialMessage->read(), implemented sfSocialEvent module, added some unique keys to schema.yml, implemented sfSocialContact module, updating sfGuardSecurityUser
    • sfShibbolethPlugin: added agilbert branch, added sfShibbolethUser module as a password-less alternative to sfGuardUser module, auto registration of routing rules added, updated the processForm action with a random password generator
    • bhLDAPAuthPlugin: untested recursive group checking, squelch adLDAP warning
    • sfPropelActAsCommentableBehaviorPlugin: upgraded plugin to symfony 1.2, moved plugin’s trunk to a dedicated branch
    • sfMicroBlogPlugin: added a getInstance()
    • ckWebServicePlugin: updated README, updated package.xml for version 2.2.2, migrated project fixture to sf1.2, replaced config.php with ckWebServicePluginConfiguration class, created tag for version 3.0.0, applied major refactoring to use annotations instead of doc tags where possible, added support to add methods to different webservices, refactored ckWebServiceGenerateWsdlTask to support new features of ckWsdlGenerator, SoapHandler generation is no longer optional, result adapter module configuration is no longer overwritten, merged recent changes to ckWebServiceGenerateWsdlTask and test fixture updates from 1.2 branch, disabled debug option in ckWebServiceGenerateWsdlTask, removed obsolete autoload registration, merged recent changes from 1.1 branch to provide consistent interface, moved getPropertyStrategy() from ckXsdComplexType to ckAbstractPropertyStrategy, extended functionality of property strategies

Some new symfony powered websites

  • filmprices.com: (English/Norwegian/Swedish/Danish) a film price comparison site

They talked about us