/** * Generates new module XML, adds to file system * This command generates the necessary files and configuration * to add a new module to a Magento 2 system. * * pestle.phar Pulsestorm TestingCreator 0.0.1 * * @argument namespace Vendor Namespace? [Pulsestorm] * @argument name Module Name? [Testbed] * @argument version Version? [0.0.1] * @command generate_module */ function pestle_cli($argv) { $namespace = $argv['namespace']; $name = $argv['name']; $version = $argv['version']; $full_module_name = implode('_', [$namespace, $name]); $config = simplexml_load_string(getBlankXml('module')); $module = $config->addChild('module'); $module->addAttribute('name', $full_module_name); $module->addAttribute('setup_version', $version); $xml = $config->asXml(); $base_dir = getBaseMagentoDir(); $module_dir = implode('/', [$base_dir, 'app/code', $namespace, $name]); $etc_dir = $module_dir . '/etc'; $reg_path = $module_dir . '/registration.php'; if (is_dir($etc_dir)) { output("Module directory [{$etc_dir}] already exists, bailing"); return; } mkdir($etc_dir, 0777, $etc_dir); writeStringToFile($etc_dir . '/module.xml', $xml); output("Created: " . $etc_dir . '/module.xml'); $register = templateRegistrationPhp($full_module_name); writeStringToFile($reg_path, $register); output("Created: " . $reg_path); }
function getMenuXmlFiles() { $base = getBaseMagentoDir(); // $results = `find $base/vendor -name menu.xml`; // $results = explode("\n", $results); $results = glob_recursive("{$base}/vendor/menu.xml"); $results = array_filter($results); return $results; }
/** * "Fixes" permissions for development boxes * running mod_php by setting things to 777. * I am a traitor * @command fix_permissions_modphp */ function pestle_cli($argv) { $base = getBaseMagentoDir(); $cmds = ["find {$base}/pub/static -exec chmod 777 '{}' +", "find {$base}/var/ -exec chmod 777 '{}' +"]; foreach ($cmds as $cmd) { $results = `{$cmd}`; if ($results) { output($results); } } }
function backupOldCode($arguments, $options) { $xmls = []; $frontend_models = getFrontendModelNodesFromMagento1SystemXml($xmls); foreach ($frontend_models as $file => $nodes) { $new_file = str_replace(['/Users/alanstorm/Sites/magento-1-9-2-2.dev', '/local'], '', $file); $new_file = getBaseMagentoDir() . str_replace('/etc/', '/etc/adminhtml/', $new_file); $xml = simplexml_load_file($new_file); foreach ($nodes as $node) { list($path, $frontend_alias) = explode('::', $node); list($section, $group, $field) = explode('/', $path); $node = getSectionXmlNodeFromSectionGroupAndField($xml, $section, $group, $field); if ($node->frontend_model) { output("The frontend_model node already exists: " . $path); continue; } $class = convertAliasToClass($frontend_alias); $node->frontend_model = $class; } file_put_contents($new_file, formatXmlString($xml->asXml())); } //search XML files // $base = getBaseMagentoDir(); // $files = `find $base -name '*.xml'`; // $files = preg_split('%[\r\n]%', $files); // $files = array_filter($files, function($file){ // return strpos($file, '/view/') !== false && // !is_dir($file); // }); // // $report; // foreach($files as $file) // { // $xml = simplexml_load_file($file); // if(!$xml->head){ continue; } // output($file); // foreach($xml->head->children() as $node) // { // output(' ' . $node->getName()); // } // } }
/** * One Line Description * * @command generate_theme * @argument package Theme Package Name? [Pulsestorm] * @argument theme Theme Name? [blank] * @argument area Area? (frontend, adminhtml) [frontend] * @argument parent Parent theme (enter 'null' for none) [Magento/blank] * */ function pestle_cli($argv) { $package = $argv['package']; $theme = $argv['theme']; $area = $argv['area']; $parent = $argv['parent']; if (strpos($parent, 'null') !== false) { $parent = ''; } $base_folder = getBaseMagentoDir() . '/app/design' . '/' . $area . '/' . $package . '/' . $theme; createThemeXmlFile($base_folder, $package, $theme, $area, $parent); createRegistrationPhpFile($base_folder, $package, $theme, $area); createViewXmlFile($base_folder, $package, $theme, $area); createFrontendFolders($base_folder, $package, $theme, $area); //theme.xml //registration.php //view.xml output($base_folder); output("Done"); }
function getPathFromClass($class) { $class = trim($class, '\\'); return getBaseMagentoDir() . '/app/code/' . implode('/', explode('\\', $class)) . '.php'; }