ullright upgrade log

This document logs changes to files and data outside of the ullXXXPlugins.

These changes have to be executed manually for each customer installation of ullright.


  • When a versionable record is deleted, all version data is deleted as well!
    • add soft-delete "deleted" flag to version tables, and if deleted set flag, but do not remove entries
    • or: normal soft-delete behaviour for parent model,  plus do not delete the version history


  • remove mysql dumps
  • svn rm --keep-local data/sql/*.mysql.dump.bz2&&svn propedit svn:ignore data/sql/
    • *.mysql.dump.bz2
  • svn add --force *&&svn ci -m 'upgrade'


  • Support https url generation for cli (sfRouting::fixGeneratedUrl())
    Important for newsletter url generation!
    • dev:
        server_use_https: false
        server_use_https: true



Inline Editing CSS renamed classes

  • "div.inline_editing, section.inline_editing" has been changed to "inline_border" class

r4336 - Big Web-Tech-Update

Combine and Minify Stylesheets and Javascripts via sfCombinePlugin

  • apps/frontend/config/settings.yml
    • Add "sfCombine" to "enabled_modules
      • enabled_modules: [sfCombine, default, ullAdmin, ...
    • BTW: remove module "ullCloneUser" if still there
  • apps/frontend/config/app.yml
    • Add sfCombine config options
      •   # sfCombine: enabling the plugin will combine script and css files into a single file
          # Disabled by default, enable it per action e.g. for ullCms/show
          # @see apps/frontend/modules/ullCms/actions/actions.class.php  executeShow() 
            enabled:        false          # enabling the plugin will combine script and css files into a single file
            asset_version:  0             # key to the asset version
            client_cache_max_age: 10      # enable the browser to keep a copy of the files for x days (false to disable)
            gzip:           true          # allow PHP gzipping of the combined JavaScript and CSS files to reduce bandwidth usage
            url_type:       files         # can be key, files, or base64 (note files can be buggy without an asset version)
            filter_include_unused_groups: true # whether to use the filter to include groups that havent been output
              enabled: true               # suffix a timestamp where available to files for their asset version
              uncombinable: true          # timestamp files that aren't combinable
              combine: true               # whether or not to perform combining actions
              #combine_skip: ~             # these files will not be combined (necessary when js code is based on js file name)
              combine_skip:  [/ullCorePlugin/js/ckeditor/ckeditor.js]
              include: true               # whether to allow the including of files
              include_suffixes:           # suffixes of files that can be included
                  - .php
              include_skip: ~             # files that should be skipped on includes
              minify:       true          # process js files to shrink them
              minify_method: [sfCombineMinifierJsMin, minify]
              minify_method_options: []
              minify_skip_suffixes:       # files with this suffix will not be minified
                  - .min.js
              minify_skip: ~              # these files will not be minified (useful when code is already minified)
              filename_comments: true     # include filenames of combined files in comments
              group_files: true           # minify all available files together in one minify action
              cache_minified_files: true  # cache minified versions of files (to not minify multiple times)
              route: sfCombineJs          # the route name js files will use
              inline_minify_method: ~
              inline_minify_method_options: ~
              combine: true               # whether or not to perform combining actions
              combine_skip: ~             # these files will not be combined
              include: true               # whether to allow the including of files
              include_suffixes:           # suffixes of files that can be included
                  - .php
              include_skip: ~             # files that should be skipped on includes
              minify:       true          # process js files to shrink them
              minify_method: [sfCombineMinifierCssMin, minify]
              minify_method_options: []
              minify_skip_suffixes:       # files with this suffix should not be minified
                  - .min.css
              minify_skip: ~              # these files will not be minified (useful when code is already minified)
              filename_comments: true     # include filenames of combined files in comments
              group_files: true           # minify all available files together in one minify action
              route: sfCombineCss         # the route name css files will use
              cache_minified_files: true  # cache minified versions of files (to not minify multiple times)
              keep_charset: true          # if there is a charset in a css file keep it
              prepend_imports: true       # move all imports to the top of a css file
              prepend_imports_warning:    # if imports are moved a warning to output
                Imports may be incorrectly placed, please remove for ideal combining
              inline_minify_method: ~
              inline_minify_method_options: ~          
      • Note that the plugin is disabled by default, because there are some unresolved problems with "backend" actions.
    • Enable it per action, e.g. in ullUser/show -> apps/frontend/modules/ullCms/actions/actions.class.php executeShow()
      •   /**
           * ullCms show action
           * @see BaseUllCmsActions::executeShow()
          public function executeShow(sfRequest $request)
            // Enable js/css combine
            if ('prod' === sfConfig::get('sf_environment'))
              sfConfig::set('app_sfCombinePlugin_enabled', true);
            return parent::executeShow($request);

Template Caching

Enable caching for production environment only:

  • apps/frontend/config/settings.yml
    • prod:
          cache:                  true  

Define which modules/actions should be cached

  • apps/frontend/config/filters.yml
    • Add after i18nFilter:
    • # Allow to cache only certain module/actions
        class: conditionalCacheFilter
            - { module: ullCms, action: show }

Cache Headers

  • Add to web/.htaccess
    • # Caching options as recommended by google
      <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresDefault "access plus 1 seconds"
        ExpiresByType image/x-icon "access plus 604800 seconds"
        ExpiresByType image/jpeg "access plus 604800 seconds"
        ExpiresByType image/png "access plus 604800 seconds"
        ExpiresByType image/gif "access plus 604800 seconds"
        ExpiresByType application/x-shockwave-flash "access plus 604800 seconds"
        ExpiresByType text/css "access plus 604800 seconds"
        ExpiresByType text/javascript "access plus 604800 seconds"
        ExpiresByType application/x-javascript "access plus 604800 seconds"
        ExpiresByType application/x-font-woff "access plus 604800 seconds"
        ExpiresByType text/html "access plus 2 seconds"
        ExpiresByType application/xhtml+xml "access plus 2 seconds"
      <IfModule mod_headers.c>
        <FilesMatch "\\.(ico|jpe?g|png|gif|swf|woff)$">
          Header set Cache-Control "max-age=604800, public"
        <FilesMatch "\\.(css)$">
          Header set Cache-Control "max-age=604800, public"
        <FilesMatch "\\.(js)$">
          Header set Cache-Control "max-age=604800, private"
        <FilesMatch "\\.(x?html?|php)$">
          Header set Cache-Control "max-age=1, private, must-revalidate"
          Header unset ETag
          Header unset Last-Modified

Responsive Images using rimg.js

  • apt-get install jpegoptim optipng
  • apps/frontend/config/app.yml
    • all:
          # Breakpoints for responsive images (using rimg.js)
          responsive_image_widths: [ 384, 600, 768, 1024, 1200]
          optimize_images: true
          # From 0 (worst) to 100 (best)
          resized_images_quality: 75
          cache_resized_images: true
          # Debug: show dimensions in images for responsive images 
          show_resized_image_dimensions: false
  • apps/frontend/templates/_html_head.php
    • <!-- Responsive image loading -->
      <?php include_partial('default/rimg_js') ?>
  • Use ull_image_tag_rimg() helper in templates. Upload the images at least in double resolution.



Added ullCms drag'n'drop sortable of menu items.
How to upgrade: http://www.ullright.org/ullWiki/show/ullcms-migrate-to-drag-n-drop-sortable-of-menu-items


The --less-noisy option was removed from the ull_mail::process-bounced-emails task because it worsened code readability


Added app.yml config option ull_user -> email_unique.

    # Force unique email addresses - recommended for ullNewsletter
    # Note: if you change this setting on an existing installation make sure you run
    # -  publish (inkl. build-model)
    # -  myullright.example.com/ullUser/cleanDuplicateEmails
    # -  php symfony ullright:recreate-foreign-keys
    # Warning: "ullUser/cleanDuplicateEmails" leaves only the first user active.
    # All other users with the same emailadress are deactivated and the email removed.
    email_unique:                           false


Added ullCms columns "keywords" and "description".

Your should handle them in

  • UllCmsItemColumnConfigCollection.class.php and
  • UllCmsPageColumnConfigCollection.class.php

Enable them if needed: (Or disable them for legacy projects)

      'name', //the "menu title" field

And add them to the order:


Furthermore to use the cms-page specific keywords and description you have to

  • Add default (fallback) keywords and description in
    • all:
        default_html_meta_description: ullright is an opensource platform f...
        default_html_meta_keywords: ullright, ullCms, ullUser, ullNewsletter...
  • Adjust  apps/frontend/templates/_html_head(.mobile).php
    • Replace the manual meta tags with the include_partial() call:
    • <!-- custom meta information -->
      <meta name="description" content="ullright is an opensource platform f..." />
      <meta name="keywords" content="ullright, ullCms, ullUser, ullNewsletter..." />
      <?php /* Use the following partial to supply custom keywords and description
        for every CMS-page or otherwise replace it with normal meta tags.
        Default keywords and description are defined in apps/frontend/config/app.yml */ ?>
      <?php include_partial('default/html_metas') ?>
      <meta name="robots" content="index,follow" />
  •  Add the following partial to the top of your ullCms showSuccess.php file:
    • <?php include_partial('ullCms/cms_html_metas', array('doc' => $doc))?>


