Development

Changeset 11783

You must first sign up to be able to contribute.

Changeset 11783

Show
Ignore:
Timestamp:
09/25/08 18:21:27 (6 years ago)
Author:
fabien
Message:

[1.2] added helper management in sfApplicationConfiguration to take into account the enabled plugins and deprecated sfLoader class

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/1.2/UPGRADE_TO_1_2

    r11701 r11783  
    12471247  public function setup() 
    12481248  { 
    1249     $this->setPlugins('sfDoctrinePlugin', 'sfCompat10Plugin'); 
     1249    $this->setPlugins(array('sfDoctrinePlugin', 'sfCompat10Plugin')); 
    12501250  } 
    12511251 
     
    12781278If you upgrade from 1.0 or 1.1, this line will make symfony behave like in 
    12791279symfony 1.0 and 1.1. 
     1280 
     1281The `sfLoader` class is deprecated as the `getHelperDirs()` and `loadHelpers()` 
     1282methods are now part of the `sfApplicationConfiguration` class. The `sfLoader` 
     1283methods now generate a deprecated log message and then call the new methods from 
     1284the current active configuration. 
    12801285 
    12811286Filters 
  • branches/1.2/lib/action/sfAction.class.php

    r11254 r11783  
    274274  public function getPartial($templateName, $vars = null) 
    275275  { 
    276     sfLoader::loadHelpers('Partial'); 
     276    $this->getContext()->getConfiguration()->loadHelpers('Partial'); 
    277277 
    278278    $vars = !is_null($vars) ? $vars : $this->varHolder->getAll(); 
     
    317317  public function getComponent($moduleName, $componentName, $vars = null) 
    318318  { 
    319     sfLoader::loadHelpers('Partial'); 
     319    $this->getContext()->getConfiguration()->loadHelpers('Partial'); 
    320320 
    321321    $vars = !is_null($vars) ? $vars : $this->varHolder->getAll(); 
  • branches/1.2/lib/config/sfApplicationConfiguration.class.php

    r11644 r11783  
    2020{ 
    2121  static protected 
    22     $coreLoaded = false; 
     22    $coreLoaded    = false, 
     23    $loadedHelpers = array(); 
    2324 
    2425  protected 
     
    315316    } 
    316317 
    317     $dirs[] = sfConfig::get('sf_app_module_dir').'/'.$moduleName.'/templates';                 // application 
    318  
    319     foreach ($this->getPluginPaths() as $path) 
    320     { 
    321       if (is_dir($dir = $path.'/modules/'.$moduleName.'/templates')) 
    322       { 
    323         $dirs[] = $dir;                                                                        // plugins 
    324       } 
    325     } 
    326  
    327     $dirs[] = sfConfig::get('sf_symfony_lib_dir').'/controller/'.$moduleName.'/templates';     // core modules 
    328     $dirs[] = sfConfig::get('sf_module_cache_dir').'/auto'.ucfirst($moduleName.'/templates');  // generated templates in cache 
     318    $dirs[] = sfConfig::get('sf_app_module_dir').'/'.$moduleName.'/templates';                  // application 
     319    $dirs = array_merge($dirs, $this->getPluginSubPaths('/modules/'.$moduleName.'/templates')); // plugins 
     320    $dirs[] = sfConfig::get('sf_symfony_lib_dir').'/controller/'.$moduleName.'/templates';      // core modules 
     321    $dirs[] = sfConfig::get('sf_module_cache_dir').'/auto'.ucfirst($moduleName.'/templates');   // generated templates in cache 
    329322 
    330323    return $dirs; 
     324  } 
     325 
     326  /** 
     327   * Gets the helper directories for a given module name. 
     328   * 
     329   * @param  string $moduleName The module name 
     330   * 
     331   * @return array  An array of directories 
     332   */ 
     333  public function getHelperDirs($moduleName = '') 
     334  { 
     335    $dirs = array(); 
     336 
     337    if ($moduleName) 
     338    { 
     339      $dirs[] = sfConfig::get('sf_app_module_dir').'/'.$moduleName.'/lib/helper'; // module 
     340 
     341      $dirs = array_merge($dirs, $this->getPluginSubPaths('/modules/'.$moduleName.'/lib/helper')); 
     342    } 
     343 
     344    return array_merge( 
     345      $dirs, 
     346      array( 
     347        sfConfig::get('sf_app_lib_dir').'/helper',         // application 
     348        sfConfig::get('sf_lib_dir').'/helper',             // project 
     349      ), 
     350      $this->getPluginSubPaths('/lib/helper'),             // plugins 
     351      array(sfConfig::get('sf_symfony_lib_dir').'/helper') // symfony 
     352    ); 
    331353  } 
    332354 
     
    411433 
    412434    // plugins 
    413     foreach ($this->getPluginPaths() as $path) 
    414     { 
    415       if (is_dir($dir = $path.'/i18n')) 
    416       { 
    417         $dirs[] = $dir; 
    418       } 
    419     } 
    420  
    421     return $dirs; 
     435    return array_merge($dirs, $this->getPluginPaths('/i18n')); 
    422436  } 
    423437 
     
    445459    } 
    446460 
    447     // module in plugins 
    448     foreach ($this->getPluginPaths() as $path) 
    449     { 
    450       if (is_dir($dir = $path.'/modules/'.$moduleName.'/i18n')) 
    451       { 
    452         $dirs[] = $dir; 
    453       } 
    454     } 
    455  
    456     // plugins 
    457     foreach ($this->getPluginPaths() as $path) 
    458     { 
    459       if (is_dir($dir = $path.'/i18n')) 
    460       { 
    461         $dirs[] = $dir; 
    462       } 
    463     } 
    464  
    465     return $dirs; 
     461    return array_merge( 
     462      $dirs, 
     463      $this->getPluginSubPaths('/modules/'.$moduleName.'/i18n'), // module in plugins 
     464      $this->getPluginSubPaths('/i18n')                          // plugins 
     465    ); 
    466466  } 
    467467 
     
    519519 
    520520  /** 
     521   * Loads helpers. 
     522   * 
     523   * @param array  $helpers     An array of helpers to load 
     524   * @param string $moduleName  A module name (optional) 
     525   */ 
     526  public function loadHelpers($helpers, $moduleName = '') 
     527  { 
     528    $dirs = $this->getHelperDirs($moduleName); 
     529    foreach ((array) $helpers as $helperName) 
     530    { 
     531      if (isset(self::$loadedHelpers[$helperName])) 
     532      { 
     533        continue; 
     534      } 
     535 
     536      $fileName = $helperName.'Helper.php'; 
     537      foreach ($dirs as $dir) 
     538      { 
     539        $included = false; 
     540        if (is_readable($dir.'/'.$fileName)) 
     541        { 
     542          include_once($dir.'/'.$fileName); 
     543          $included = true; 
     544          break; 
     545        } 
     546      } 
     547 
     548      if (!$included) 
     549      { 
     550        // search in the include path 
     551        if ((@include_once('helper/'.$fileName)) != 1) 
     552        { 
     553          $dirs = array_merge($dirs, explode(PATH_SEPARATOR, get_include_path())); 
     554 
     555          // remove sf_root_dir from dirs 
     556          foreach ($dirs as &$dir) 
     557          { 
     558            $dir = str_replace('%SF_ROOT_DIR%', sfConfig::get('sf_root_dir'), $dir); 
     559          } 
     560 
     561          throw new InvalidArgumentException(sprintf('Unable to load "%sHelper.php" helper in: %s.', $helperName, implode(', ', $dirs))); 
     562        } 
     563      } 
     564 
     565      self::$loadedHelpers[$helperName] = true; 
     566    } 
     567  } 
     568 
     569  /** 
    521570   * Loads config.php files from plugins 
    522571   * 
  • branches/1.2/lib/config/sfLoader.class.php

    r10147 r11783  
    1111/** 
    1212 * sfLoader is a class which contains the logic to look for files/classes in symfony. 
     13 * 
     14 * This class is deprecated. The same methods now exist in sfApplicationConfiguration. 
    1315 * 
    1416 * @package    symfony 
     
    2830  static public function getHelperDirs($moduleName = '') 
    2931  { 
    30     $dirs = array(); 
     32    $configuration = sfProjectConfiguration::getActive(); 
    3133 
    32     if ($moduleName) 
    33     { 
    34       $dirs[] = sfConfig::get('sf_app_module_dir').'/'.$moduleName.'/lib/helper'; // module 
     34    $configuration->getEventDispatcher()->notify(new sfEvent(null, 'application.log', array('The sfLoader::getHelperDirs() method is deprecated. Please use the same method from sfApplicationConfiguration.', 'priority' => sfLogger::ERR))); 
    3535 
    36       if ($pluginDirs = glob(sfConfig::get('sf_plugins_dir').'/*/modules/'.$moduleName.'/lib/helper')) 
    37       { 
    38         $dirs = array_merge($dirs, $pluginDirs);                                  // module plugins 
    39       } 
    40     } 
    41  
    42     $dirs[] = sfConfig::get('sf_app_lib_dir').'/helper';                          // application 
    43  
    44     $dirs[] = sfConfig::get('sf_lib_dir').'/helper';                              // project 
    45  
    46     if ($pluginDirs = glob(sfConfig::get('sf_plugins_dir').'/*/lib/helper')) 
    47     { 
    48       $dirs = array_merge($dirs, $pluginDirs);                                    // plugins 
    49     } 
    50  
    51     $dirs[] = sfConfig::get('sf_symfony_lib_dir').'/helper';                      // symfony 
    52  
    53     if ($pluginDirs = glob(sfConfig::get('sf_symfony_lib_dir').'/plugins/*/lib/helper')) 
    54     { 
    55       $dirs = array_merge($dirs, $pluginDirs);                                    // symfony bundled plugins 
    56     } 
    57  
    58     return $dirs; 
     36    return $configuration->getHelperDirs($moduleName); 
    5937  } 
    6038 
     
    6947  static public function loadHelpers($helpers, $moduleName = '') 
    7048  { 
    71     static $loaded = array(); 
     49    $configuration = sfProjectConfiguration::getActive(); 
    7250 
    73     $dirs = self::getHelperDirs($moduleName); 
    74     foreach ((array) $helpers as $helperName) 
    75     { 
    76       if (isset($loaded[$helperName])) 
    77       { 
    78         continue; 
    79       } 
     51    $configuration->getEventDispatcher()->notify(new sfEvent(null, 'application.log', array('The sfLoader::loadHelpers() method is deprecated. Please use the same method from sfApplicationConfiguration.', 'priority' => sfLogger::ERR))); 
    8052 
    81       $fileName = $helperName.'Helper.php'; 
    82       foreach ($dirs as $dir) 
    83       { 
    84         $included = false; 
    85         if (is_readable($dir.'/'.$fileName)) 
    86         { 
    87           include_once($dir.'/'.$fileName); 
    88           $included = true; 
    89           break; 
    90         } 
    91       } 
    92  
    93       if (!$included) 
    94       { 
    95         // search in the include path 
    96         if ((@include_once('helper/'.$fileName)) != 1) 
    97         { 
    98           $dirs = array_merge($dirs, explode(PATH_SEPARATOR, get_include_path())); 
    99  
    100           // remove sf_root_dir from dirs 
    101           foreach ($dirs as &$dir) 
    102           { 
    103             $dir = str_replace('%SF_ROOT_DIR%', sfConfig::get('sf_root_dir'), $dir); 
    104           } 
    105  
    106           throw new sfViewException(sprintf('Unable to load "%sHelper.php" helper in: %s.', $helperName, implode(', ', $dirs))); 
    107         } 
    108       } 
    109  
    110       $loaded[$helperName] = true; 
    111     } 
     53    return $configuration->loadHelpers($helpers, $moduleName); 
    11254  } 
    11355} 
  • branches/1.2/lib/config/sfProjectConfiguration.class.php

    r11776 r11783  
    2323    $symfonyLibDir = null, 
    2424    $plugins       = array('sfPropelPlugin'), 
    25     $pluginPaths   = null
     25    $pluginPaths   = array()
    2626 
    2727  static protected 
     
    148148  public function getModelDirs() 
    149149  { 
    150     $dirs = array(); 
    151  
    152     foreach ($this->getPluginPaths() as $path) 
    153     { 
    154       if (is_dir($dir = $path.'/lib/model')) 
    155       { 
    156         $dirs[] = $dir;                             // plugins 
    157       } 
    158     } 
    159  
    160     $dirs[] = sfConfig::get('sf_lib_dir').'/model'; // project 
    161  
    162     return $dirs; 
     150    return array_merge( 
     151      $this->getPluginSubPaths('/lib/model'),     // plugins 
     152      array(sfConfig::get('sf_lib_dir').'/model') // project 
     153    ); 
    163154  } 
    164155 
     
    173164  public function getGeneratorTemplateDirs($class, $theme) 
    174165  { 
    175     $dirs = array(sfConfig::get('sf_data_dir').'/generator/'.$class.'/'.$theme.'/template');    // project 
    176  
    177     foreach ($this->getPluginPaths() as $path) 
    178     { 
    179       if (is_dir($dir = $path.'/data/generator/'.$class.'/'.$theme.'/template')) 
    180       { 
    181         $dirs[] = $dir;                                                                         // plugins 
    182       } 
    183     } 
    184  
    185     return $dirs; 
     166    return array_merge( 
     167      array(sfConfig::get('sf_data_dir').'/generator/'.$class.'/'.$theme.'/template'), // project 
     168      $this->getPluginSubPaths('/data/generator/'.$class.'/'.$theme.'/template')       //plugins 
     169    ); 
    186170  } 
    187171 
     
    196180  public function getGeneratorSkeletonDirs($class, $theme) 
    197181  { 
    198     $dirs = array(sfConfig::get('sf_data_dir').'/generator/'.$class.'/'.$theme.'/skeleton');  // project 
    199  
    200     foreach ($this->getPluginPaths() as $path) 
    201     { 
    202       if (is_dir($dir = $path.'/data/generator/'.$class.'/'.$theme.'/skeleton')) 
    203       { 
    204         $dirs[] = $dir;                                                                       // plugins 
    205       } 
    206     } 
    207  
    208     return $dirs; 
     182    return array_merge( 
     183      array(sfConfig::get('sf_data_dir').'/generator/'.$class.'/'.$theme.'/skeleton'), // project 
     184      $this->getPluginSubPaths('/data/generator/'.$class.'/'.$theme.'/skeleton')       // plugins 
     185    ); 
    209186  } 
    210187 
     
    299276   * Gets the list of enabled plugins. 
    300277   * 
    301    * @param array An array of enabled plugins 
     278   * @return array An array of enabled plugins 
    302279   */ 
    303280  public function getPlugins() 
     
    307284 
    308285  /** 
     286   * Gets the paths plugin sub-directories, minding overloaded plugins. 
     287   * 
     288   * @param  string $subPath The subdirectory to look for 
     289   * 
     290   * @return array The plugin paths. 
     291   */ 
     292  public function getPluginSubPaths($subPath = '') 
     293  { 
     294    if (array_key_exists($subPath, $this->pluginPaths)) 
     295    { 
     296      return $this->pluginPaths[$subPath]; 
     297    } 
     298 
     299    $this->pluginPaths[$subPath] = array(); 
     300    $pluginPaths = $this->getPluginPaths(); 
     301    foreach ($pluginPaths as $pluginPath) 
     302    { 
     303      if (is_dir($pluginPath.$subPath)) 
     304      { 
     305        $this->pluginPaths[$subPath][] = $pluginPath.$subPath; 
     306      } 
     307    } 
     308 
     309    return $this->pluginPaths[$subPath]; 
     310  } 
     311 
     312  /** 
    309313   * Gets the paths to plugins root directories, minding overloaded plugins. 
    310314   * 
     
    313317  public function getPluginPaths() 
    314318  { 
    315     if (!is_null($this->pluginPaths)) 
    316     { 
    317       return $this->pluginPaths
     319    if (array_key_exists('', $this->pluginPaths)) 
     320    { 
     321      return $this->pluginPaths['']
    318322    } 
    319323 
     
    322326    // order the plugins 
    323327    $basePaths = array_map(create_function('$v', 'return basename($v);'), $pluginPaths); 
    324     $this->pluginPaths = array(); 
     328    $this->pluginPaths[''] = array(); 
    325329 
    326330    foreach ($this->getPlugins() as $plugin) 
     
    328332      if (false !== $pos = array_search($plugin, $basePaths)) 
    329333      { 
    330         $this->pluginPaths[] = $pluginPaths[$pos]; 
     334        $this->pluginPaths[''][] = $pluginPaths[$pos]; 
    331335      } 
    332336      else 
     
    336340    } 
    337341 
    338     return $this->pluginPaths
     342    return $this->pluginPaths['']
    339343  } 
    340344 
  • branches/1.2/lib/filter/sfCommonFilter.class.php

    r9087 r11783  
    3636    if (false !== ($pos = strpos($content, '</head>'))) 
    3737    { 
    38       sfLoader::loadHelpers(array('Tag', 'Asset')); 
     38      $this->context->getConfiguration()->loadHelpers(array('Tag', 'Asset')); 
    3939      $html = ''; 
    4040      if (!sfConfig::get('symfony.asset.javascripts_included', false)) 
  • branches/1.2/lib/helper/DateFormHelper.php

    r11700 r11783  
    11<?php 
    22 
    3 use_helper('Form')
     3require_once dirname(__FILE__).'/FormHelper.php'
    44 
    55/* 
  • branches/1.2/lib/helper/DateHelper.php

    r8764 r11783  
    154154  if (sfConfig::get('sf_i18n')) 
    155155  { 
    156     use_helper('I18N')
     156    require_once dirname(__FILE__).'/I18NHelper.php'
    157157 
    158158    return __($string, $parameters); 
  • branches/1.2/lib/helper/FormHelper.php

    r11700 r11783  
    715715  if (!_get_option($options, 'rich', false)) 
    716716  { 
    717     use_helper('DateForm')
     717    require_once dirname(__FILE__).'/DateFormHelper.php'
    718718 
    719719    // set culture for month tag 
  • branches/1.2/lib/helper/HelperHelper.php

    r7757 r11783  
    2020function use_helper() 
    2121{ 
    22   sfLoader::loadHelpers(func_get_args(), sfContext::getInstance()->getModuleName()); 
     22  $context = sfContext::getInstance(); 
     23 
     24  $context->getConfiguration()->loadHelpers(func_get_args(), $context->getModuleName()); 
    2325} 
  • branches/1.2/lib/helper/ObjectAdminHelper.php

    r11778 r11783  
    11<?php 
    22 
    3 use_helper('Form', 'JavascriptBase', 'Helper', 'I18N'); 
     3require_once dirname(__FILE__).'/FormHelper.php'; 
     4require_once dirname(__FILE__).'/JavascriptBaseHelper.php'; 
     5require_once dirname(__FILE__).'/I18NHelper.php'; 
    46 
    57/* 
  • branches/1.2/lib/helper/ObjectHelper.php

    r11018 r11783  
    11<?php 
    22 
    3 use_helper('Form')
     3require_once dirname(__FILE__).'/FormHelper.php'
    44 
    55/* 
  • branches/1.2/lib/helper/sfRichTextEditorTinyMCE.class.php

    r11775 r11783  
    5656    sfContext::getInstance()->getResponse()->addJavascript($js_path); 
    5757 
    58     use_helper('JavascriptBase')
     58    require_once dirname(__FILE__).'/JavascriptBaseHelper.php'
    5959 
    6060    $tinymce_options = ''; 
  • branches/1.2/lib/plugins/sfProtoculousPlugin/lib/helper/JavascriptHelper.php

    r11510 r11783  
    11<?php 
    22 
    3 use_helper('JavascriptBase')
     3require_once dirname(__FILE__).'/JavascriptBaseHelper.php'
    44 
    55/* 
  • branches/1.2/lib/view/sfPHPView.class.php

    r9945 r11783  
    5050    } 
    5151 
    52     sfLoader::loadHelpers($helpers); 
     52    $this->context->getConfiguration()->loadHelpers($helpers); 
    5353  } 
    5454 
  • branches/1.2/lib/view/sfViewCacheManager.class.php

    r11502 r11783  
    860860    } 
    861861 
    862     sfLoader::loadHelpers(array('Helper', 'Url', 'Asset', 'Tag')); 
     862    $this->context->getConfiguration()->loadHelpers(array('Helper', 'Url', 'Asset', 'Tag')); 
    863863 
    864864    $bgColor      = $event['new'] ? '#9ff' : '#ff9'; 
  • branches/1.2/test/unit/filter/sfCommonFilterTest.php

    r11277 r11783  
    8181} 
    8282 
     83class ProjectConfiguration extends sfProjectConfiguration 
     84{ 
     85} 
     86 
     87class TestConfiguration extends sfApplicationConfiguration 
     88{ 
     89  public function getI18NGlobalDirs() 
     90  { 
     91    return array(dirname(__FILE__).'/fixtures'); 
     92  } 
     93} 
     94 
    8395$context = sfContext::getInstance(array( 
    8496  'request'  => 'myRequest', 
    8597  'response' => 'sfWebResponse', 
    8698)); 
     99 
     100$context->configuration = new TestConfiguration('test', true, dirname(__FILE__).'/../../lib'); 
    87101 
    88102$response = $context->response; 
  • branches/1.2/test/unit/helper/FormHelperTest.php

    r11566 r11783  
    4242  } 
    4343} 
     44 
     45class ProjectConfiguration extends sfProjectConfiguration 
     46{ 
     47} 
     48 
     49$configuration = new ProjectConfiguration(dirname(__FILE__).'/../../lib', new sfEventDispatcher()); 
    4450 
    4551$t = new lime_test(95, new lime_output_color()); 
  • branches/1.2/test/unit/sfContextMock.class.php

    r8227 r11783  
    1515 
    1616  public 
    17     $request    = null, 
    18     $response   = null, 
    19     $controller = null, 
    20     $routing    = null, 
    21     $user       = null, 
    22     $storage    = null; 
     17    $configuration = null, 
     18    $request       = null, 
     19    $response      = null, 
     20    $controller    = null, 
     21    $routing       = null, 
     22    $user          = null, 
     23    $storage       = null; 
    2324 
    2425  protected 
     
    6869  { 
    6970    return 'action'; 
     71  } 
     72 
     73  public function getConfiguration() 
     74  { 
     75    return $this->configuration; 
    7076  } 
    7177