ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE3/trunk/lib/task/openpneUpdateTask.class.php @ 10708

Last change on this file since 10708 was 10708, checked in by ebihara, 13 years ago

fixed notice

File size: 3.7 KB
Line 
1<?php
2
3/**
4 * This file is part of the OpenPNE package.
5 * (c) OpenPNE Project (http://www.openpne.jp/)
6 *
7 * For the full copyright and license information, please view the LICENSE
8 * file and the NOTICE file that were distributed with this source code.
9 */
10
11class openpneUpdateTask extends sfPropelBaseTask
12{
13  protected function configure()
14  {
15    $this->namespace        = 'openpne';
16    $this->name             = 'update';
17
18    require sfConfig::get('sf_data_dir').'/version.php';
19
20    $this->addArguments(array(
21      new sfCommandArgument('name', sfCommandArgument::OPTIONAL, 'The plugin name or "OpenPNE"', 'OpenPNE'),
22      new sfCommandArgument('before-version', sfCommandArgument::OPTIONAL, '', '3.0.0'),
23      new sfCommandArgument('after-version', sfCommandArgument::OPTIONAL, '', OPENPNE_VERSION),
24    ));
25
26    $this->addOptions(array(
27      new sfCommandOption('no-build-model', null, sfCommandOption::PARAMETER_NONE, 'Do not build model classes'),
28    ));
29
30    $this->briefDescription = 'update OpenPNE';
31    $this->detailedDescription = <<<EOF
32The [openpne:update|INFO] task updates OpenPNE and/or plugin.
33Call it with:
34
35  [./symfony openpne:update|INFO]
36EOF;
37  }
38
39  protected function execute($arguments = array(), $options = array())
40  {
41    $databaseManager = new sfDatabaseManager($this->configuration);
42
43    $dir = sfConfig::get('sf_lib_dir').'/update';
44    $prefix = 'op';
45    if ('OpenPNE' !== $arguments['name'])
46    {
47      $dir = sfConfig::get('sf_plugins_dir').'/'.$arguments['name'].'/lib/update';
48      $prefix = $arguments['name'];
49    }
50
51    $beforeVersion = self::formatVersion($arguments['before-version']);
52    $afterVersion = self::formatVersion($arguments['after-version']);
53
54    $files = sfFinder::type('file')->not_name('opUpdate.class.php')->not_name('opUpdateDoctrineMigrationProcess.class.php')->in($dir);
55    $files = array_map(create_function('$path', 'return basename($path);'), $files);
56    usort($files, array(get_class($this), 'sortBeforeVersions'));
57    foreach ($files as $file)
58    {
59      $versions = explode('_to_', str_replace('.php', '', $file), 2);
60      $_before = self::formatVersion($versions[0]);
61      $_after = self::formatVersion($versions[1]);
62
63      if (version_compare($beforeVersion, $_after, '<=') && version_compare($afterVersion, $_after, '>='))
64      {
65        $className = $prefix.'Update_'.str_replace('.php', '', $file);
66        $this->logSection('execute', $className);
67        require_once $dir.'/'.$file;
68        $obj = new $className($this->dispatcher, $databaseManager);
69        $obj->doUpdate();
70      }
71    }
72
73    if (!$options['no-build-model'])
74    {
75      $this->buildModel();
76    }
77  }
78
79  static public function sortBeforeVersions($name1, $name2)
80  {
81    $_versions = explode('_to_', str_replace('.php', '', $name1), 2);
82    $version1 = array_shift($_versions);
83    $_versions = explode('_to_', str_replace('.php', '', $name2), 2);
84    $version2 = array_shift($_versions);
85
86    return version_compare(self::formatVersion($version1), self::formatVersion($version2));
87  }
88
89  static public function formatVersion($version)
90  {
91    $_searches = array('-', '_', '+');
92    $version = str_replace($_searches, '.', $version);
93
94    $pos = strpos($version, '.dev.');
95    if (false !== $pos)
96    {
97      $time = substr($version, $pos + strlen('.dev.'));
98      $datetime = new DateTime($time);
99      $version = substr($version, 0, $pos + strlen('.dev.')).$datetime->format('U');
100    }
101
102    return $version;
103  }
104
105  protected function buildModel()
106  {
107    $task = new sfPropelBuildModelTask($this->dispatcher, $this->formatter);
108    $task->run();
109    $task = new sfPropelBuildFormsTask($this->dispatcher, $this->formatter);
110    $task->run();
111    $task = new sfPropelBuildFiltersTask($this->dispatcher, $this->formatter);
112    $task->run();
113  }
114}
Note: See TracBrowser for help on using the repository browser.