ullCourse got some new columns. Disable them if you do not want to use them in the UllCourseColumnConfigCollection:

  • ull_course_bank_account_id
  • participant_info


/web/js/CKeditor_config. js has been fixed (Plain text paste / Word paste). Please update your local file.


Cleaned up ullCms ColumnConfigs. Please specify explicitly all your cms columns.


Cleaned up plugins and changed svn repo path to svn.ull.at.

You probably need to re-enter your svn password.

For the first developer to update the ullright isntance, the custom repo path is adjusted automatically. Each other developer needs to perform manually:


Move your statements from view.yml to html_head.php.

Here is a up-to-date example of html_head.php. If you use the mobile version, do the same in html_head.mobile.php

<!DOCTYPE html>
<html lang="<?php echo $sf_user->getCulture() ?>">

<!--  Begin of html head -->

<?php /* Load ullright html head statements*/ ?>
<?php /* Located in plugins/ullCorePlugin/modules/default/templates/_ullright_html_head.php */ ?>
<?php include_partial('default/ullright_html_head')?>

<!--  Begin of custom html head statements -->

<?php /* Do not use a <title> tag, as this is handled by symfony */ ?>

<!-- custom meta information -->
<meta name="author" content="Klemens Ullmann-Marx and the ull.at team" />
<meta name="description" content="ullright is an opensource platform for websites & applications initiated by ull.at" />
<meta name="keywords" content="ullright, ullCms, ullUser, ullNewsletter, website, CMS, content management system, email newsletter, framework, ull.at" />

