30 Jul 2010
DevZone - Items tagged as: Zend Framework
Zend Framework 1.10.7 Released
The Zend Framework team announces the immediate availability of Zend Framework 1.10.7, our seventh maintenance release in the 1.10 series. This release includes around 60 bug fixes. For those uses of Zend_Service_Twitter , please ensure you upgrade to 1.10.6 or 1.10.7 ASAP. These releases introduce a change in the Zend_Service_TWitter API that enforces the use of OAuth by default when using methods that require authentication. The change was introduced to help prepare Zend Framework users for the Twitter OAuthcalypse in mid-August. (If you cannot upgrade, there are other ways to integrate Zend_Oauth with Zend_Service_Twitter .)
30 Jul 2010 5:52pm GMT
25 Jul 2010
symfony Project Blog
A week of symfony #186 (19->25 July 2010)
Symfony2 routing management was completely revamped this week with new loaders, methods, and configuration. These new loaders were also added to the Dependency Injection component. In addition, Doctrine bundle fixed several bugs and the internationalization component was added.
Development mailing list
- Discussions about Symfony2 documentation suggestions, Session flush and Limitation in sfTask making it difficult to call another task from an event listener
Development highlights
Symfony 2.X branch:
- b828617: [DoctrineBundle] fixed multiple connections via XML
- 1bc973e: [DoctrineBundle] added missing driver options (memory, used by sqlite; charset, used by oci) to the supported configuration options supported by DoctrineBundle
- 7287913: [DoctrineBundle] fixed defect in doctrine:generate:entity where xml extension was added to all mapping types
- e33894a: [DoctrineBundle] fixed issue with doctrine:generate:entity command when no --fields are specified
- 216dc0f: [DoctrineBundle, DoctrineMongoDBBundle] made sure proxy directory is created when DI container is being built
- 93f2d6e: [FrameworkBundle] removed pdo.xml
- e6cbfd7: [Console] changed CommandTester to allow testing Command classes without the need for an Application
- 14cecd5: [Routing] refactored loaders: added supports() and setResolver() methods to LoaderInterface, added a LoaderResolver interface, added a Loader base class, DelegatingLoader, ClosureLoader, and PhpFileLoader, refactored the import mechanism for better flexibility
- 4e3e86c: refactored routing management: now it's possible to disable the default routing, removed the Kernel::registerRoutes() method, added a router entry in (replaces the registerRoutes() method), refactored routing configuration in its own routing.xml file
- 60c6827, dcaf436: [DependencyInjection] refactored loaders: added supports() and setResolver() methods to LoaderInterface, added a LoaderResolver interface, added a Loader base class, DelegatingLoader, ClosureLoader, and PhpFileLoader, refactored the import mechanism for better flexibility
- 3f270f5, ef40118: [FrameworkBundle] added a skeleton for configuration in plain PHP
- bfb081f: [ZendBundle] added Zend\\Translator component
Development digest: 115 changesets, 12 bugs reported, 1 bug fixed, 1 enhancement suggested, 2 documentation defects reported, and 4 documentation edits.
Documentation
- Adam Tombleson (rekarnar@gmail.com): Wellington, New Zealand based freelance PHP developer. I've been working with symfony since 1.0.
Plugins
- New plugins
- sfPostgresDoctrinePlugin: extends the sfDoctrinePlugin for Postgres database.
- magmaPlugin: (no description)
- pxWymeditorPlugin: provides a new widget to use WYMeditor (http://www.wymeditor.org/) for textareas in your forms.
- sfGoogleDidYouMeanPlugin: implements easily Google's "did you mean" feature.
- sfRssCalCreatorPlugin: a modified version of rsscalCreator. That is a PHP class that implements the rsscal (RDF) specification of iCal, RFC2445. Only the calendar event component is implemented.
- Updated plugins
- sfDependentSelectPlugin: change value of 'key_method' option to 'getId' for propel compatibility, updated README, bugfixes in sfDependentSelectPropelSource and sfWidgetFormPropelDependentSelect, added multiples selects
- sfProjectAnalyserPlugin: analysis of lib class of project, added analysis of symfony extended classes
- sfPhpunitPlugin: base class for doctrine fixtures, add file fixture level to manage just files without defining the database type, fixed _collect_coverage config option
- fpBuildPlugin: fixed total timer issue, fixed bug with quiet option
- sfTrafficCMSPlugin: added autoconfig for setting options on datetime widgets as well as date widgets, improved the navigation menu
- sfDoctrineGuardPlugin: fixed random generator for RememberMe keys
- ExtjsGeneratorPlugin: added missing il8n helper in bottomToolbarSuccess.js.php, added autoLoadStore config option for gridpanel, added addslashes for handler function definition for toolbar buttons, re-enabled formpanel cleaning onSubmitSuccess, updated fieldhelp to work with checkboxes and radio buttons, added a check to not show the help if the plugin is added to an element but no helpText is present
- csDoctrineActAsGeolocatablePlugin: revamped of Geolocatable plugin
- sfErrorNotifierPlugin: refactored version, changed message format, removed test fatal error on init step
- sfImageTransformExtraPlugin: added release notes and version number for 1.0.6 release, fixed fill and style options from off to ~, fixed boolean parameters for resize options, fixed spare brackets, fixed channel url for sfImageTransformPlugin
- sfDoctrineActAsRattablePlugin: fixed strict warning for buildLocalRelation
- sfRedisPlugin: upgraded to latest Predis script, try a mix between sfPager / redis / Doctrine
- sfSphinxPlugin: fixed sort in Doctrine pager
- dsExtDirectPlugin: fixed issue where zero-length tree requests might generate an error
- gbI18nRoutePlugin: code clean up
- sfJqueryReloadedPlugin: updated sfJqueryReloadedPlugin to have the last version of jquery ui that was released for 1.3.2
- sfDbDesignerAlternativePlugin: fixed xsl issues with decimal type and scal
- diemProject:
- fixed issue when dropping medias in admin record page
- added Bulgarian translation
- dmMailTemplate now works with dm_i18n_form = 'embed' parameter
- generator.yml changed thru a symfony dmAdmin:generate --clear=dmMailTemplate
- apostrophePlugin:
- cropping is usable now, at least when constraints are in place
- fixing duplicated slideshow media item selection
- fixed bug with button slot outputting empty markup
- fixed accessibility bug with search partial
- fixed the navigation page titles were not encoding html entities properly when outputting a page title with an ampersand in it
- new aDate::mysql() method takes a PHP timestamp, MySQL datetime or MySQL date (defaulting to now) and returns a MySQL datetime format string suitable for calling setCreatedAt() or similar
- removed remember me button from the signin form because it does not work
- changed the default fck toolbar for sidebar
- aArray::isFlat checks whether an array is a flat array
- fixed a bug with aString.class.php where the ellipses encoded character getting appended to truncated strings was missing the ending semicolon
- updated the aHtml::limitWords to accept the append_ellipses option that aString::limitWord already accepts
- fixed a bug with aMultipleSelect, the javascript was using method that is not available in all browsers
- email obfuscator was generating random GUIDs for the email mailto links
- updated jquery UI to be the last version released to work with jquery 1.3.2
- apostropheBlogPlugin:
- upcoming events query is added unless filtering by date
- permalink displayed in post and event editor now displays the date in the url
- made it easier to override engine settings forms
- updated blog plugin to use jquery ui 1.7.3 by default if it is not set in settings.yml
- published_at now has a default value
- altered formating of dates in event admin
- fixed event admin was using a blog route for removing filters
- RestInBook: (English, and Spanish) Post a remembers or photos to a late's by twitter or via web
They talked about us
- Colorize your Windows console life with symfony
- Domesticando los formularios: sfForm
- Automatic Anti-Pattern Corrections for PHP
- Plugins no reinventes la rueda
- How you run into problems with redirects when route parameters need to have slashes in them - and how to solve this!
- MongoDB y symfony
- Force-download avec Symfony
- Symfony, cloud computing y web escalables
- Creating simple image gallery using sfAssetsLibraryPlugin and sfJQueryLightboxPlugin
- Short: Order Result Sets by an Array
- Rilasciato lyMediaManagerPlugin 0.5.2
- JustMarried : conception de la base de données (SQL -> NoSQL)
- Advanced SQL expressions in Doctrine
- Exceptions
- Unit testing symfony plugins with PHPUnit - My session at the symfony day 2010. What do you expect?
- Ingewikkeld
- chmod 777 is evil
- Short: Enable Query Stack Trace in Web Developer Toolbar
- Another release of sfImageTransformExtraPlugin has seen the light
- Snippet: Symfony & Propel - Queries with SQL functions
- Symfony Rocks?
- Short: Sync generator.yml with your Admin Module
- Symfony Blog Project tutorial
- symfony 命令详解
- Install Symfony on IIS 7
- symfony X OpenPNE勉強会に参加してきました
- symfonyではデフォルトはHTMLエスケープする設定がおすすめ
- symfonyでタスク
- Symfony通过 DoctrineMongoDBODM访问MongoDB
- symfony学习之sandbox(砂盒)操作问题
- How to set an form error in the action
- Usando el patrón Singleton en el admin generator de symfony
- AJAX request with Symfony sfBrowser in Lime functional test
- Symfony backend: Custom query get item list
- Migration vers symfony et ajout de nouvelles fonctionnalités
- Dica: como carregar helpers do Symfony além dos templates
- Getting started with symfony
- Symfony 1.4 - Jak wyłączyć sprawdzanie csrf_token dla formy
- opDiaryPlugin 1.3.0.1 リリースのお知らせ
- Utiliser Zend dans Symfony
- SOA y Symfony
25 Jul 2010 8:50pm GMT
23 Jul 2010
DevZone - Items tagged as: Zend Framework
Twice the Amount of Bugs and Twice the Amount of Winners!
Zend Framework has recently wrapped up it's July 2010 Bug Hunt with some fantastic results. Collectively, we closed 50 issues in 3 days. That's nearly twice what we have seen in recent months- a trend we hope continues into the coming months!
23 Jul 2010 6:33pm GMT
22 Jul 2010
symfony Project Blog
Symfony in the health industry
Enovation was engaged by one of his long term clients in the Health education sector to aid and enable them in designing a solution for the management of curricular activities. The college had an immediate requirement to replace an existing expensive, commercial online database, with a bespoke system which could better manage their curriculum and student rotations within training hospitals. The project was quite large, and the clock was ticking; it was time to learn a new framework, and fast!
The heart of the project was to create an easy-to-use interface to allow the client to manage their database. We needed to provide all of the standard CRUD operations for each table, and add some new actions, such as batch editing and CSV import & export. The application would be secure, and various degrees of access and interactivity would be defined by role. Other, custom designed modules were also required.
The project presented several challenges - initially two large databases had to be merged and normalised to create a new schema. Also, the client's requirements were in constant flux, so the schema would have to be easy to edit as requirements were defined and refined. Thanks to YAML, changes to the schema were quick and easy.
The Admin Generator played an indispensable role: new modules could be quickly created on demand, then easily configured, secured and extended. We extended the Admin Generator itself and added our custom actions to make life even easier. And all we had to do to implement any changes made to the schema was rebuild our models; refactoring was a dream!
Symfony was ideal for our requirements in this project. It allowed us to get the project off the ground very quickly. It allowed us to deal with many changes and new requirements elegantly. Extending functionality, integrating custom code or creating custom solutions using the core API was easy. Most importantly, answers to questions were easily found in the excellent, extensive documentation and API reference. On every level we found symfony to be powerful, flexible and well-thought out; we can't wait to use it again!
This case study was provided by a user of the symfony framework and published with the permission of all parties involved. Are you interested in having your case study published on the symfony blog? Feel free to contact our Community Manager Stefan Koopmanschap (stefan.koopmanschap - at - symfony-project - dot - com).
22 Jul 2010 8:00am GMT
19 Jul 2010
CI News
CodeIgniter Con 2010
There are remarkable things happening within the CodeIgniter community. One of these is the community run conference, CICON!
CodeIgniter Con 2010 is the first all-CodeIgniter conference and is being run in the UK. The conference will be a two-day event on the 14th and 15th of August, which will give you a great chance to meet fellow developers, pick up some new tricks and share your experience with others. The first day will be a series of talks from well-known speakers who have been using CodeIgniter for years in different ways. The second day will be a workshop / master-class day which will be of as much interest to new users as the more experienced users.
In order to get people as involved as possible, they are offering a "Buy a Day 1 ticket and get a Day 2 ticket free" special.
If you've ever wanted to rub elbows with a who's who of the CodeIgniter community, don't miss this chance.
19 Jul 2010 4:10pm GMT
cakebaker
Bugfix release for the OpenID component & an example application
Last week I received a mail from a user of the OpenID component in which he described that it wasn't possible to login with OpenIDs from claimID and Blogger. After some debugging I found the reason for this problem: a bug in the isOpenIDResponse() method. The method only recognized responses from providers using OpenID 2.0, [...]
19 Jul 2010 2:23pm GMT
DevZone - Items tagged as: Zend Framework
Edge Side Includes without Varnish
Development on websites when the product will run on a Varnish'ed' production environment can be a pain in the ass. The xml tag that can be used to define Edge Side Includes can't be parsed by a standard browser. While developing you often look at a half rendered website implementation. This is something you really don't want!
19 Jul 2010 1:36pm GMT
18 Jul 2010
symfony Project Blog
A week of symfony #185 (12->18 July 2010)
Dependency Injection, one of the key components of Symfony2, was heavily refactored during this week. Meanwhile, four new blogs joined to the hundreds of sites that blog regularly about symfony.
Development mailing list
- Discussions about Symfony2 Sandbox & Cache, symfony 1.2 maintenance / contribution and Symfony plugin README breakage
Development highlights
Symfony 2.X branch:
- ab26f9f: [OutputEscaper] moved __get() from Escaper to ObjectEscaper
- fe7e01c: [OutputEscaper] added magic __isset() method to object escaper
- 0fbb1b9: cleaned up the DI extension loading mechanism
- 4375594: replaced Container->hasParameter() with Container->getParameterBag()->has() in ExceptionFormatter
- 44a16fc: [Finder] fixed exclude iterator (now only match with the relative path)
- fb4bd35: refactored the controller manager, moved generic parts to the HttpKernel component
- 0163178: changed the BundleInterface::buildContainer() signature
- b8f29f1, 6462814, 826e615: [Framework] cleaned up command registration magic
- 92130c3: updated bootstrap.php
- 7796eb2: merged BuilderConfiguration and Builder classes into a new ContainerBuilder class
- 6bad580: [DependencyInjection] moved ContainerBuilder::resolveValue() to ParameterBag
- 47fd5e8: [DependencyInjection] fixed placeholder management in parameter values
- 2a051b5: moved DI extensions classes to their own sub-namespace
- ca87621, 1dd5b61, 44757b0: [DependencyInjection] added a check for the class name when dumping a container to PHP
- 82ec700: [Console] fixed InputDefinition setArguments must reset hasAnArrayArgument
Development digest: 78 changesets, 15 bugs reported, 25 bugs fixed, 2 enhancements suggested, 1 enhancement closed, 2 documentation defects reported, 1 documentation defect fixed, and 15 documentation edits.
Documentation
New Job Postings
- Expert Technologies (symfony 1.4 & 2, doctrine, jquery) at Social Invent - full-time based in Lille, France - More information
- Theodo: Based in Paris, Theodo is a development company specialised in symfony with a team of experts who have been using symfony full-time for at least two years, 1.0 to 1.4, Doctrine and Propel. Theodo has accompanied large clients on complex web projects from the technical specifications to the delivery.
New symfony bloggers
- Olivier Balais (feed) (French)
- Jonathan Nieto (feed) (English, and Spanish)
- Just Blog, No More... (feed) (English)
- Hugo Hamon (feed) (English, and French)
Plugins
- New plugins
- kmFormExtraPlugin: Provides some widgets and validators for symfony 1.2 - 1.4.
- sfMaskedInputPlugin: Contains one widget sfWidgetFormMaskedInput which masks an input field by a given alphanumerical mask.
- sfDIPlugin: Mediator based plugin for integrating heterogeneous data.
- psPageableFormPlugin: Provides pageable (multipage) form functionality.
- sfDependentSelectPlugin: Widgets for dependents selects and action for automatize AJAX calls.
- Updated plugins
- sfTemplatingPlugin: use sfParameterHolder for parameters, improved phpdoc consistency, added HTML templating engine, added sfTemplatingTemplateRenderer class, added template renderers, improved API extensibility, added configuration for template directory, added template filesystem loader, improved filesystem loader path prefixing, refactored HTML escaping from engine to renderer, made layout extending more flexible
- sfEnvironmentFixturesPlugin: corrected pear install instructions, new function names to avoid collisions, fixed recursive loading issue, fixed double plugin loading issue, refactored to allow other plugins to determine environment fixtures directory
- pmPropelGeneratorPlugin: tweaked styles, added disabled buttons on conditional actions, added show as a default object_action, fixed internationalization error, fixed show and new action, bugfix when disabled actions throws errors, bugfix on show_when statement
- sfPhpunitPlugin: added post-install hook, added alias to phpunit:runtest task
- lyMediaManagerPlugin: existence of media root directory is now checked in controller, created form to add a subfolder directly from icons view, created form to upload a file directly from icons view
- sfDoctrineJCroppablePlugin: added a validator to check for bad crop selections, stopped failing on missing images
- ExtjsGeneratorPlugin: added a way to update records from the grid, added query_method support to combo action, made remote combo's the default, enabled remote combo's for the filterpanel, refactored ExtjsGenerator::getFormCustomization, started implementing remote combo filtering, cleaned up unused attributes in some of the widgets, added support for paged remote combos, added app.yml options for export and remote combos, fixed a bug with boolean columns that had a renderer, refactored renderField and getColumnGetter, fixed a bug in columnmodel generation for foreign keys with plugins, fix to get column getters when not in the fields list
- sfDoctrineActAsTaggablePlugin: created a new tagWidget that is more robust, added tag-input classname to the input for the new tag widget so that it is compatible with pkTagahead if necessary
- csDoctrineActAsSortablePlugin: fixed useless ORDER BY in UPDATE query
- sfTrafficCMSPlugin: fixed bug in date format
- sfPropelActAsCommentableBehaviorPlugin: major restructuring to take advantage of Propel15 features
- sfGuardPlugin: fixed random generator for RememberMe keys, added missing file in package, made sfGuardFormSignin more flexible (also extends the BaseForm class now), added missing connection parameters, fixed inactive users can still login to the system
- sfProjectAnalyserPlugin: added analysis of lib class of project
- sfDoctrineGuardPlugin: fixed random generator for RememberMe keys
- sfJqueryFormValidationPlugin: fixed invalid error reporting setting
- apostropheBlogPlugin:
- author field should be unset when not logged in as an admin
- fixed a bug designed into the blog sidebar relating to tags and the way the blog admin handled form submissions for the page
- fixed a bug created from bringing over the new tag widget
- brought new tag widget over to Events
- when slugifying a blog post we need to unescape the HTML first as the slugifier expects a real UTF8 string
- fixed categories bug where the permissions check was not wrapped around the edit button
- apostrophePlugin:
- aUserAdmin now uses a filter subclass that removes most fields preventing explosive memory use when interesting relations are added
- group admin needs manageable memory usage too
- getAncestorsInfo now has an optional $livingOnly flag to return only ancestors that are not archived
- getAccordionInfo no longer returns archived ancestors when $livingOnly is true
- added a class to the image slot so that it mimicks the slideshow slot 'a-image-meta'
- fixed a bug with the title being a link in the feedItem template
- updated the aFeed slot to accept options for passing attributes and styles through the feed in addition to just markup
- you can now edit a previously cropped slideshow properly
- createCrop replaced with findOrCreateCrop which doesn't generate a duplicate slug error when you crop to the same size you had before
- implemented executeUpdateMultiplePreview, now you get a crop preview when you add that first image to the slideshow
- sfAdminDashPlugin: changed admin header link to new homepage_url property
- vjCommentPlugin: adjust schema for the new sfDoctrineGuardPlugin version
- WithFit: (English) WithFit helps you track, improve, and share your fitness. It's completely free and easy to use.
- Taraftarsan: (Turkish) A Football Social Network
They talked about us
- Symfony 1.4 - Admin Generator - Tris sur les colonnes étrangères
- Installation et premiers pas avec le plugin Symfony sfImageTransformExtraPlugin
- Jornadas Symfony: Symfony2
- Symfony + Git + Capistrano = Capifony
- How to achieve modularity within symfony/doctrine projects
- lyMediaManagerPlugin 0.5.1
- Второй Symfony Camp UA - Завершился!
- personalizzare i filtri nel backend - 2
- Video de Introducción a symfony en decharlas
- Why I wouldn't use Symfony for a new project
- Video de la charla sobre Doctrine en decharlas
- Domesticando las Vistas de symfony
- Admin generator en symfony
- Define delegate methods for your table object in a Doctrine behaviour using TableProxy
- Symfony en España. Caso práctico I: voota.es
- Symfony en España. Caso práctico II: Symfony en la gestión de un centro de computación avanzada
- sfWidgetFormTextareaTinyMCEWithLang
- Создаем собственную тему для CRUD генератора в symfony
- Symfony Day Cologne and a symfony workshop
- sfWidgetFormDoctrineJQueryAutocompleterAndClear
- Nice urls with symfony
- 国外主流PHP框架比较-CodeIgniter、CakePHP、ZendFramework、Symfony
- Symfony に関する新事実
- CruiseControl + Symfony = Continous Build
- Symfony 2 ~ Probándolo
- Umkreissuche mit symfony und Doctrine
- Cómo configurar un proyecto en Symfony con Netbeans 6.9
- symfonyとは?
- symfonyを使ってみた所感
- How to change CSRF attack message in Symfony 1.2
- Creando un proyecto en Symfony con PortgreSQL desde cero
- Language conditional caching in symfony
- Symfony expliqué à mon boss
- Symfony Doctrine find to get Object
- Symfony 2.0 preview
- Jornadas de symfony en Castellón
- Writing good MVC code with the symfony framework
- Want the source code of the blog?
- 'Pick or create' embedded form the propel way
18 Jul 2010 8:55pm GMT
16 Jul 2010
DevZone - Items tagged as: Zend Framework
Zend_Log timestamp filter
For one of my recent project, which is using Zend_Log component of the Zend Framework, I had a demand in which I needed to be able to filter log events based on the time they occurred. As out of the box, Zend_Log component does not have such filter, I decided to create one that will fulfill my demands.
16 Jul 2010 2:00pm GMT
15 Jul 2010
DevZone - Items tagged as: Zend Framework
Varnish Edge Side Includes
Varnish's Edge Side Includes are a powerful tool that give developers a lot of flexibility. Bas de Nooijer has written an interesting blog post on how to control them from within your Zend Framework application.
15 Jul 2010 2:00pm GMT
14 Jul 2010
cakebaker
Grouping “constants” with JavaScript
A while ago I wrote about how you can group related constants in PHP5 by using a constants class: class MyConstants { const AA = 'value'; const BB = 'another value'; } echo MyConstants::AA; // output: value Now, while experimenting with JavaScript (or more precisely with Node.js) I got some constants in my code I [...]
14 Jul 2010 2:10pm GMT
13 Jul 2010
symfony Project Blog
Resolutionfinder.org - Building a frontend within 15 man days
The resolutionfinder.org database aims to facilitate access to UN agreements with the purpose of improving the process of implementation. Within just 15 man days a team of 3 developers put together an easy to navigate frontend that encompassed the entire breadth of data that was collected by a volunteer team of graduate students and young professionals from all over Europe over the course of two years. The resulting application was one of the highlights at the "UN-connecting the World" conference held in Geneva in late May 2010, where the application was launched as a useable concept and technology show case that will form the basis for future developments.
The rapid development of the application was only possible due to the powerful out of the box features of the popular symfony PHP framework with tight integration to Lucene and Solr via the sfSolrPlugin.
Customer Overview
The idea behind resolutionfinder.org was to create an instrument that facilitates access to UN agreements with the purpose of improving the process of implementation. Unlike other databases available at the moment, resolutionfinder.org not only compiles documents, but it also extracts clauses relevant for implementation and provides the evolution of documents and clauses. Right now, the database contains a substantial amount of information in four thematic areas: Clean Drinking Water, Malaria, Small Arms and Light Weapons and Women and Education.
The development of resolutionfinder.org has been supported in the past two years by the World Federation of United Nations Associations (WFUNA) and especially by the United Nations Association of Germany (DGVN). The project is currently in negotiations for a partnership with the International Security Network (ISN).
Key Search features of symfony
- Powerful ORM capabilities through the integration of Doctrine ORM, with automatic generation of model and form classes
- Admin generator to quickly setup powerful admin capabilities that require minimal work even if the underlying schema evolves
- Tight integration with Solr through the sfSolrPlugin tying together the Doctrine model classes with minimal work
- Availability of several more plugins like sfDoctrineGuardPlugin for user management, sfFormExtra for easy creation of web 2.0 forms, sfAdminDashPlugin for easy UI tweaking in the admin tool and several more
- Great debugging environment and deployment tools to ease all steps of the maintenance process
- Due to the Open Source nature of the entire application stack means that no licensing costs were incurred for the entire application
Challenges
Since resolutionfinder.org is an entirely volunteer effort that currently does not have an IT budget and is mostly comprised of experts in the domain of UN research and not application development, the available development resources were slim. It became clear that even with development time and hosting sponsored by the Liip AG of Switzerland, there would effectively be only 15 man days that could be dedicated to the development of the frontend. Especially as in parallel there was still work going on with migrating the excel sheets containing the last 2 years of research into the relational database.
The goal was to provide full text search capabilities with facet based filtering, displaying of documents and their containing clauses including their historical development. Users should also be able to register in order to bookmark and comment on clauses and documents. Furthermore as many aspects of the complex database schema should be administerable from the admin tool to ensure that issues in the data that was imported from the old excel sheets could be fixed by the researchers themselves without requiring interventions by the development team.
Solutions
The team already had an existing database schema and a symfony based administration tool which was to handle the excel sheet import. Due to the use of the Doctrine ORM and sfSolrPlugin loading the data into Solr was fully automated through just a small configuration file, which mapped properties and methods in the data model to fields in Solr. As a result after importing an excel sheet it was automatically available in Solr for searching without any additional code. The same configuration file also generated the main Solr configuration files. The Doctrine model classes also made it possible to hook in important denormalization logic in order to ensure that the complex relations between documents and clauses could be read out of the database with minimal overhead.
Finally sfSolrPlugin bundled a fully working Solr installation using Jetty as the servlet container including administrative scripts for Solr. Within just one day a test data set was imported into Solr and the first tests on text searches were implemented giving confidence to the entire team that the target was indeed possible. This meant that there was also zero time wasted having to install and configure Solr on each of the developers machines. Within just a few days an entire facet based filtering system was integrated that enabled users to click to reduce the result set along several dimensions without having to manually trigger a page reload. Via the native highlighting capabilities the user gets visual indication of why the given document is relevant. Additionally the results are color coded to give the users a better idea of the relative legal value of the document.
In parallel the admin tool was build up by using the admin generator. With just a few adjustments to the configuration files and the use of several sfFormExtra form widgets and the sfAdminDashPlugin UI theme, the admin tool provided editing capabilities for the bulk of the imported data.
User management and registration, including email verification an password recovery, were essentially provided out of the box by the sfDoctrineGuardPlugin and sfDoctrineApplyPlugin. As a result only a few lines needed to be added to the configuration and some optimization to the provided templates as done. Using the vjCommentPlugin also quickly added commenting to the site. Due to the integrated deployment tools it was easy to quickly deploy new versions of the code to enable the team of researchers to review the state of the development and provide feedback on the UI. All the while Doctrine migrations, which in most cases can be generated automatically by simply comparing the existing models classes with an updated schema definition file, take the pain out of managing data migration.
"The entire team was surprised how much was possible in such a short timeframe, even leaving time for additional polish where we expected to have to make due with an application that would just be a raw tech demo which would have been dependent on the imagination of users rather than showing a concrete version that is already useable for end users." Lukas Smith, resolutionfinder.org
Future developments
Over the next couple of months, the main focus is to improve the quality of the database and in the long run to extend it up to the point when it includes all thematic areas on the UN agenda. In this regard, research is ongoing for IT solutions in order to make the database universal in a more efficient way. Especially data mining tools to automate the parsing of PDF and HTML based UN documents into the database. Further work is also planned to enable different types of searches that focus more on chronological aspects or certain UN organisations or member states. Finally the admin tools will be improved to ease administrative workflows to enable not only content editing, but to also make it feasible to enter new documents and clauses inside the admin tool, rather than employing the excel sheet importer. This will require using the advanced form embedding capabilities provided by the symfony form system to load additional related forms via AJAX.
Software
- Dedicated virtual host
- Linux Debian
This case study was provided by a user of the symfony framework and published with the permission of all parties involved. Are you interested in having your case study published on the symfony blog? Feel free to contact our Community Manager Stefan Koopmanschap (stefan.koopmanschap - at - symfony-project - dot - com).
13 Jul 2010 8:00am GMT
12 Jul 2010
CI News
CodeIgniter 1.7.2 Security Patch
A fix has been implemented for a security flaw in CodeIgniter 1.7.2. You may obtain the fix either by downloading a fresh copy of CodeIgniter, or downloading this standalone patch. All applications using the File Upload class should install the patch to ensure that their application is not subject to a vulnerability.
While fixing this bug, we took the opportunity to make an improvement to the Upload class's ability to allow a file name override. Previously, you needed to do a little dance in your controller to remove the extension from the file name if you were starting from user input; neither could you override the file extension. Now when using the "file_name" config override, you will supply the full file name, including the extension, truly overriding the file name provided by the client user agent.
After applying the patch, you will need to adjust your code accordingly if you are using the 'file_name' override in the Upload class. While we are not in the habit of making code changes within a version that has the potential to break compatibility, this change was necessary as part of the security fix.
If you are using CodeIgniter from the Mercurial repository at BitBucket, please make sure you pull the latest files. Version 1.7.2 has been branched and retagged to include this fix.
We'd like to thank CodeIgniter user alexaholic for bringing this to our attention. Security is always a top priority for our products, and we make ourselves available to be directly contacted for any security concerns.
12 Jul 2010 10:23pm GMT
DevZone - Items tagged as: Zend Framework
Announcing July's ZF Bug Hunting Days & Previous Winners
Yep, it's the third week of the month- you know what that means: Zend Framework Monthly Bughut! This Thursday, Friday and Saturday of July (the 15th, 16th and 17th 2010), we'll be hosting our monthly bug hunt. For those of you unfamiliar with the event, each month, we organize the community to help reduce the number of open issues reported against the framework.
12 Jul 2010 9:15pm GMT
11 Jul 2010
symfony Project Blog
A week of symfony #184 (5->11 July 2010)
Symfony2 suffered this week a huge internal refactoring: two of the main namespaces were renamed (Symfony\Framework to Symfony\Bundle and Symfony\Foundation to Symfony\Framework) and a new HttpFoundation component was introduced. Meanwhile, Symfony2 documentation continued growing and totalizes 30 brief documents and guides.
Development mailing list
- Discussions about DomCrawler Form getUri() don't return the good URI, sfDoctrineGuardPlugin branch 1.3 is broken and HTML5 application cache in Symfony2
Development highlights
Symfony 2.X branch:
- 99c33ca: [FoundationBundle] removed Finder dependency in Filesystem
- 19d3e98: [HttpKernel] fixed double-insertion problem for profiling data
- 04a8705: [Console] changed the --color/-c option to --ansi/-a to avoid conflict with --config/-c
- aaa6aba: [Console] added a way to use style without defining a name (...</>)
- 99952c6: [Console] added a way to create console application with only 1 command
- a747987: [Validator] custom built constraints can now be used in the loaders
- f6b9d9e: [Validator] made all metadata classes serializable
- fd3243a: [Finder] fixed Finder tests without explicit sorting across different operating systems
- 34dd0ea: [Form] fixed objects are stored in the form before calling configure()
- 1c7b459: [Form] fields with the name '0' are now possible
- 8c9f9de: [Validator] added support for metadata caching
- f2c4f20: [Validator] added support for '0' as default constraint option value
- a9ad743: [DependencyInjection] changed the main services.xsd to be more strict
- 4bbf2ae: [DependencyInjection] renamed constructor to factory method (like in Spring)
- 27458b6: [DependencyInjection] removed @property annotations as services are not available as properties anymore
- ef91396, 8d067ba: [DependencyInjection] added factory-class and factory-service concepts to DI Definition
- b6799d0: [FoundationBundle] fixed bundles with sub-namespaces
- 4b24544: added ability to disable Symfony's error handler (PHPUnit has built in support for testing if PHP errors are thrown by looking for special exception classes: PHPUnit_Framework_Error, PHPUnit_Framework_Warning and PHPUnit_Framework_Notice
- 6613555: [DomCrawler] fixed Form::getUri() and Link::getUri() issue if the form action attribute is an absolute url
- 7e8d0d2: changed all listener classes so their names end with Listener
- e63ff6e: [DependencyInjection] fixed conversion of DOM to array when DOM includes multiple elements with the same name
- 9133b9e: moved Request/Response/User classes to a new HttpFoundation component. The HttpFoundation component holds classes that wrap PHP native global arrays
- 6213fde: renamed Symfony\Framework to Symfony\Bundle. For existing Symfony2 applications, references to Symfony\Framework are found in the main Kernel class (registerBundles() and registerBundleDirs()), and in all Controller classes. You also need to change the console script
- 15d4398: renamed Symfony\Bundle\FoundationBundle to Symfony\Bundle\FrameworkBundle
- da9f36c: renamed Symfony\Foundation to Symfony\Framework
Development digest: 87 changesets, 28 bugs reported, 8 bugs fixed, 3 enhancements suggested, 3 enhancements closed, 4 documentation defects reported, and 11 documentation edits.
Documentation
New Job Postings
- Symfony developers at Boxlight Media - full-time based in London, UK - Contact: jobs [at] boxlightmedia [dot] com
- Symfony/Web developer at ipmedia - full-time based in Zurich, Switzerland - Contact: jobs [at] ipmedia [dot] ch
- Logikas Co: Argentine company specialized in web 2.0 development. We build high-performance, secure and stable applications for all levels business.
New symfony bloggers
- Lukas Kahwe Smith (feed) (English)
Plugins
- New plugins
- tbDeploymentToolsPlugin: provides tools to organise symfony project.
- sfPropel15RatableBehaviorPlugin: A behavior based on Propel 1.5 to add to your propel objects the ability to get and set ratings.
- sfABTestPlugin: allows you to create A/B tests on your site and view the results.
- dinCachePlugin: This plugin features so-called "smart caching" method. Its main advantage: cache is purged only if original data has changed. To achieve this, plugin uses a set of rules, similar to routing.
- sfTemplatingPlugin: provides support for using arbitrary templates from anywhere within a symfony project.
- jmsFormsPlugin: Provides better support for manipulating forms via Javascript and easier embedding of collections/relations.
- sfEnvironmentFixturesPlugin: Provides support for defining additional fixtures for each symfony environment.
- Updated plugins
- sfProjectAnalyserPlugin: added alert for empty application layouts and partials, added alert for application layouts and partials code length, added count of layouts and partials code length of applications, updated package.xml and README, started analysis of project lib directory, notice if $matches was empty (when the file was not a php one), auto-generated modules are displayed in the report, parse activated plugins code, added an option in the YML config file to specify which plugins must be parsed, fixed modules and actions counting for plugins, added average line code length by action, module, application and project
- sfGridPlugin: updated the widget link contruction
- sfAlyssaJqGridPlugin: droped the use of getKeyColumn() method
- sfDoctrineJCroppablePlugin: fix for removing images when the record is deleted, fix for default crop of new images, added config for the default crop
- dvbNewsletterPlugin: added sluggable to newsletter lists, admin generator stub, italian translation stub
- sfDoctrineGuardPlugin: fixed sfGuardCreateAdminTask (it was a duplicate of sfGuardPromoteSuperAdminTask, now it is a distinct task based on sfGuardCreateUserTask, with the addition of setting the superadmin flag)
- ExtjsGeneratorPlugin:
- fixed a problem with single quotes in the column name for export columns
- set id field as hidden when no list.display is provided in the generator.yml
- added support for multiple one-to-one relations
- added support for field help config option in the generator.yml
- fixed a bug with filter query location logic in ExtjsFormFilterPropel
- cleaned up widgets a little bit
- added support for combo field config option in generator.yml to create filter and form comboboxes that contain unique values for local fields
- added required config option for fields
- changed isEmpty label color so the primary filter labels are more noticable
- fixed a bug with is_empty on foreign propel choice filters
- fixed a bug with file upload detection in the formpanel submit method
- fixed bug with new forms
- removed unused newAction
- fixed response bug with file uploads for create and update actions
- fixed formpanel updatebuttonvisibility
- fixed formpanel save as new
- fixed a bug when creating a new one-to-one record
- made ExtjsFormPropel extend sfFormPropel and removed unmodified methods
- made ExtjsFormFilterPropel extend sfFormFilterPropel and removed unmodified methods
- added invisible hidden field support to form and filters
- removed value check for combobox submitOnSelect
- fixed bugs with button separators and spacers for toolbars
- fixed bug where generated partial for toolbar and object actions were not being included
- fixed bug with no_handler warning message in generated partials for toolbar buttons
- sfDoctrineRestGeneratorPlugin: fixed bug when an error occurs in update mode, made XML serializer more performant, fixed bug when using the default.formats_enabled option which was not parsed until now
- sfAdminDashPlugin: added option to not include jquery, added option to not include assets (js/css), added option to set homepage url in breadcrumb path
- lyMediaManagerPlugin: refactored lyMediaFolder model, added some unit tests, added task to synchronize the media library with a directory
- pmPropelGeneratorPlugin: added some improvements, some bugfixes in preExecuteMethod, tweaked templates
- csDoctrineActAsSortablePlugin: fixed bug with unique by fields update and position, improved performance
- dcMailerPlugin: added an action for configuration testing
- mtAlertPlugin: fixed some minor errors that prevented the sendMail task from doing what it should
- sfTrafficCMSPlugin: fix for blank date filters
- sfPhpunitPlugin: hook for running init task just after the plugin is installed, generating web/PROJECT_NAME_test_selenium.php files with support of phpunit functional test coverage report, better integration of functional test coverage report, fix path to ProjectConfiguration.php in generated index file
- sfFormExtraPlugin: fixed reading of can_be_empty option in sfWidgetFormJQueryDate
- apostrophePlugin:
- rebuild-search-index can now safely handle large media libraries by spawning separate batches of 100 media items at a time
- you can now hit Return to save a new item in aMultiSelect
- fixed bug where the media library was ignoring use_bundled_stylsheet
- improved upon aMenuToggle so that the open and close triggers are accessible on the object and can be invoked from external contexts
- use preg_replace_callback to make aHtml::obfuscateMailto more maintainable
- fixed a bug in which any single or double quotes in the label showed up with slashes in front of them in the page
- removed unnecessary error_log call
- fixed bug in accordion navigation that caused improper ordering classes to be placed on nav-items when archived pages also existed in navigation element
- updated the breadcrumb partial so that it does out output archived pages when logged out
- apostropheBlogPlugin:
- changed default ordering of categories to be by name
- made it easier to override default templates
- when no post or event exists, create an empty aBlogPost or aEvent instead of aBlogItem
- sidebar area was not using the sidebar toolbar for richtext editor in the twoColumnTemplate
- Conca D'oro: (English) an information website for a weddings and events planner
- wirsindgolf.net: (Deutsch) Social network for golf sports - find golf courses, plan new flights, compare your scorecards
- pjchaco.org: (Spanish) sitio oficial del Partido Justicialista Distrito Chaco
They talked about us
- Symfony Code'n'Coffe (Июль) Москва
- Symfony2 arriva il sito dei Bundle
- Extending Doctrine_Query with convenient query filter methods
- [Admin generator] Paramètre 'table method'
- Crónica de las primeras Jornadas de Symfony
- Todas las presentaciones de las Jornadas Symfony
- Play with me in symfony2 game
- Wrapping symfonys functional tests in a PHPUnit test case
- sfProjectAnalyserPlugin 0.9.1 to analyse your symfony project
- Exemple d'application utilisant la Graph API de Facebook
- Snippet: Symfony Forms - Accessing the Object in a Form
- Un media manager per Lyra
- Doctrine Multiple Connections with Symfony Web Debug Toolbar
- De vuelta de las Jornadas Symfony
- Crónica jornadas symfony en decharlas
- JustMarried : projet Symfony2 + MongoDB (via Doctrine)
- I18N with Doctrine
- My notes in Symfony
- 3日目/24日 symfony
- Comment créer un sprite pour optimiser le chargement de ses images?
- Управляем урлами или routing в symfony
- Inversion of Control - Teil 3 - Dependency Injection im Symfony 2.0 Framework
- symfonyアプリケーションをデプロイするためのCapistranoレシピ : アシアルブログ
- Symfony and sfDoctrineGuard missing installation point
- Jornades #decharlas sobre #symfony
- What will happen with sfImageTransformExtraPlugin?
- Tkinter开发Symfony命令辅助工具(1)
- Una muy buena presentación sobre Symfony
- Drupal vs. symfony vs. Rails
- Доступны Фото-отчеты с конференции!
- Logs manuales y personalizados en Symfony
- Comment invoquer les As du Libre selon Sensio Labs
- Symfony2 for a non-upgrader
- 7/24 OpenPNE3で学ぶsymfony勉強会@新宿御苑
- nginx configuration for symfony projects
- 2й Symfony Camp UA - завершился, эх...
11 Jul 2010 7:30pm GMT
09 Jul 2010
DevZone - Items tagged as: Zend Framework
ACRONYM or MixedCasing in Zend Framework 2? You decide!
One complaint we've heard often of ZF users is confusion over how acronyms are represented in class names. As an example, many suggest that "Zend_PDF" is more semantically correct and easier to remember than "Zend_Pdf". On the other side of the coin, many developers feel that our MixedCasing or Titlecasing of acronyms is a simple, easily learned rule that makes typing easier.
09 Jul 2010 8:20pm GMT
06 Jul 2010
symfony Project Blog
Symfony2 Documentation
As you might have noticed, the Symfony2 documentation grows every single day. Since the Symfony2 Live Conference, I regularly publish new documents for Symfony2, like the best practices to follow for Symfony2 bundles.
I think it's now time for the community to provide feedback on the Symfony2 documentation on several topics:
-
The documentation strategy (instead of a large book, the Symfony2 documentation is split into small chapters about specific topics);
-
The documentation format (it should be easy and fast to read, easy to understand and straight to the point);
-
The documentation content (things can change; if you think that documented features can be enhanced or don't make any sense, please tell us);
Early feedback is the best way to influence the way Symfony2 will look like. So, take a day or two to read the documentation, test the framework on some simple examples, and give feedback.
06 Jul 2010 7:17am GMT
05 Jul 2010
symfony Project Blog
A week of symfony #183 (28 June -> 4 July 2010)
After the great success of the first Symfony2 online conference, this week the development activity has been focused on its code refactorization. Dependency Injection has been completely refactored, and unit tests, the routing resources and some Foundation files have been reorganized.
Development mailing list
- Discussions about Will there be a stable release of the new sfDoctrineGuardPlugin, Symfony2 Form in sandbox and add comments to symfony-reloaded.org
Development highlights
Symfony 1.X branch:
- r30008: [1.3, 1.4] fixed usage of shell_exec when the function is disabled
- r30031: [1.3, 1.4] added prevention of injected directory traversal in view cache
Symfony 2.X branch:
- 220f8ce: moved getProfile() from the WebTestCase to the Client
- 28c1fb2: [Foundation] reorganized files
- 898adc6: created a new collectors.xml file for a better separation
- a26bdb7, 2722da2: [DomCrawler] removed redundant methods
- d8efe7e: [Yaml] fixed UTF-8 bug
- 95769bc: [FoundationBundle] removed the request.base_path parameter (the DIC can now be immutable)
- 59c1ebe: [FoundationBundle] moved Helper to Templating
- c98c733: [Tests] removed the inclusion of bootstrap.php as this is not needed
- 9895eaf: refactored DependencyInjection Container
- e578dfd: [DomCrawler] added some tests
- aa697d8: added Bundles and Extensions in the list of resources to monitor in dev environment
- 87ae06c: [Routing] refactored resources
- 244c202: reorganized unit tests
- 53847ca: [DoctrineBundle] fixed interface to reflect a change upstream
- 04e621a: [Yaml] added support for the end of document marker
Development digest: 87 changesets, 20 bugs reported, 5 bugs fixed, 3 enhancements suggested, 1 enhancement closed, 4 documentation defects reported, and 1 documentation edit.
Documentation
Plugins
- New plugins
- axCronPlugin: This plugin aims to create a scheduler to start cron tasks.
- hnApePlugin: Helpers to connect to the Ajax Push Engine ape-server from your symfony application.
- sfWidgetFormJqueryRatingPlugin: Provides a jQuery rating widget with stars - based on jQuery Raty Plugin.
- Updated plugins
- lyMediaManagerPlugin: added some functional tests, made asset list (icons view) sortable by asset name or date, fixed error in thumbnail selection from TinyMCE image browser, added paging to assets list (icons view), added functional tests for sorting and paging of assets list
- sfProjectAnalyserPlugin:
- added alert "Maximum number of actions that should contain a module"
- added alert "Maximum allowed code length for an action"
- applied the html style of the symfony2 check script
- refactoring to keep analysis coherent for all objects
- added a config key check with a "howto" if it can't be found
- added a report summary with the numbers of errors by severity
- modified getAlerts() to take care of alert status (same for countAlert)
- fixed an issue when same modules in multiple applications
- now the parsing of same named modules into different applications is possible
- added an alert for functions without docblock
- corrected docblock length calculation
- added internal codes for each alerts
- added an alert for functions with "sfContext::getInstance" calls
- check_context_get_instance var missing
- added alerts for too big modules templates or partials
- added count of modules templates and partials
- refactored the way alerts are processed
- added alerts for modules empty templates or partials
- a demo module is now provided, it includes an example of each kind of alert
- added a Javascript folding system to have a cascade display
- now a "false" parameter can be use to desactivate an alert (instead of putting a treshhold)
- fixed missing module generic alerts call
- display module line in red if actions or modules have alerts
- added count of code and templates length by project, application, module
- spyMenuPlugin: rewrite code with configCache and handler, configHandler optimisation
- sfExtjsThemePlugin: added fix for columns with sort_method defined in the generator, added boolean_is_yesno to export
- sfImageTransformPlugin: fix for png transparency
- sfEasyGMapPlugin: added possibility to use country code biasing, added UTF-8 decoding of city name (which suffers of double-encoding)
- ahDoctrineEasyEmbeddedRelationsPlugin: fixed is_a() warning
- sfAmfPlugin: changed the way stylesheets and javascripts are included in the amf browser's template
- sfPropel15Plugin: added max_additions options to mergeRelation() and embedRelation(), made it possible to define mysql-specific table attributes for SQL generation, using remove_fields options in optional form when embedding/merging a form
- fpBuildPlugin: removed createTimer method in build task, added support for any path
- ExtjsGeneratorPlugin: added FormInputFile and support for multipart forms, added Ext.ux.TwinFileUploadField.js, moved ComobListAutosizer plugin to it's own file
- sfDoctrineRestGeneratorPlugin: added some events, added a default_format parameter, added PUT support, switched to json as default serializer (faster and less verbose), improved the documentation
- sfTrafficCMSPlugin: bug fix for date format of date widgets in forms, added support to set all filter date formats to a default (which can be specified in app.yml)
- sfTaskLoggerPlugin: added new field to store the id of the last fully processed record
- sfDoctrineJCroppablePlugin: changed debugging to use log instead of printing on the screen
- sfDoctrineApplyPlugin: relies on extension of the sfGuardUser table rather than a profile class, forwards and backwards compatible with sfDoctrineGuardPlugin's current stable release and its new trunk, uses Symfony's built-in SwiftMailer support removing the Zend requirement, all forms are now empty extensions of Base versions so you can do the usual Symfony thing to override them at the project level
- ncPropelChangeLogBehaviorPlugin: added getChangeLogByPkClassName method
- apostrophePlugin:
- the gd backend of aImageConverter now recognizes simple cases where the image is being scaled to its current size or not scaled at all and just copies the source file
- fixed a bug in getRealPage which caused it to return the global page if there was no real page
- improved privilege cache
- checkUserPrivileges is now responsible for converting edit to edit|manage
- fixed error with slideshows in global and virtual pages
- use of the engine-slug parameter with aRoutes resulted in aRouteTools::popTargetEnginePage being called with a slug rather than an engine name
- removed some orphaned code from isPotentialEditor before borrowing it for a backport
- added Base class for aMediaPdfForm for extensibility
- fixed missing parent::configure() calls in the media subtype forms
- new require_leading_slash option to aValidatorSlug
- app_a_default_published added as a more intuitive alternative to app_a_default_on
- category names now trigger search matches in the media repository
- apostropheBlogPlugin:
- don't make Blog actions dependent on the routing
- routing no longer needs to specify what filters are applied for each route
- merged fixes for seperating routing from actions
- two column slot template was outdated
- added robot blocking back for multiple filtering
- when viewing events in an engine index events are shown whenever their date range overlaps the filtered date range
- fixed bug where filtering could break admin view when a selected filter value was deleted
- using unset to clear filters instead of setting them to null
- allow no value to be set when deselecting filters
- Biuro Karier UMCS: (Polish) Biuro Karier UMCS - University Recruitment Agency
They talked about us
- A stack of twits
- Últimos preparativos para las jornadas de Symfony
- symfony 1.3.6 et 1.4.6 publiées (security fix inside)
- symfony 1.3.6 and 1.4.6 security release available at ServerGrove
- Diem experts online
- Interview with Lawrence Krubner
- Apostrophe - наглядная CMS на Symfony
- Doctrine: Опыт работы с миграциями в symfony
- Custom SQL queries in Symfony 1.4 with Propel
- DailyQuote : Changement de techno !
- Rilasciato symfony versione 1.3.6 e 1.4.6
- Doctrine2.0入门和提高
- Decoupling functionality with Doctrine behaviours
- Se publican las actualizaciones de seguridad 1.3.6 y 1.4.6
- Apache et symfony: optimisation
- La UJI acoge la primera jornada en España sobre desarrollo web con Symfony dentro del ciclo decharlas.com
- More slides from symfony2 live conference
- Подключаем CKEditor в Symfony
- Symfony 1.0 AddJoin An Array
- Symfony mit zwei neuen Security-Releases
- symfony:今日のなぞリスト
- Symfony 2 Preview - It has never been so easy
- Tutoriel Symfony - L'aide indispensable à la création d'une application Symfony
- [symfony][propel]DBに登録があるかどうかをチェックするValidator
- Symfony学习笔记一基本东本
- Symfony: Cambios de base de datos en entornos de producción
- Faire un site avec Symfony : l'apparence !
- vim-symfonyの0.10 masterにマージした
05 Jul 2010 8:10am GMT
29 Jun 2010
symfony Project Blog
Security Release: symfony 1.3.6 and 1.4.6
New releases for symfony 1.3 and 1.4 have been packaged sooner than expected to address a security vulnerability reported yesterday. It is strongly recommended that all applications running symfony 1.3 and 1.4 upgrade to this latest release immediately.
The Security Fix
One of the enhancements added to symfony 1.3 and 1.4 was the ability to cache rendered templates even when the current URL includes GET parameters (i.e. /feed?page=2). These parameters are used to create a unique cache key, which is then used to generate the directory structure where the cache files are stored.
These incoming parameters were not being properly cleaned, resulting the potential for directory traversal. For example, the response for /feed?page=.. would be stored higher in the cache's directory structure than intended. The extent of the vulnerability depends on how each deployment's file permissions are configured and only applies to applications with the cache setting enabled in settings.yml.
To see the changeset checkout r30031.
How to Upgrade
If you've checked out a copy of the tag from Subversion you can switch to the latest version:
// symfony 1.3
$ svn switch http://svn.symfony-project.com/tags/RELEASE_1_3_6
// symfony 1.4
$ svn switch http://svn.symfony-project.com/tags/RELEASE_1_4_6
If you are using the PEAR package you can update using the pear command:
// symfony 1.3
$ pear upgrade symfony/symfony-1.3.6
// symfony 1.4
$ pear upgrade symfony/symfony-1.4.6
How to Report Security Issues
As we've stated in the past, please report security-related issues to security [at] symfony-project [dot] com rather than posting them directly to Trac. This will give the core team the opportunity to review and address the issue before word gets out.
29 Jun 2010 5:50pm GMT
27 Jun 2010
symfony Project Blog
A week of symfony #182 (21->27 June 2010)
The Symfony2 Online Conference gathered this week hundreds of symfony developers. The introduction of a brand new form framework and its validation component was the first big announcement of the conference. In addition, Symfony2 unveiled its killer feature, a built-in HTTP accelerator that greatly improves the performance of Symfony2 applications. Lastly, the 30,000th changeset of symfony 1.x branch repository was committed this week.
Development mailing list
- Discussions about Symfony 2 PR 2, Hash algorithms and Symfony2.0 caching
Development highlights
Symfony 1.X branch:
- r29990: [1.3, 1.4] added sfOutputEscaperObjectDecorator::__isset()
Symfony 2.X branch:
- 8c0f7e8: [OutputEscaper] switched to casting object as string rather than call magic method directly
- d6a7b43: [DomCrawler] fixed add() method to support HTML content as string
- 7db3ef7: [WebBundle] renamed collectors.xml to profiling.xml
- 8ea13f9: [HttpKernel] fixed order of arguments for assertions - to be coherent with the order of PHPUnit assertions
- 0e3b88a: [DependencyInjection] fixed inheritence when using extensions
- c486e1b: [DependencyInjection] reverted
- 7661e9a: [HttpKernel] changed the semantic of Response::__toString() to something more useful
- da23747: [HttpKernel] removed Response assertions
- 82d83fc, 449bf62: [PropelBundle] added build-sql command
- 3ec2577: [PropelBundle] added auto package based on namespace
- 097b87b: [PropelBundle] made Build task a hub for other tasks
- 82890a3: [PropelBundle] fixed sqlmap filenames
- a05a82a: fixed autoloading for code coverage
- 97162cf: refactored cookie management
- ed72875: Renamed Bundle classes to be named like the bundle itself for more clarity
- 785da59: [HttpKernel] added the cache system
- 99a63fe: renamed WebBundle to FoundationBundle as the bundle is not just about the web
- 3eb5545: [Routing] added some unit tests
- 6e310bd, bcd4b6d: Integrated Form, Validator, I18N and File component
- ca3dc31: Decoupled Form component from intl extension
- be9148a: Initial entry of DoctrineMongoDBBundle
- 763a99e: [TwigBundle] added an asset tag
Development digest: 85 changesets, 21 bugs reported, 6 bugs fixed, 6 enhancements suggested, 1 enhancement closed, 1 documentation defect reported, and 10 documentation edits.
Documentation
New Job Postings
- PHP Development Team (1 frontend, 2 backend) - Contact: patricia.scaife@gmail.com
New symfony bloggers
- Marc Weistroff blog (feed) (English)
Plugins
- New plugins
- sfLESSPlugin: It's descendant of sfLessPhpPlugin, but with LESS2 compiler in mind.
- sfAdminImprovedPlugin: Develop better backends with symfony.
- unmDoctrineActAsUuidablePlugin: This is a Doctrine behavior that will add a UUID to your tables. It will automatically generate a unique id on the row at insert using the built-in uniqid() php function.
- fpFilePlugin: Simple file abstration layer under symfony framework structure. Provides temp folder object, public file and so on.
- ioEditableContentPlugin: Allows for frontend/inline editing of fields and forms. The goal is to allow content to be inline-editable without getting in the way of the developer.
- sfDoctrineSlotPlugin: Allows for non-existent columns of data on a model to be persisted and retrieved as if those columns existed in the schema.
- sfTheme2Plugin: allows for themes to be used with your symfony project.
- lyMediaManagerPlugin: The plugin offers a simple web interface to upload and manage images, documents and other media files directly from the backend of your symfony application. File upload and file browsing features can be easily integrated into the TinyMCE editor.
- fpBuildPlugin: Simple task that runs a profile file with a set of console commands. In doc directory you can find standard profiles.
- Updated plugins
- ExtjsGeneratorPlugin:
- tweaked isEmpty formfilter checkbox
- fixed partials config
- renamed extjs components attributes to variables
- added methods array to all extjs components
- improved generated partials with examples
- formatted javascript files
- added new ux.IsEmptyCheckbox
- switched widgets to use new ux.IsEmptyCheckbox
- added sfExtjs3Plugin configurations for our ux javascript classes
- fixed ux.IsEmptyCheckbox boxLabel alignment
- fixed regression with object_actions
- fixed naming of javascript resources
- updated Ext.ux.IconMgr.tar.gz with minimized javascript
- added minimized javascript for all javascript assets
- added env detection to use minimized javascript when in prod environment
- fixed bug with gridpanel plugin configuration
- switched tabpanel default TabCloseMenu plugin to use new extjs plugin loading method
- implemented csv export for list as default list action
- fixed bug with defaultValue option in ExtjsWidgetFormSelect
- fixed bug on boolean filters having withEmpty checkbox
- removed extra whitespace in configuration parts
- added getFilterDefaults population when widgetOptions defaultValue is used
- sfProjectAnalyserPlugin: added code and comments length for actions, added total code length for modules, added an alert management, added a yaml multi config file
- sfMarkdownPlugin: removed support for Markdownify
- sfPhpunitPlugin: backup sfConfig before each test and restore after
- sfEmailMeAFireShotPlugin: added proper routing
- nahoSecurityPlugin: fixed credentials setting, fixed superuser credential check
- sfDatagridPlugin: fixed js when no freezepanes
- isicsBreadcrumbsPlugin: added plugin configuration class, added options to breadcrumbs items, added missing comments for isicsBreadcrumbs methods, updated package dependencies and API, added support for escaping strategy, added options for root item in component
- ncPropelChangeLogBehaviorPlugin: refactored ncPropelChangeLogBehavior class, fixed issue with postDelete() method when there wasn't a sfContext instance available
- sfExtjs3Plugin: added ability to add to sf_extjs3_classes via another plugin, removed ux class definitions
- sfImageTransformExtraPlugin: added a task to check if everything is setup correctly for caching generated, added rudimentary test case for new check-caching task, added check for sfImageTransformator module to be enabled, restructured README and added some more things to the TODO list
- sfPropel15Plugin: fixed mergeRelation() with latest changes in sfForm
- diemProject:
- core: fixed possible JS error on text widget editing window
- front: allowed resizing in widget editor
- admin: proper position sorting in "manage meta" table
- apostrophePlugin:
- fixed logic for displaying the 'this page' button and the actual 'this page' div
- show "this page" dialog to editors and managers, not just admins
- fixed editPdfSuccess, editVideoSuccess and _editImage partial form markup
- permissions was in different locations in the edit form across media types
- all the form classes in the main lib/form folder now extend a Basea* class
- the privileges portion of the page settings form is broken out to a single allPrivileges partial so that you can easily override that to add or remove parts of it when templating out the page settings form
- aPageTable::checkPrivileges is now a wrapper around $aPageTable->checkUserPrivileges()
- $aPageTable->checkUserPrivilegesBody() is the core privilege checker method
- aTools can now be extended at the project level without copying and pasting the entire class
- aTools::$savedCurrentPage replaced with aTools::$pageStack, which allows arbitrarily deep nesting of slots on virtual pages
- Learning English Online - Tasks: (English) learning site for learners of English
- Maastermedia, business solutions: (Slovenian) the website of a Slovenian creative agency
They talked about us
- The State of Symfony 2 - Online conference to reveal the next killer feature
- ¿Cuál será la sorpresa de Symfony2?
- Is the iPad relevant for PHP developers and symfony users?
- la killer feature di Symfony 2
- Resumen de la conferencia State of Symfony2
- Symfony 2 online - ожидал большего
- State of Symfony 2 online conference - a killer feature revealed!
- Primeras Jornadas symfony en España
- Slides for The State of Symfony2 Conference
- Presentaciones de la conferencia State of Symfony2
- sfImageTransformExtraPlugin - Task added to verify thumbnail caching
- Slides from Symfony Live 2010
- Actualizada la documentación de Symfony2
- The Presentations From Recent Symfony2 Live Conference
- Using SQL built-in functions in doctrine queries
- The best feature that Symfony2 will bring us is probably not your first guess
- Отчет по Symfony 2 Online Conference
- Symfony: cambios de base de datos en entornos de producción
- Campos de fichero en formularios embedidos en Symfony 1.4
- Symfony Camp UA 2010 welcomes participants
- Practical symfony 3 дахь өдөр
- Massimiliano Arione - Symfony
- Graficando tu esquema de base de datos en Symfony
- 「PHP×symfony」 開発者向け、一歩先をいくためのテクニカルセミナー、第二弾の開催
- Symfonyで外部のプログラムを実行する
- [symfony] 別なappのroutingやpartialを読み込めるsfAppChange
27 Jun 2010 7:40pm GMT
24 Jun 2010
symfony Project Blog
Symfony2 Online Conference
Yesterday and the day before, Sensio Labs organized the first Symfony2 online conference. It was a great success with more than 350 attendees (from over 35 different countries), and a dozen hubs around the world. Thankfully, the platform worked fine.
For those who did not attend the conference, the slides are available now:
24 Jun 2010 1:07pm GMT
22 Jun 2010
DevZone - Items tagged as: Zend Framework
Zend Framework 1.10.6 Released
The Zend Framework team announces the immediate availability of Zend Framework 1.10.6, our sixth maintenance release in the 1.10 series. This release includes more than 30 bug fixes. You may download it from the Zend Framework site .
22 Jun 2010 6:22pm GMT
21 Jun 2010
DevZone - Items tagged as: Zend Framework
Zend Config tree solution
The best part of my favorite PHP framework, Zend framework is Zend_Config. With Zend Config you can run you web application with more power full configuration that any one can change your application setting for use. Read more information about Zend Config at Zend framework manual for Zend Config. But in most web application you may have many configuration file with special format such as INI , XML or PHP . Also some of configuration is for one part of your application and may you put in special folders.
21 Jun 2010 4:40pm GMT
17 Jun 2010
DevZone - Items tagged as: Zend Framework
Zend Framework Tutorial Series: Part 2 – Debugging your application
Continuing with the tutorial series, we will see how to debug the application we created in the #1 series of the tutorials. In case you missed it, in our first tutorial, we have seen how to structure and code a brand new ZF application to use modules (you can also view that article here ) Debugging include easy to use methods of printing data on the screen, including ZFDebug Toolbar in order to manage all errors and queries, using the logger to log messages to Firebug, using a simple debug function that will place debug messages in your ZFDebug Toolbar, in a special Debug panel, using a redirect debug function in order to see what is happening during your requests, using redirect in a Controller plugin.
17 Jun 2010 8:57pm GMT
07 Jun 2010
DevZone - Items tagged as: Zend Framework
Zend Framework Module Based Application
In this first article of the series, we will discuss about the best way (in my opinion) to structure your Zend Application in order to have maximum flexibility but also a good defined structure of the classes/files. These will be a series of tutorials which are meant to show you or guide you through developing a complex application with Zend Framework 1.10. The series consists of the following parts: a) Setting up a module based application b) Setting up helper plugins, methods & debugging with ZFDebug c) Setting up a login page and signup page with captcha d) Setting up OpenID to login/create account e) Setting up an API to create/login an account f) Improving performance implementing Zend Cache
07 Jun 2010 9:10pm GMT
04 Jun 2010
DevZone - Items tagged as: Zend Framework
Chris Hartjes' Blog: Testing Controllers Hiding Behind Zend_Auth
On his blog today Chris Hartjes has a new post about testing your Zend Framework application's functionality that lives behind a Zend_Auth authentication.
04 Jun 2010 7:01pm GMT
26 May 2010
DevZone - Items tagged as: Zend Framework
Zend Framework 1.10.5 Released
The Zend Framework team announces the immediate availability of Zend Framework 1.10.5, our fifth maintenance release in the 1.10 series. This release includes around 60 bug fixes, many due to the bug hunt days held last week . You may download it from the Zend Framework site .
26 May 2010 8:02pm GMT
25 May 2010
DevZone - Items tagged as: Zend Framework
Web Builder Zone: Zend_Test for Acceptance TDD
On the Web Builder Zone (of DZone ) Giorgio Sironi has posted an article looking at the Zend_Test component of the Zend Framework and how to use it for acceptance test-driven development .
25 May 2010 10:20pm GMT
PHPBuilder.com: Managing Zend Framework Layouts
On PHPBuilder.com there's a new tutorial on layouts in Zend Framework applications. The tools the framework gives you makes things much simpler when it comes to changing layouts and updating the general structure of your site.
25 May 2010 6:14pm GMT
19 May 2010
cakebaker
OpenID component v2010-05-19 released
As mentioned in the title, I released a new version of the OpenID component today. It's a maintenance release: the only change is an update of the bundled PHP OpenID library from version 2.1.2 to 2.2.2. With this change you no longer have to patch the OpenID library if you are working with PHP 5.3. [...]
19 May 2010 7:51am GMT
18 May 2010
DevZone - Items tagged as: Zend Framework
Announcing May's ZF Bug Hunting Days
It's that time of the month again! Thursday and Friday, 20-21 May 2010, Zend Framework will host its monthly bug hunt. For those of you unfamiliar with the event, each month, we organize the community to help reduce the number of open issues reported against the framework. Past events have netted over a 100 issues closed in just two days. We'd like to see that kind of momentum in this week's bug hunt. Whether they are big bugs or small bugs, remember: all bugs worthy of being squashed.
18 May 2010 2:24am GMT
08 May 2010
cakebaker
Sassy CSS
Those who follow me on Twitter probably know about my love-hate relationship with CSS. To ease the pain of working with CSS I switched to Compass, a stylesheet authoring framework. With Compass, you write the stylesheets in Sass (Syntactically Awesome Stylesheets) instead of CSS. Sass is basically CSS without brackets and semicolons, as you can [...]
08 May 2010 1:13pm GMT
20 Apr 2010
cakebaker
Speed up your tests with Hydra
Nowadays most computers come with more than one processor. And so it makes sense to use the additional processing power to speed up your tests by distributing them across the available processors. One tool that helps with this is Hydra. It allows you to distribute tests across multiple processors and machines, and currently supports the [...]
20 Apr 2010 2:52pm GMT
13 Apr 2010
cakebaker
Support for Google Apps OpenIDs
In a recent comment John mentioned that the OpenID component doesn't work with Google Apps OpenIDs. And he was right. The reason it didn't work is that Google introduced it's own OpenID discovery protocol as they faced challenges not addressed by the current version (2.0) of the OpenID standard. And this means such OpenIDs are [...]
13 Apr 2010 3:13pm GMT
02 Apr 2010
cakebaker
let()’s write slightly cleaner specs
When writing specs for your code, you often have to do some initialization. With RSpec I do this initialization in a "before" block as shown in the following example: describe BlogPost do before do @blog_post = BlogPost.create :title => 'Hello' end it "does something" do @blog_post.should ... end it "does something else" do @blog_post.should ... [...]
02 Apr 2010 9:08am GMT
11 Mar 2010
CI News
EllisLab moves to Mercurial, Assembla, BitBucket; CodeIgniter 2.0 Baking
EllisLab today announces changes to our internal development processes, including dropping Subversion in favor of Mercurial and adopting Assembla as our agile software development management tool. Along with these changes, CodeIgniter 2.0 pre-release code is in development, and is now hosted at the Mercurial-focused social coding site BitBucket.
At EllisLab we make ExpressionEngine, the CMS for web professionals, and CodeIgniter, the only PHP framework to receive praise from Rasmus Lerdorf, the creator of PHP. We're based out of Bend, Oregon, but only two staff members live there. The rest are scattered roughly from West to East in Portland, Missouri, Illinois, Toronto, North Carolina, Ireland, the UK, Germany, and Austria. In addition to very little face to face interaction with one another, our developers have to deal with as much as a 9 hour difference from other team members. So we've adopted and continue to adopt methodologies and technologies to bridge those gaps and enable us to be as productive as if we were all in the same building, working the same hours.
Version Control
One no-brainer, and I hope most of you are using it as well, is version control. Since 2005, we've been using Subversion, and it has performed admirably, particularly during the majority of ExpressionEngine's life when there were only two Sith developers working on a project. The first year that Subversion was in use, we even shared a single user and did not use commit messages. That works fine when you can read the rest of your team's minds, and you aren't using version control for revisioning, but merely for convenient file sharing.
But Subversion comes with a lot of baggage, some of which becomes heavier in proportion to the distance between team members, and as both your projects and team increase in size. Commits and diffs become laborious on even the fastest of networks. The size of the repository balloons if you try to use basic features of branches and tagging. Renaming and moving files is a pain, and can jam up your fellows' repositories. And don't even think about working independently and merging.
These and other issues led us to examine dozens of version control systems (VCSes) to find the right fit for our team. We looked at Git first, whose growth can be largely attributed to the popularity of GitHub, then Bazaar, darcs, Monotone, Perforce, BitKeeper, and so on. But after weeks of research and test use, we settled comfortably into Mercurial.
Now before the Git readers get their pitchforks ready and head for the comments, let me be clear that we are not at odds. Both are great distributed version control systems (DVCSes), have nearly identical features, and have a common enemy: Subversion. So our switch to Mercurial means that Git users win too - joining a growing army against centralized version control. It just happens to be that a few of the divergent features swing slightly towards Mercurial for our specific needs, but above all, our team enjoyed using Mercurial more than Git. Not that we didn't enjoy Git, we just enjoyed Mercurial more, and why is hard to quantify but there was obviously no reason to fight it. We're here to write code and create great applications; the more that our use of any VCS can fade into the background to accomplish that goal, the better.
Scrum
When your development team grows beyond two people, the mind meld dissolves, the ability to know at any given moment what the rest of the team is doing, and how well they are doing it dissipates. Cowboy coding's ability to be effective diminishes. So a little over a year ago, we began looking at various agile software development methods, and decided to try out Scrum. It's been a tremendous success.
To bring Scrum to a team spread across the world, we've been using technology to create a virtual office. Google Docs for shared spreadsheets to track our Sprints and burndown charts. Planning Poker to help us plan Sprints. Neither tool ever felt like a perfect match for us, though. Whether it's the clumsy manner in which product backlog items are stored and moved to a new spreadsheet to create Sprints, or not having the hour estimation card that we really wanted to play - resulting in a lot of "I estimated 16 hours but I really mean 12" - these tools were getting us by, but were not the most effective.
Enter Assembla, a tool we came across in our search for a new VCS. Assembla is the perfect blend of what our developers and our product owners need for project management, and that mix is remarkably difficult to find. It gives developers the ability to use any VCS they like, including those on your own servers, fully integrated with a ticketing system that is built from the ground up for agile software development. Product owners are given a visual ticket organizer to effortlessly create Sprints from categorized backlogs. Add to that a Scrum tool to make standing meetings less intrusive to the varied working hours of our distributed team, and it's near perfection.
Assembla is the product that is saving us from having to write our own agile software management tool. We've moved all of our software projects into Assembla. This is a tool anyone working in a team should check out.
This is a behind the scenes change of course so it may seem inconsequential, but all of our users will benefit. Like Mercurial, this logistical portion of our virtual office can just do what it's meant to do and thus fade into the background, letting us focus on getting things done instead of on processes.
CodeIgniter
Of our communities, CodeIgniter benefits the most directly from these changes. The adoption of a new VCS and new internal development tools allows us to not only be more effective in CodeIgniter's development, but also enables us to give you more and to interact more directly with you.
Starting today, CodeIgniter 2.0 is baking, and I'm thrilled to announce that with Subversion gone, in-development code is available publicly on its new home: BitBucket.
After adopting Mercurial, joining BitBucket was a perfect fit for our open source projects. It has a beautiful source code browser and will make watching code changes a breeze with its graphical changeset viewer and RSS/Atom feeds.
It also comes with a rich social layer, quick access to tagged versions, along with forking and patch queue management for advanced users. Do you find yourself making the same modifications to CodeIgniter before beginning a project? BitBucket and Mercurial can help you do that and share it with others with ease, using any version in the upstream repository.
We're really excited to watch CodeIgniter's growth accelerate due to these changes. A discussion of CodeIgniter 2.0's features and direction will be forthcoming, so be looking for that in the future in the news section of CodeIgniter.com. What are you waiting for? Go sign up at BitBucket and become a zealot, following the CodeIgniter project!
11 Mar 2010 4:00pm GMT
04 Mar 2010
CI News
EECI2010 Full Ticket Giveaway
The ExpressionEngine and CodeIgniter Conference (EECI2010) in May is the CodeIgniter and ExpressionEngine event to go to this year. We want you to join the fun, so we're giving away a full conference ticket to the year's biggest event. Read the full details and how to enter at the ExpressionEngine blog.
Read details for the EECI2010 Full Ticket Giveaway
04 Mar 2010 8:48pm GMT
WithCake.com Companies Hiring
qpLogic Europe
We can use immediately an experienced Cake developer for assisting us with developing a multi-lingual application that needs some Jake/Joomla (css) integration. We have continuously Cake projects and prefer to work with a team of individual developers in multiple time zones. Please show me that you are experienced, affordable and have at least 24 hours available per week (40 is better ;-).
04 Mar 2010 11:54am GMT
23 Feb 2010
CI News
EllisLab @ SXSW 2010 and You
Over the course of the last few years we have gradually changed our approach to SXSW, preferring to move toward a small-group discussion format.
This is a great move for EllisLab and for the community; there is an immeasurable value to this discourse. This year we are excited to continue with this format and to add to it; this year, you, through the services at UserVoice, will have the opportunity to choose where we meet and what we discuss.
Read the full details on the ExpressionEngine blog (direct link to entry). Of particular note for CodeIgniter users, we will will be offering private Lunch with EllisLab events to exceptional contributors to the community, including those who run CodeIgniter community sites. This is your opportunity to tell us what we can do to support your endeavor while enjoying a meal on our tab.
(Note: user your CodeIgniter.com account to log in to the ExpressionEngine.com forums)
23 Feb 2010 7:34pm GMT
04 Feb 2010
CI News
Subversion Server Change
Our Subversion repositories have moved. Please update your repositories or check out new ones from the new location: http://svn.ellislab.com/CodeIgniter/trunk
As always, information about our Subversion repositories can be found on the download page and installation instructions.
04 Feb 2010 4:28pm GMT
17 Jan 2010
cakebaker
Rails 3 and Passenger
This weekend the RailsBridge people have organized a bugmash with the motto "Do One Thing for Rails 3″, and so I took the opportunity to experiment a bit with the coming Rails 3. After following the instructions for creating a new Rails 3 app (using the -database=mysql parameter for the "rails" command) I noticed that [...]
17 Jan 2010 9:46am GMT
31 Dec 2009
cakebaker
Accepting the Google OpenID with PHP OpenID
If you are using the PHP OpenID library (which is also used by my OpenID component for CakePHP), it is possible that you get an "Invalid OpenID" error when you try to login with the Google OpenID (https://www.google.com/accounts/o8/id), or any other OpenID that uses "https". In this case, the following steps might help to fix [...]
31 Dec 2009 4:45pm GMT
12 Dec 2009
cakebaker
Attribute Exchange support for the OpenID component
The OpenID Attribute Exchange specification (or AX for short) has been around for quite a while, though I ignored it so far because at the time it was introduced (almost) no OpenID provider supported it. However, after Yahoo! announced they support Attribute Exchange, and someone recently mentioned it in a mail, it was time for [...]
12 Dec 2009 5:30pm GMT
06 Dec 2009
CI News
CodeIgniter Community Chieftain Jamie Rumbelow
We're happy to announce the next CodeIgniter Community Chieftain, Jamie Rumbelow! This invitation only volunteer program focuses on identifying stellar examples from the community, and letting them utilize their strengths to help maintain the community and act as a liaison when needed to EllisLab.
Jamie will be taking the reigns from our first Community Chieftain, Michael Wales. Thanks Mike for your year and a half of volunteer service, and welcome aboard, Jamie!
06 Dec 2009 6:49pm GMT
11 Sep 2009
CI News
CodeIgniter v1.7.2 Released
EllisLab is pleased to release CodeIgniter version 1.7.2 for ready download. What's new? Among other changes:
- Compatible with PHP 5.3.0
- Added a new Cart Class.
- Improvements to the Form helper
- Added is_php() to Common functions to facilitate PHP version comparisons
- Modified show_error() to allow sending of HTTP server response codes, and all internal uses now send proper status codes.
- Numerous bug fixes
Version 1.7.2 has been baking in the subversion for quite some time, and has been compatible with PHP 5.3.0 since late July, but many users understandably haven't been running from the in-development version. While I'd have liked to have had time to add a few more "big ticket" items to this release, making it 1.8, time is a cruel mistress. Many of our users develop on Macs, and OS X Snow Leopard ships with PHP 5.3.0, so we felt is was more important to push out this stable maintenance release instead of waiting for an even later date - it's been almost seven months since a refresh, afterall. But there are still a few good surprises, and welcome changes. Enjoy!
11 Sep 2009 3:03pm GMT
11 Feb 2009
CI News
CodeIgniter 1.7.1 Released
CodeIgniter Version 1.7.1 has been released. This version contains many new features and enhancements, as well as nearly three dozen bug fixes. It also includes a critical security update for applications using the new Form Validation library with field arrays. For a list of all changes please see the Change Log.
If you are currently running CodeIgniter please read the update instructions.
Note: If your browser does not display the 1.7.1 user guide please clear your cache and reload the page.
11 Feb 2009 1:24am GMT
23 Oct 2008
CI News
CodeIgniter 1.7.0 Released
CodeIgniter Version 1.7 has been released. This version contains a number of new features and enhancements, as well as many small improvements and bug fixes. For a list of all changes please see the Change Log.
If you are currently running CodeIgniter please read the update instructions.
Note: If your browser does not display the 1.7 user guide please clear your cache and reload the page.
23 Oct 2008 11:48pm GMT
15 Aug 2008
CI News
CodeIgniter Community Voice - HOWTO: Set up a CodeIgniter project in Subversion
EllisLab is blessed with two of the greatest communities that can be found anywhere on the internet in ExpressionEngine and more recently CodeIgniter. Despite being a relative newcomer to the scene, the people attracted to CodeIgniter are among the smartest, most talented and down-to-earth developers around today. From time to time we want to highlight some of these talented people, and we've asked them to lend their voice to ours. Have your voice. I hope you enjoy what they have to say as much as I did.
This week, our Community Voice author is Bruce Alderson, known on the forums as madmaxx, who has written a wonderful guide on how he uses subversion with CodeIgniter. Bruce is an elder web monkey and systems programmer. He totally digs the craft of building software, making cool stuff, and causing people to laugh so hard liquids are forced from their nose. He's currently the Chief Monkey at Discovery Software and author of the not-at-all famous robotpony.ca. (Go read the one about shaving your yak)
After working with CodeIgniter for a few months (and WordPress for a few years), I've settled on a way to set up web projects that works well for development, deployment, and source control. Note that this style of layout only works on systems like Mac and Linux that have useful symlinks.
First, the folder layout
some-domain.com/
app/
config/
controllers/
(etc)
public/
.htaccess -> ../site-extras/.htaccess
favicon.ico -> ../site-extras/favicon.ico
js/ -> ../site-extras/js
images/ -> ../site-extras/images
system/
application/ -> ../../app/
site-extras/
js/
images/
.htaccess The layout favours a vhost setup, and splits your code and resources out of the CodeIgniter sources. Splitting your stuff from the CodeIgniter stuff lets you link your Subversion repository to theirs, so that you can keep it in sync with their development.
How it's done
- Set up your source tree (not including the symlinks or CodeIgniter source) and add to your Subversion repo.
- Add a svn link to CodeIgniter's repo (via svn propedit svn:externals, with public http://dev.ellislab.com/svn/CodeIgniter/tags/v1.6.2/) and run a svn update to grab the framework. See the Subversion docs for details.
- Copy the CI application folder to the site root (as app), remove the .svn folders, symlink to application, and add it to your local svn repo.
- Symlink the other site-extras to the public webserver root, and configure your local machine (and public webserver) to point to this root for the domain's virtual host setup.
- Alternatively, you can modify the $application_path to point to ../public/app/ (I'm not sure which is better yet). See the CodeIgniter docs on apps for more details.
You now have a CodeIgnitor project ready for development. You can keep up-to-date with CodeIgniter updates, deploy easily, and get at your code without wading through extra levels of hierarchy.
15 Aug 2008 11:49am GMT
31 Jul 2008
CI News
CodeIgniter Community Voice - Generating PDF files using CodeIgniter
EllisLab is blessed with two of the greatest communities that can be found anywhere on the internet in ExpressionEngine and more recently CodeIgniter. Despite being a relative newcomer to the scene, the people attracted to CodeIgniter are among the smartest, most talented and down-to-earth developers around today. From time to time we want to highlight some of these talented people, and we've asked them to lend their voice to ours. Have your voice. I hope you enjoy what they have to say as much as I did.
This week, our Community Voice author is Chris Monnat, known on the forums as mrtopher, who writes a helpful step by step guide to generating PDF files from CodeIgniter. Chris is a full time web application developer and part time entrepreneur. In addition to building web sites for the medical industry during the day, at night Chris also runs his own development company Left of Center Communications. He recently started a personal blog at http://www.chrismonnat.com where he keeps a record of his exploits and discusses, among other things, CodeIgniter.
PDF files rock! Some of the programs used to view them could use some work, but the file format itself is real handy. As a programmer I have found PDF's to be most helpful when generating reports that need to be printable. I know we are all supposed to be doing our part to make our offices "greener" and use less resources like paper. But some things just need to be printed (especially when your talking about the financial and legal industries).
When generating reports in PDF format you suddenly have a lot more control over layout and design than you do with plain old HTML and CSS (although much progress is being made with print style sheets). You can create some really nice reports on the fly that your users can view, save for later or e-mail to their co-workers for review. In this post I will show you how I generate PDF reports using CodeIgniter.
Quick Note
There are a number of PHP libraries out there for generating PDF files (like FPDF, Panda and dompdf) but the best one I have come across is the R&OS pdf class. I was first introduced to it from the PHP Anthology first edition by Harry Fuecks. I have tried other PDF libraries (some PHP 5 specific and some not) and none of them have been able to provide me with the same control or ease of use that the R&OS class has which is why I'm using it for this tutorial.
Getting Started
Before we start, lets get everyone to the same place so you can follow along as we go. I've prepared a .zip file containing everything you'll need to follow along. The archive includes CI 1.6.3 along with all the code and libraries we will discuss in this tutorial. Simply download the archive, unzip it on your web server and follow along.
I have done all the work of downloading the code library and putting the files in their right place for you, but I wanted to mention where things were for the detail oriented among you. There are 2 files that are necessary in order to use the R&OS library: class.ezpdf.php and class.pdf.php. Those two files have been placed in the application/library folder. R&OS also requires some font files in order to function and they have been placed at the root of the .zip file in a folder called fonts.
You do have to make a minor modification to the class.ezpdf.php file so that it will work properly within CI. First I renamed the file to cezpdf.php, which makes it easier to load using the CI loader. Then you have to modify the include statement on line 3 to:
include_once(APPPATH . 'libraries/class.pdf.php'); This will keep PHP from saying that it can't find included file. Once those modifications are made the R&OS class is ready to use with CI.
In the archive, I have also made a controller called tutorial.php and a helper called pdf_helper.php both in their respective directories. With the background info. out of the way, lets get our hands dirty with a real simple example.
Hello World
function hello_world()
{
$this->load->library('cezpdf');
$this->cezpdf->ezText('Hello World', 12, array('justification' => 'center'));
$this->cezpdf->ezSetDy(-10);
$content = 'The quick, brown fox jumps over a lazy dog. DJs flock by when MTV ax quiz prog.
Junk MTV quiz graced by fox whelps. Bawds jog, flick quartz, vex nymphs.';
$this->cezpdf->ezText($content, 10);
$this->cezpdf->ezStream();
} The above code produces a PDF file like this.
In the above, first thing we do is load the R&OS library for use. Next we use the ezText() function to create a title for our document. This function takes the text it will display as the first argument, the size of that text and an optional array of additional configuration options. In this instance we pass along a justification option of center. That will center our title at the top of our document.
After the title we insert some extra white space using the ezSetDy() function. After the whites pace we put the rest of the content for the document in a variable called $content and add it to our document using the ezText() function again. Finally, we create our document using the ezStream() function which actually creates the document and sends it to the users which prompts them to view/download the generated PDF document.
Handling Tabular Data
When your dealing with business reports the odds are good that you will need to generate reports with tables to display tabular data. From my experience with other PDF libraries, this is not an easy task. But with the R&OS library it's about as hard as creating an array.
function tables()
{
$this->load->library('cezpdf');
$db_data[] = array('name' => 'Jon Doe', 'phone' => '111-222-3333', 'email' => 'jdoe@someplace.com');
$db_data[] = array('name' => 'Jane Doe', 'phone' => '222-333-4444', 'email' => 'jane.doe@something.com');
$db_data[] = array('name' => 'Jon Smith', 'phone' => '333-444-5555', 'email' => 'jsmith@someplacepsecial.com');
$col_names = array(
'name' => 'Name',
'phone' => 'Phone Number',
'email' => 'E-mail Address'
);
$this->cezpdf->ezTable($table_data, $col_names, 'Contact List', array('width'=>550));
$this->cezpdf->ezStream();
} The above code should produce a PDF file like this.
In the above code I create an array of data called $db_data. I put this together so that it imitates a typical database result set because that's usually where you will be getting your data from. Below my data array I have created a $col_names array that associates the data elements in the $db_data array with a column title for the table. This is where the R&OS gets the title to display at the top of each table column. Once I have the data and column titles I create the table by calling the ezTable() function. This function takes the data array, an associative array for column names, the title for the table and an optional array of configuration options. There are a number of options that can be configured through that last optional array, but I'm not going to go into them in this tutorial.
Headers and Footers
Most reports in a corporate setting come with some kind of standard header and/or footer. They can include anything from the date/time generated, the user who generated them, to page numbers and the like. Headers and footers are handy to have, but unfortunately there isn't a real good way to add them to printable reports generated in HTML and CSS. There's one more reason to use the portable document format when creating printable reports.
The process of adding headers and footers to a PDF using the R&OS library is the slightest bit complicated. There are a lot of lines of code just to accomplish it, that's why I have created a helper file. Since the code is in a helper function, you just need load the helper and call the function whenever you need to add headers/footers to a PDF.
function prep_pdf($orientation = 'portrait')
{
$CI = & get_instance();
$CI->cezpdf->selectFont(base_url() . '/fonts');
$all = $CI->cezpdf->openObject();
$CI->cezpdf->saveState();
$CI->cezpdf->setStrokeColor(0,0,0,1);
if($orientation == 'portrait') {
$CI->cezpdf->ezSetMargins(50,70,50,50);
$CI->cezpdf->ezStartPageNumbers(500,28,8,'','{PAGENUM}',1);
$CI->cezpdf->line(20,40,578,40);
$CI->cezpdf->addText(50,32,8,'Printed on ' . date('m/d/Y h:i:s a'));
$CI->cezpdf->addText(50,22,8,'CI PDF Tutorial - http://www.christophermonnat.com');
}
else {
$CI->cezpdf->ezStartPageNumbers(750,28,8,'','{PAGENUM}',1);
$CI->cezpdf->line(20,40,800,40);
$CI->cezpdf->addText(50,32,8,'Printed on '.date('m/d/Y h:i:s a'));
$CI->cezpdf->addText(50,22,8,'CI PDF Tutorial - http://www.christophermonnat.com');
}
$CI->cezpdf->restoreState();
$CI->cezpdf->closeObject();
$CI->cezpdf->addObject($all,'all');
} An example of how I use this helper is provided in the headers() function of the tutorial.php controller. That code produces a PDF file like this.
The above code is the prep_pdf() function located in the pdf_helper.php file. This function does all the hard work of creating a footer for my PDF reports for me. All I have to do is load the helper in my controller and call the function. Since the reports could be portrait or landscape I have also included the ability to pass the orientation to the function and the code will modify the document margins accordingly.
I'm not going to go into a lot of detail about the above code because this tutorial could become very long. But the general idea is that I'm using the R&OS library to modify the margins of the document I'm creating, add page numbers and text to the very bottom of the document. R&OS has some functions that makes this easy like ezStartPageNumbers() and line(). Once all that is done I can add any kind of content to the document back in my controller and then just call ezStream() to generate the final document.
Wrap Up
I barely scratched the surface of what you can do with the R&OS PDF library in this tutorial. I encourage you to spend some quality time with the readme.pdf documentation file that comes with the library when you download it. That file goes over all the functions and their options in great detail.
So there you have it, generating PDF files with CodeIgniter and the R&OS library. If this method doesn't quite do it for you, there are a few helpful articles on the CodeIgniter wiki, like this one and this one, which walk you through some additional options. Whatever solution you choose I hope this tutorial has helped to introduce you to some of the options you have at your disposal for creating PDF reports with CodeIgniter.
31 Jul 2008 4:33pm GMT
21 Jul 2008
CI News
CodeIgniter Community Voice - Lee’s Lost Bet
EllisLab is blessed with two of the greatest communities that can be found anywhere on the internet in ExpressionEngine and more recently CodeIgniter. Despite being a relative newcomer to the scene, the people attracted to CodeIgniter are among the smartest, most talented and down-to-earth developers around today. From time to time we want to highlight some of these talented people, and we've asked them to lend their voice to ours. Have your voice. I hope you enjoy what they have to say as much as I did.
This week, our Community Voice author is Lee Tengum, who discusses how CodeIgniter has cost him over $8,800 in beer and soft drinks. Lee is a bit of a serial entrepreneur, with 5 successful startups under his belt including the recently launched http://cleverandy.com. He has become something of a cookie! jar of startup knowledge. When he is not managing his team of contractors he blogs about the trials and tribulations of his startups at http://tumbledry.ca.
It all started with an idea at 4 a.m. on a Tuesday morning that brought us to CodeIgniter.
We were neck deep in a deadline and sinking fast. We knew we needed help.
After puling some strings that bought some time we quit work for a week - well, client work at least. There were our own issues to solve.
We had amassed a team of roughly 14 at this point and had no way to efficiently manage who was doing what for how much and how long; in fact we were often surprised by code submissions.
That's a sad place to be.
We had been building in the 'flavor of the weak' when it came to frameworks and often chose whatever the contractor was fluent in to save time (which != saved money).
Not only were we not communicating, but we were reinventing the wheel for every project. Have I mentioned how sad of a place that is to be?
Back to 4 a.m.
Doug is one of my closest friends, and a trusted peer. He suggested we should develop a contractor management system and that we should build it all on CodeIgniter. At this time I hadn't seen sleep in nearly a day, consumed almost seven liters of coffee, the "development tub" was empty and we were trying to finish a RoR project that a contractor bailed on. I didn't want to hear about another &^%in framework, I just wanted this to be done.
Thankfully my friend couldn't understand the word "no" and kept pressing. He went on about how anyone with knowledge of PHP can build with this, its development cycle and the community that was forming around it. I still wasn't convinced but he assured me this would be the last time we changed frameworks and proposed a friendly bet.
I hate that I love gambling. I don't have a problem, per say, but I always lose. The problem is that my pride drives me to bet anyways. Besides I relished the opportunity to prove him wrong.
So the bet was laid. We would build the contractor management system in CI and all client projects for one month with CI. At the end of that month if I wanted to go back to another framework and could justify it rationally with solid points then he would keep the Development Tub full for a full year (a cost of roughly $100/week). If we stayed with Code Igniter I would the one stocking the tub for the next year and I would also have accept his offer to buy into my company and become a partner.
On Wednesday morning we filled the tub (again not a problem… really) and set out to build our app. We outlined what we wanted, mapped it out on the whiteboard, set up a Basecamp project for it, defined our milestones and set Saturday as launch day.

Beer? Check.
Monster energy drinks? Check.
Coffee? Check.
M&M Peanuts? Check.
Babysitter? Check. (We're parents…)
Pizza? Maybe.
Basecamp set up? Check.
SVN Server? Check.
While I depleted the tub and read the user guide, Doug was getting down to business. By the time I'd figured out how I was going to tackle my portion of the build he'd built the user authentication as well as the management section. Doug was already adding features to our "Wish List" in Basecamp and checking off milestones. Roughly 9 hrs into our project we started completing items on the wish list, which had never happened before. The wish list had never become a checklist before a deadline and I was starting to worry.
In the wee hours of Thursday morning we headed home to sleep. The following day we sent login details to our contractors and set up a basecamp project to log bugs. We fixed the stupid little ones that we missed and made changes on the fly. By the end of the day I had a huge overview of our team of contractors and a vision of things to come. I never did see the 48 hr Milestone reminder emails from Basecamp… again I was seeing a change.
By the end of the month we had more than a few client sites built on CI. We also had a process for development laid out and the term Rapid Development was taking on meaning with me. I was happy, the clients were happy and we had a team we could manage… and then reality sunk in.
I hate losing, even more so I hate losing to people I like winning against. I lost the bet. Though I gained a valuable business partner, a managed team, profitability and a kick ass framework to build it upon… I am forever filling the tub.
And with ExpressionEngine 2 built on CI (Which we are using extensively for client sites now), the tub has gained a lifetime sponsor. Me.
That app was build on 1.4.0 on September 20th 2006 and since then we have revised many things including our checklist:
Beer? Check.
M&M Peanuts? Check.
Basecamp set up? Check.
SVN Server? Check.
See the difference? We don't live at the office any more. CodeIgniter gave us the freedom to build around our needs and wants and it gave us the structure we needed to become more efficient. Just don't bet against CI, it has cost me $8800 and counting…. weekly.
ABOUT LEE
Lee is a bit of a serial entrepreneur, with 5 successful startups under his belt including the recently launched http://cleverandy.com. He has become something of a cookie! jar of startup knowledge. When he is not managing his team of contractors he blogs about the trials and tribulations of his startups at http://tumbledry.ca.
21 Jul 2008 8:33pm GMT
17 Jul 2008
CI News
CodeIgniter Community Chieftain Michael Wales
We're happy to announce a new program for exceptional members of the CodeIgniter community, CodeIgniter Community Chieftains. As the community grows, the EllisLab development team often does not have the time that we would like to interact with the community in various ways, but it's always been a key part of our success. So as the need arises, we have created this program to help keep the wheels greased so to speak, making sure that our forums, wiki, and bug tracker are handling the needs of the community and are properly moderated.
This is an invitation only program as the aforementioned link explains, and we're proud to bring Michael Wales on board as our first CodeIgniter Community Chieftain. Most will need no introduction to Michael as you have likely already encountered him or some of his contributions in the community. Welcome aboard, Michael!
17 Jul 2008 7:33pm GMT
08 Jul 2008
CI News
CodeIgniter Brazil
Hermes Alves has launched a CodeIgniter resource in Portuguese, located at codeigniter.com.br. The site includes a discussion forum, mailing-list, and a few other resources. Kudos Hermes!
08 Jul 2008 6:08pm GMT