_paths = array( VIEWS ); $patterns = array(); foreach(App::objects('helper') as $helper) { $oldHelper = strtolower(substr($helper, 0, 1)).substr($helper, 1); $patterns[] = array( "\${$oldHelper} to \$this->{$helper}", "/\\\${$oldHelper}->/", "\\\$this->{$helper}->" ); } $this->_filesRegexpUpdate($patterns); } /** * Update i18n. * * - Removes extra true param. * * @return void */ function i18n() { $this->_paths = array( CONTROLLERS, MODELS, VIEWS ); $patterns = array( array( '_filesRegexpUpdate($patterns); } protected function _filesRegexpUpdate($patterns) { if (!empty($this->params['plugin'])) { $this->_paths = array(App::pluginPath($this->params['plugin'])); } $extensions = 'php|ctp|thtml|inc|tpl'; if (!empty($this->params['ext'])) { $extensions = $this->params['ext']; } $this->_findFiles($extensions); foreach ($this->_files as $file) { $this->out('Updating ' . $file . '...', 1, Shell::VERBOSE); $this->_updateFile($file, $patterns); } } protected function _findFiles($extensions = '', $pattern = '') { foreach ($this->_paths as $path) { $Folder = new Folder($path); $files = $Folder->findRecursive(".*\.($extensions)", true); if (!empty($pattern)) { foreach ($files as $i => $file) { if (preg_match($pattern, $file)) { unset($files[$i]); } } $files = array_values($files); } $this->_files = array_merge($this->_files, $files); } } /** * Update a single file. * * @return void */ protected function _updateFile($file, $patterns) { $contents = file_get_contents($file); foreach ($patterns as $pattern) { $this->out(' * Updating ' . $pattern[0], 1, Shell::VERBOSE); $contents = preg_replace($pattern[1], $pattern[2], $contents); } $this->out('Done updating ' . $file, 1); file_put_contents($file, $contents); } /** * get the option parser * * @return void */ function getOptionParser() { $subcommandParser = array( 'options' => array( 'plugin' => array('short' => 'p', 'help' => __('The plugin to update.')), 'ext' => array('short' => 'e', 'help' => __('The extension(s) to search.')), ) ); return parent::getOptionParser() ->description("A shell to help automate upgrading from CakePHP 1.3 to 2.0. \nBe sure to have a backup of your application before running these commands.") ->addSubcommand('i18n', array( 'help' => 'Update the i18n translation method calls.', 'parser' => $subcommandParser )) ->addSubcommand('helpers', array( 'help' => 'Update calls to helpers.', 'parser' => $subcommandParser )); } }