<meta charset="utf-8" />
<meta name="robots" content="index,follow" />
<meta name="generator" content="ullright">

<!-- Favicon -->
<?php /* located in web/images/favicon.ico */ ?>
<link rel="shortcut icon" href="/images/favicon.ico" />

<!-- ullNews RSS feed -->
<?php include_component('ullNews', 'rssFeed') ?>

<?php /* Add example website stylesheet */ ?>
<?php /* use_stylesheet('/ullCoreTheme' . sfConfig::get('app_theme_package', 'NG') . 
  'Plugin/css/layout_website.css', 'last', array('media' => 'all')) */?>
<?php /* Add the ullright webapp stylesheet */ ?>
<?php /* use_stylesheet('/ullCoreTheme' . sfConfig::get('app_theme_package', 'NG') . 
  'Plugin/css/layout_webapp.css', 'last', array('media' => 'all')) */?>
<?php /* Add custom stylesheet */ ?>
<?php /* Located in web/css/ */ ?>
<?php use_stylesheet('custom.css', 'last', array('media' => 'all')) ?>      

<?php /* Add global custom javascripts (Uncomment to activate) */?>
<?php /* Put files in web/js/ */?>
<?php //use_javascript('/js/my_javascript.js') ?>

<?php /* Add other html head statements here like webfonts, stats, ... */?>
<link href='http://fonts.googleapis.com/css?family=Metrophobic' rel='stylesheet' type='text/css' />

<!--  End of custom html head statements -->

<!--  End of html head -->

Your view.yml should then look like this:

# ullright does not use view.yml per default. Everything is set in _html_head.php

  has_layout:     true
  layout:         layout



Check you apache vhost settings if directory listing for uploads is disabled:


vi /etc/apache2/sites-available/ullright

    <Directory /home/ull-at/public_html/web>
        AllowOverride All
        Allow from All
        Options -Indexes


Added new plugin "ullCourse"

  • Add "web" symlinks
    • cd web
    • ln -s ../plugins/ullCoursePlugin/web ullCoursePlugin
    • ln -s ../plugins/ullCourseThemeNGPlugin/web ullCourseThemeNGPlugin
    • svn add ullCourse*
    • cd ..
  • Run your upgrade script or do manually

    • php symfony doctrine:build --model --forms --filters

    • php symfony doctrine:migrate

    • php symfony ullright:migrate-data

  • Note: if you did not enable the ullCourse modules in settings.yml before performing "svn update", ullCourse base data will not be loaded. You can do that manually later on by executing:
    • php symfony ull_course:load-ull-course-base-data

Things you may want to customize:

  • apps/frontend/config/appl.yml settings
  • Various templates by putting a overrule file in apps/frontend/module/ullCourse
    • plugins/ullCoursePlugin/modules/ullCourse/templates/
      • _bookedMail.php
      • _cancelMail.php
      • _genericMail.php
      • _paymentReceivedMail.php
      • showSuccess.php



Introducing an improved structure for html head.

Two new files are automatically dowloaded when upgrading:

  • apps/frontend/templates/_html_head.php
  • apps/frontend/templates/_html_head.mobile.php

Checklist for upgrade:

  • Move your custom html head statements from the layouts to these files
    • apps/frontend/templates/layout.php
    • apps/frontend/templates/layout.mobile.php
  • Comment the RSS feed out if you don't need it
  • Uncomment the ullright webapp stylesheet if you use it. You need this if you did not supply a custom layout.

Only the include of the new html head partial remains in the layouts. The 'html_head' slot is obsolete now.

Example of how a layout should look like now:

<?php include_partial('global/html_head') ?>
<?php /* The statement above loads the html head */ ?>
<?php /* The file is located in apps/frontend/templates/_html_head.php */ ?>

<!--  Begin of html body -->



The "ullright:migrate-pre-build-model" task has been modified to use a file instead of database storage.

Therefore a typical upgrade script could now look like this (Note the modified order of commands):

echo 'Do a complete refresh (svn update, load production db, migrate)'

svn update
php symfony cache:clear
php symfony ullright:migrate-pre-build-model
php symfony doctrine:build --model --forms --filters
php symfony cache:clear
php symfony ullright:get-and-load-production-database
php symfony ullright:get-production-uploads
php symfony doctrine:migrate
php symfony ullright:migrate-custom
php symfony ullright:migrate-data
php symfony project:permissions

By the way: see the updated migration documentation for details.



Introducing new migration system and cleaning up a ullFlow model delete problem.

Instead of your regular update procedure, perform:

  • svn update
  • plugins/ullCorePlugin/batch/introduce_new_migrations.sh

If you have a upgrade script note that the ullright:custom-migrate task has been renamed to ullright:migrate-custom

Then if you have a upgrade script add the "ullright:migrate-pre-build-model" task before the doctrine:build-model task, and the "ullright:migrate-data" task right at the end of your procedure.

Finally run your normal upgrade procedure.

Here is a typical upgrade script in batch/refresh_completely.sh

echo 'Do a complete refresh (svn update, load production db, migrate)'

svn update
php symfony cache:clear
php symfony ullright:get-and-load-production-database
php symfony ullright:get-production-uploads
php symfony ullright:migrate-pre-build-model
php symfony doctrine:build --model --forms --filters
php symfony cache:clear
php symfony doctrine:migrate
php symfony ullright:migrate-custom
php symfony ullright:migrate-data
php symfony project:permissions


Implemented new and improved ullFlow access system. @see: http://www.ullright.org/ullWiki/show/ullflow-access-rights-explained

The old system using UllFlowAppPermission and UllPermission has been removed. Configure new access rights as explained in the wiki document above when necessary.



We now use a thumbnailer to create openOffice doc thumbnails:

  • sudo aptitude install ooo-thumbnailer


If your uploads/ dir is currently inlcuded in subversion, here is how to exclude it:

  • svn remove http://server/svn/ullright_my_project/trunk/web/uploads -m "Removed upload dir from versioning"
  • rm -rf web/uploads/
  • mkdir web/uploads
  • svn update
  • svn propedit svn:ignore web
    • uploads
  • svn commit web/ -m "Ignore uploads"
  • php symfony ullright:get-production-uploads
  • php symfony project:permissions



Added some additional UllUser fields (personal contact data, tagging).
If you don't need them disable these columns in apps/frontend/lib/generator/columnConfigCollection/UllUserColumnConfigCollection.class.php as follows:

  protected function applyCustomSettings()




Here are the necessary apps/frontend/config/app.yml settings for ullMail / ullNewsletter:

    from_address:       newsletter@example.com
    from_name:          Example Newsletter
    bounce_mail_address:            bounce@example.com
    bounce_mailbox_base:            '{imap.example.com}'
    bounce_inbox_folder:            'INBOX'
    bounce_handled_folder:          'INBOX.processed'
    bounce_unprocessable_folder:    'INBOX.unprocessable'
    bounce_username:                'user'
    bounce_password:                'password'
    bounce_deactivation_threshold:  3



Create cryptografic key for ullCrypt. This library is used to create secure url parameters.
Read more here. Currently used for ullNewsletter

php symfony ullright:generate-crypto-key frontend

The support for automated encyption of url params requires a custom routing class which needs to be added to apps/frontend/config/factories.yml:

    class: ullRouting
      generate_shortest_url:            true
      extra_parameters_as_query_string: true

Add the following line to apps/frontend/config/apps.yml to prevent getting spammed with bcc debug mails:

    # blacklist of ullsfMail "slugs" (no bcc debug copy sent for these)
    debug_cc_exclude_list: [ 'ull_newsletter' ]


Refactored and simplified layouts and CSS.

The app.yml option "override_css" has been removed. Include custom stylesheets in your layout at /apps/frontend/templates/layout.php.

Also the stylesheets have been cleaned up. You can read more about the layout and css structure here:



<?php slot('html_head') ?>


<?php /* Load the default ullright layout css if you're building on it */ ?>
<?php use_stylesheet('/ullCoreThemeNGPlugin/css/layout_webapp.css', 'last', array('media' => 'all')) ?>
<?php /* Add custom stylesheet */ ?>
<?php /* Located in web/css/ */ ?>
<?php use_stylesheet('custom.css', 'last', array('media' => 'all')) ?>   

<?php end_slot() ?>



ullright now needs mcrypt for PHP:

sudo aptitude install php5-mcrypt


app.yml now supports the server_name variable which should contain the fully qualified host name of the ullright installation. This is used in cases where the server name cannot be read during execution.

Example app.yml configuration:

  #The following server name is used in situations where
  #a server name cannot be determined automatically, e.g.
  #when mailing from the command line
  server_name: www.example.com


  • Disable the doctrine profiler for performance and memory usage reasons everywhere except for the "dev" environmentin config/databases.yml
    • ### prod Environment
          class:          sfDoctrineDatabase
            dsn:          'mysql:host=localhost;dbname=ullright'
            username:     ullright
            password:     'secretpass'
            # Deactivate doctrine profiler. Consumes a lot of memory eg. for inserts
            profiler:     false


  • added the ullMail plugin
    • Add the plugin to your plugins/ svn:externals:
    • Enable the necessary modules in apps/frontend/config/settings.yml under the key "enabled_modules":
      Note: The order is not important.
      • enabled_modules:        [default, ... , ullMail, ullNewsletter, ...]
      • php symfony cache:clear
    • Rebuild models

      • php symfony doctrine:build --model --forms --filters

    • Add "web" symlinks

      • cd web
      • ln -s ../plugins/ullMailPlugin/web ullMailPlugin
      • ln -s ../plugins/ullMailThemeNGPlugin/web ullMailThemeNGPlugin
      • svn add ullMail*
      • cd ..
    • Run migrations
      • php symfony doctrine:migrate
    • Recreate constraintes
      • php symfony ullright:recreate-foreign-keys


  • app.yml can now be overridden locally for development:
    • In apps/frontend/config: rename app.local.yml.dist to app.local.yml and edit the file according to your requirements
      • values set there will override their equivalent in app.yml
      • Add app.local.yml to svn:ignore
    • Remove duplicate entries from the custom config/rsync_exlude.txt in comparison to the global one in plugins/ullCorePlugin/config/rsync_exclude.txt


  • ullright tests have been moved to their respective plugins. Remove everything but your own tests in the test/ directory


  • ullFlow now supports due dates. To use this functionality, you need to:
    • insert into: apps/frontend/config/app.yml after ull_news and before publish:
      • ull_flow: 
          # ullFlowDocs can have a due date. If this parameter
          # is set to a positive integer, reminder emails
          # are sent out <x> days before the due date expires.
          # If this parameter is set to 0, the reminder mailing
          # functionality is disabled (Note: this has no influence
          # on overdue notification mails, those are independent).
          # If this parameter is not set or < 0, 2 is assumed.
          due_date_reminder_period: 3
    • add a column to each application which should support due dates (Admin -> Manage columns -> Create)
      • must be of DateTime type
      • must have ''Is due date column?' activated


  • Changed convention for custom translations. @see: http://www.ullright.org/ullWiki/show/docid/189

    If you have custom translations in apps/frontend/i18n/messages.de.xml you have to move them to apps/frontend/i18n/custom.de.xml and update the dictionary in the translation helper calls.

    Create symlink to ullCore messages.de.xml:
    ln -s ../../../plugins/ullCorePlugin/i18n/messages.de.xml apps/frontend/i18n/messages.de.xml
    svn add apps/frontend/i18n/messages.de.xml

    Remove apps/frontend/i18n/common.de.xml symlink:
    svn rm apps/frontend/i18n/common.de.xml



  • If you use a custom layout:
  • added class tag to body which shows the current module and action
  • the body tag should be changed to:
    <body class="<?php 
      echo sfInflector::underscore($sf_context->getModuleName()) . '_' . $sf_context->getActionName();



  • added the ullBooking plugin
    • Follow the guide on how to install new plugins


  • added to: apps/frontend/i18n/messages.de.xml
    <trans-unit id="13">
      <source>The date must be before %max%.</source>
      <target>Das Datum muss vor dem %max% liegen.</target>



  • Renamed ullMetaWidgetFullPhoneNumber to ullMetaWidgetPhoneNumber
    • Option default_country_code adds a default country code (e.g. '+43') to allow a number without the country code
  • Deleted ullMetaWidgetMobileNumber. Use ullMetaWidgetPhoneNumber


  • Renamed PhoneNumber widget and meta-widget to PhoneExtension



  • Rebuild models

    • php symfony doctrine:build --model --forms --filters

  • Add "web" symlinks

    • cd web
    • ln -s ../plugins/ullCmsPlugin/web ullCmsPlugin
    • ln -s ../plugins/ullCmsThemeNGPlugin/web ullCmsThemeNGPlugin
    • svn add ullCms*
    • cd ..
  • Run migrations
    • php symfony doctrine:migrate 


  • Recreate foreign keys using
    • php symfony ullright:recreate-foreign-keys


  • ullFlow -> ullTime integration. Follow these steps to track effort for workflows
    • Admin -> ullFlow columns -> add a "ullProject"  to your workflow
      • Type: "UllProject"
      • Options: "add_empty=true model=UllProject"
      • Mandatory: true
      • Is project column: true
    • Admin -> ullFlow app
      • Enter effort: true


  • Admin -> UllUserStatus: rename Separated to "Inactive" with slug "inactive"


  • added to: apps/frontend/i18n/messages.de.xml
    <trans-unit id="12">
      <source>Contains invalid characters.</source>
      <target>Enthält ungültige Zeichen.</target>


  • Removed ParentUllEntity model
    • Remove generated files:
      • php symfony ullright:delete_model_classes UllParentEntity ullCorePlugin
  • Removed support for custom UllEntity schema
    UllEntity is now provided in ullCorePlugin instead of ParentUllEntity
    • Remove UllEntity schema in config/doctrine/schema.yml
    • Remove old generated files:
      • php symfony ullright:delete_model_classes UllEntity
    • Clear cache
      • php symfony cache:clear
    • Rebuild models
      • php symfony doctrine:build --model --forms --filters


  • php symfony doctrine:migrate
    • Migration clean up taggable


Removed publish and database dump batch scripts + config options.

  • Transfer the settings from the *.txt files in config/ to apps/frontend/config/app.yml:
    • all:
          # Set the following options if you want to use the ullright:publish task
          server_name:    my-server.example.com
          user_name:      my_username
          target_dir:     /var/www/ullright_my_company 
  • Run the following task to delete the old files
    • php symfony ullright:r1554


Upgrade to symfony 1.3

Attention: If you haven't upgraded to the latest ullright revision with symfony 1.2 (r1530) you have to change you svn locations to branches/ullright_with_sf12, update, run migrations, and than switch back to trunk.

  • Update the plugins/ svn:externals:

    • Remove dkGeshiPlugin and also delete the directory (Preferable at the command line)

      • rm plugins/dkGeshiPlugin/ -rf

  • config/databases.yml

    • Replace "doctrine:" with real database name e.g. "ullright_myCompany:"

  • The location of the symfony libs has changed. Set the svn:external property of lib/vendor to

  • Update

    • svn update

  • Update the symfony lib path in config/ProjectConfiguration.class.php

    • $sf_symfony_lib_dir = realpath(dirname(__FILE__) . '/../lib/vendor/symfony/lib');
  • Remove some old model files

    • svn rm lib/model/doctrine/ullCorePlugin/UllTableConfig.class.php lib/model/doctrine/ullCorePlugin/UllTableConfigTable.class.php lib/model/doctrine/ullCorePlugin/UllColumnConfig.class.php lib/model/doctrine/ullCorePlugin/UllColumnConfigTable.class.php

  • php symfony cache:clear

  • Rebuild model classes

    • php symfony doctrine:build --model --forms --filters

  • Run the upgrade1.3 task

    • php symfony project:upgrade1.3

    • Answer the following question with no:

      • Would you like to force YAML to be parsed with the 1.1 specification? (Y/n)

  • Reset the migration version because symfony 1.3 has a new system

    • php symfony ullright:fake-migration-version 0

  • Run migrations

    • php symfony doctrine:migrate

      • ullWiki deleted_at migration

  • php symfony cache:clear

  • Don't forget to commit the changes into your repository


  • app.yml: "supported_languages" is now under the sub-key "i18n" and must be given as array
    • all:
          supported_languages: [ 'en', 'de' ]


Changed a config option name in app.yml:

  • "phone_book_columns" is now "phone_book_show_columns"


Error pages (404 and 500)

  • Add link to 500-page:
    • cd apps/frontend/config
    • ln -s ../../../plugins/ullCoreThemeNGPlugin/config/error error
  • edit apps/frontend/config/app.yml - add to all: section (customize as needed):
  • apps/frontend/i18n/messages.de.xml - add translations



  • php symfony doctrine:migrate
    • Migration 062 - add UllUserStatus->is_absent

  • Check your UllUserStatus table. Set "is_absent" to true for stati like 'maternity leave', 'military service', etc.



  • Enable ullOrgchart module in apps/frontend/config/settings.yml under the key "enabled_modules":
    • enabled_modules:        [default, ullAdmin, ullCloneUser, ullCore, ullFlow, ullOrgChart, ullTableTool, ullText, ullTime, ullPhone, ullUser, ullVentory, ullWiki]
    • php symfony cache:clear
  • Add ullOrgchart to the main navigation
  • php symfony doctrine:migrate
    • Migration 060 - ullOrgchart access check


  • php symfony doctrine:migrate
    • Migration 053 - add mobile number to UllUser

    • Migration 054 - change contact data

    • Migration 055 - add ullPhone access checks

    • Migration 056 - add ullUser popup access checks

    • Migration 057 - add additional columns to UllUser

    • Migration 058 - add limited access to ullAdmin for UserAdmin group

    • Migration 059 - add last_name_first column to UllUser

    • Migration 060 - populate last_name_first column



  • Enable ullCloneUser module in apps/frontend/config/settings.yml under the key "enabled_modules":
    • enabled_modules:        [default, ullAdmin, ullCloneUser, ullCore, ullFlow, ullTableTool, ullText, ullTime, ullPhone, ullUser, ullVentory, ullWiki]
    • php symfony cache:clear


  • Rebuild models

    • php symfony doctrine:build-model

  • Add "web" symlinks

    • cd web
    • ln -s ../plugins/ullPhonePlugin/web ullPhonePlugin
    • ln -s ../plugins/ullPhoneThemeNGPlugin/web ullPhoneThemeNGPlugin
    • svn add ullPhone*
    • cd ..


  • If you're using custom ullNamedQueries you have to change the signature of the method modifyQuery().
    This is necessary as we use ullNamedQueries both with Doctrine_Querys and ullQueries at the moment.
    • currently:
      • public function modifyQuery(Doctrine_Query $q)
    • change it to:
      • public function modifyQuery($q)




  • php symfony doctrine:migrate
    • Migration 049 remove is_in_list column from ullFlowColumnConfig

  • svn rm lib/model/doctrine/ullCorePlugin/UllTableConfigTable.class.php

  • svn rm lib/model/doctrine/ullCorePlugin/base/BaseUllTableConfig.class.php

r1165, 1167

Added ullPhoto module to handle user photos

  • Add sfImageTransformPlugin to your plugins/ svn:externals:
  • Install php5-gd
    • sudo aptitude install php5-imagick
    • sudo apache2ctl restart
  • Enable ullPhoto module in apps/frontend/config/settings.yml under the key "enabled_modules":
    • enabled_modules:        [default, ullAdmin, ullCore, ullFlow, ullPhoto, ullTableTool, ullText, ullTime, ullUser, ullVentory, ullWiki]
    • php symfony cache:clear
  • Rebuild models

    • php symfony doctrine:build-model

  • Migration 047: add ullUser->photo column
    • php symfony doctrine:migrate


r1143, r1156



  • php symfony doctrine:migrate
    • Migration 043 remove old column config


  • Provide and migrate the custom "named" queries on the ullFlow index action.
    Reference: Changeset http://trac.ullright.org/changeset/1099
    • Remove apps/frontend/modules/ullFlow/lib/UllFlowCustomQueries.class.php
    • Add apps/frontend/modules/ullFlow/lib/ullNamedQueriesUllFlowCustom.class.php
    • Add apps/frontend/modules/ullFlow/lib/ullNamedQueryUllFlowXXX.class.php classes foreach named query


  • php symfony doctrine:migrate
    • Migration 041,042 ullflow sluggify



  • php symfony doctrine:migrate
    • Migration 040 re-added string metawidget


  • php symfony doctrine:migrate
    • Migration 038,039 -sluggify UllSelect and ullVentory



  • php symfony doctrine:migrate
    • Migration 037 - add item attribute options column


r1044, r1045

  • php symfony doctrine:migrate
    • Migration 035,036 - recreate foreign keys + register float widget



  • added to: apps/frontend/i18n/messages.de.xml
    "%value%" has too many decimal places (%max_decimals% max). "%value%" besitzt zuviele Nachkommastellen (max. %max_decimals%).


Add "web" symlinks

  • cd web
  • ln -s ../plugins/ullVentoryPlugin/web ullVentoryPlugin
  • svn add ullVentoryPlugin

Fix ullFlow documents (last action)

  • php symfony ullright:fix-ullflowdoc-action




  • php symfony doctrine:migrate
    • Migration 033,034 - added UllVentory dummy user and access check



  • php symfony doctrine:migrate
    • Migration 031,032 - add UllVentorySoftwareLicense columns supplier, comment and delivery_date


To enable the new ullVentory module:


  • Enable a performance improvment introduced in symfony 1.2.7
    Add to apps/frontend/config/settings.yml under the section all / .settings:
    •     # Cache settings 
          lazy_cache_key:         on        # Delays creation of a cache key until after checking whether an action or partial is cacheable 


  • php symfony doctrine:migrate
    • Migration 020-025 - Wiki access levels



  • added to: apps/frontend/i18n/messages.de.xml
    An object with the same "%column%" already exist. Dieser Wert muss eindeutig sein, ist aber bereits vergeben.


  • added to: apps/frontend/i18n/messages.de.xml
    The date must be after %min%. Das Datum muss nach dem %min% liegen.


  • php symfony doctrine:migrate
    • Migration 019 - Add percentage widget



  • php symfony doctrine:migrate
    • Migration 017 - Drop Versionable tables (will delete scheduled updates and version history!)

    • Migration 018 - Add SuperVersionable tables, initial super-versions


  • remove useless web/css/main.css
  • Provide a custom override css in web/css/custom_override.css.


  • php symfony doctrine:migrate
    • Migration 016 - Add is_public flag to ullFlow


  • added to: apps/frontend/i18n/messages.de.xml
    "%value%" is not an integer. "%value%" ist keine Ganzzahl.


  • php symfony doctrine:migrate
    • Migration 015 - Made user superior field not mandatory


  • php symfony doctrine:migrate
    • Migration 013 - add versioning (tables, columns)

    • Migration 014 - fake initial version for versioning objects


  • apps/frontend/config/filter.yml
    • remove "refererFilter"


  • apps/frontend/config/filter.yml: add new filter between security: ~ and i18n:
    • inactive_users:
        class: inactiveUserFilter



  • php symfony doctrine:migrate
    • Migration 012 - add ullgroup cc


  • php symfony doctrine:migrate
    • Migration 009 - add slug column to user status

    • Migration 010 - adjust user status id column, create status slugs, set default status to active

    • Migration 011 - add add_empty fields to some fk widgets


  • php symfony doctrine:migrate
    • Migration 008 - add mass superior change permission


  • php symfony doctrine:migrate
    • Migration 007 - add country widget, cc



  • php symfony doctrine:migrate
    • Migration 006 - ullWiki Permissions



  • php symfony doctrine:migrate

    • Migration 004 - add user status table, cc, ...

    • Migration 005 - add user status content (active, maternity leave, ...)



  • php symfony doctrine:migrate

    • Migration 002 - adjust column config db_column_name length

    • Migration 003 - add user fields

      • add tables and keys

      • add user columns

      • add column configs




  • php symfony doctrine:migrate

    • Migration 001 - add sex widget

      • add 'sex' column to ull_entity

      • add ullMetaWidgetSex to column types
      • add new column 'sex' for ullUser with type ullMetaWiget



Since revision 681 ullright uses migrations.

Symfony expects the migration classes to live in lib/migration/doctrine, but since we store them in the ullCorePlugin, a symbolic link needs to be created.


  • cd lib/migration
  • rm doctrine -r
  • ln -s ../../plugins/ullCorePlugin/lib/migrations doctrine



  • fix target of web/sf softlink:
    • ln -s ../plugins/ullCorePlugin/lib/vendor/symfony/data/web/sf/ sf
  • remove invalid softlinks in web/


  • deleted web/js (old jquery + jquery ui)
  • (current versions are now in ullCore plugin and ullCore theme folders)


  • rm config/doctrine/schema.yml.dist
  • Use (and customize) http://trac.ullright.org/browser/trunk/config/doctrine/schema.yml instead.
  • php symfony doctrine:build-model
  • Remove old model files
    • rm lib/model/doctrine/ullCorePlugin/UllEntity.class.php
    • rm lib/model/doctrine/ullCorePlugin/UllEntityTable.class.php
    • rm lib/model/doctrine/ullCorePlugin/base/BaseUllEntity.class.php


  • added to: apps/frontend/i18n/messages.de.xml
    additional fix: the above trans-unit has a typo in the id, should be 3, not 2.
    Required. PflichtfeldInvalid. Ungültig


  • remove svn:external property from "lib/vendor" directory
  • delete "lib/vendor/symfony"
  • change path to symfony libs in config/ProjectConfiguration.class.php
    • $sf_symfony_lib_dir = realpath(dirname(__FILE__) . '/../plugins/ullCorePlugin/lib/vendor/symfony/lib');


  • ALTER TABLE `ullright_test`.`ull_entity` DROP FOREIGN KEY `ull_entity_ibfk_1`,
    DROP FOREIGN KEY `ull_entity_ibfk_2`;


  • INSERT INTO ull_column_type (namespace,class,label,created_at,updated_at,creator_user_id,updator_user_id) VALUES ('ullCore', 'ullMetaWidgetDate