/** * Install the model class files * * @param \Pop\Config $install * @return void */ public static function install($install) { echo \Pop\I18n\I18n::factory()->__('Creating model class files...') . PHP_EOL; // Create model class folder $modelDir = $install->project->base . '/module/' . $install->project->name . '/src/' . $install->project->name . '/Model'; if (!file_exists($modelDir)) { mkdir($modelDir); } $models = $install->models->asArray(); foreach ($models as $model) { $modelName = ucfirst(\Pop\Filter\String::underscoreToCamelcase($model)); // Define namespace $ns = new NamespaceGenerator($install->project->name . '\\Model'); // Create and save model class file $modelCls = new Generator($modelDir . '/' . $modelName . '.php', Generator::CREATE_CLASS); $modelCls->setNamespace($ns); $modelCls->save(); } }
public function testRenderAndSave() { $c = new Generator(__DIR__ . '/../tmp/Test.php', Generator::CREATE_CLASS); $c->setNamespace(new NamespaceGenerator('Test\\Space')); $c->setBody('test body')->setClose(true); $c->appendToBody('more code'); $body = $c->render(true); ob_start(); $c->render(); $output = ob_get_clean(); $this->assertContains('namespace Test\\Space', $output); $c->save(); $this->assertContains('test body', $body); $this->assertContains('more code', $body); $this->fileExists(__DIR__ . '/../tmp/Test.php'); if (file_exists(__DIR__ . '/../tmp/Test.php')) { unlink(__DIR__ . '/../tmp/Test.php'); } }
/** * Install the project class files * * @param \Pop\Config $install * @param string $installDir * @return void */ public static function install($install, $installDir) { // Create the project class file $projectCls = new Generator($install->project->base . '/module/' . $install->project->name . '/src/' . $install->project->name . '/Project.php', Generator::CREATE_CLASS); // Set namespace $ns = new NamespaceGenerator($install->project->name); $ns->setUse('Pop\\Project\\Project', 'P'); // Create 'run' method $run = new MethodGenerator('run'); $run->setDesc('Add any project specific code to this method for run-time use here.'); $run->appendToBody('parent::run();', false); $run->getDocblock()->setReturn('void'); // Finalize the project config file and save it $projectCls->setNamespace($ns); $projectCls->code()->setParent('P')->addMethod($run); $projectCls->save(); $input = self::installWeb(); // Install any web config and controller files if ($input != 'n') { if (file_exists(__DIR__ . '/Web/index.php')) { $index = new Generator(__DIR__ . '/Web/index.php'); $contents = $index->read() . '// Run the project' . PHP_EOL . 'try {' . PHP_EOL . ' $project->run();' . PHP_EOL . '} catch (\\Exception $e) {' . PHP_EOL . ' echo $e->getMessage();' . PHP_EOL . '}' . PHP_EOL; file_put_contents($install->project->docroot . '/index.php', $contents); } if ($input == 'a') { if (file_exists(__DIR__ . '/Web/ht.access')) { copy(__DIR__ . '/Web/ht.access', $install->project->docroot . '/.htaccess'); } } else { if ($input == 'i') { if (file_exists(__DIR__ . '/Web/web.config')) { copy(__DIR__ . '/Web/web.config', $install->project->docroot . '/web.config'); } } else { echo \Pop\I18n\I18n::factory()->__('You will have to install your web server rewrite configuration manually.') . PHP_EOL; } } } }
/** * Install the table class files * * @param \Pop\Config $install * @param array $dbTables * @return void */ public static function install($install, $dbTables) { echo \Pop\I18n\I18n::factory()->__('Creating database table class files...') . PHP_EOL; // Create table class folder $tableDir = $install->project->base . '/module/' . $install->project->name . '/src/' . $install->project->name . '/Table'; if (!file_exists($tableDir)) { mkdir($tableDir); } // Loop through the tables, creating the classes foreach ($dbTables as $table => $value) { $prefix = isset($value['prefix']) ? $value['prefix'] : null; $tableName = ucfirst(\Pop\Filter\String::underscoreToCamelcase(str_replace($prefix, '', $table))); $ns = new NamespaceGenerator($install->project->name . '\\Table'); $ns->setUse('Pop\\Db\\Record'); if (strpos($value['primaryId'], '|') !== false) { $pIdType = 'array'; $pId = explode('|', $value['primaryId']); } else { $pIdType = 'string'; $pId = $value['primaryId']; } if (null !== $prefix) { $prefix = new PropertyGenerator('prefix', 'string', $prefix, 'protected'); } $propId = new PropertyGenerator('primaryId', $pIdType, $pId, 'protected'); $propAuto = new PropertyGenerator('auto', 'boolean', $value['auto'], 'protected'); // Create and save table class file $tableCls = new Generator($tableDir . '/' . $tableName . '.php', Generator::CREATE_CLASS); $tableCls->setNamespace($ns); $tableCls->code()->setParent('Record')->addProperty($propId)->addProperty($propAuto); if (null !== $prefix) { $tableCls->code()->addProperty($prefix); } $tableCls->save(); } }
/** * Install the form class files * * @param \Pop\Config $install * @return void */ public static function install($install) { echo \Pop\I18n\I18n::factory()->__('Creating form class files...') . PHP_EOL; // Create form class folder $formDir = $install->project->base . '/module/' . $install->project->name . '/src/' . $install->project->name . '/Form'; if (!file_exists($formDir)) { mkdir($formDir); } $forms = $install->forms->asArray(); foreach ($forms as $name => $form) { $formName = ucfirst(\Pop\Filter\String::underscoreToCamelcase($name)); // Define namespace $ns = new NamespaceGenerator($install->project->name . '\\Form'); $ns->setUse('Pop\\Form\\Form')->setUse('Pop\\Form\\Element')->setUse('Pop\\Validator'); // Create the constructor $construct = new MethodGenerator('__construct'); $construct->setDesc('Constructor method to instantiate the form object'); $construct->getDocblock()->setReturn('self'); $construct->addArguments(array(array('name' => 'action', 'value' => 'null', 'type' => 'string'), array('name' => 'method', 'value' => "'post'", 'type' => 'string'), array('name' => 'fields', 'value' => 'null', 'type' => 'array'), array('name' => 'indent', 'value' => 'null', 'type' => 'string'))); // Create the init values array within the constructor if (is_array($form) && count($form) > 0) { $construct->appendToBody("\$this->initFieldsValues = array ("); $i = 0; foreach ($form as $name => $field) { $i++; $construct->appendToBody(" '" . $name . "' => array ("); $j = 0; foreach ($field as $key => $value) { $j++; $comma = $j < count($field) ? ',' : null; if ($key == 'validators') { $val = null; if (is_array($value)) { $val = 'array(' . PHP_EOL; foreach ($value as $v) { $val .= ' new Validator\\' . $v . ',' . PHP_EOL; } $val .= ' )'; } else { $val = 'new Validator\\' . $value; } $construct->appendToBody(" '{$key}' => {$val}{$comma}"); } else { if ($key == 'value' || $key == 'marked' || $key == 'attributes' || $key == 'error') { $val = var_export($value, true); $val = str_replace(PHP_EOL, PHP_EOL . ' ', $val); if (strpos($val, 'Select::') !== false) { $val = 'Element\\' . str_replace("'", '', $val); } $construct->appendToBody(" '{$key}' => {$val}{$comma}"); } else { if (is_bool($value)) { $val = $value ? 'true' : 'false'; } else { $val = "'" . $value . "'"; } $construct->appendToBody(" '{$key}' => {$val}{$comma}"); } } } $end = $i < count($form) ? ' ),' : ' )'; $construct->appendToBody($end); } $construct->appendToBody(");"); } $construct->appendToBody("parent::__construct(\$action, \$method, \$fields, \$indent);"); // Create and save form class file $formCls = new Generator($formDir . '/' . $formName . '.php', Generator::CREATE_CLASS); $formCls->setNamespace($ns); $formCls->code()->setParent('Form')->addMethod($construct); $formCls->save(); } }
<?php require_once '../../bootstrap.php'; use Pop\Code; try { // Create the code generator object $code = new Code\Generator('../tmp/MyInterface.php', Code\Generator::CREATE_INTERFACE); $code->setDocblock(new Code\Generator\DocblockGenerator('This is my test interface file'))->getDocblock()->setTag('category', 'Pop')->setTag('package', 'Pop_Code')->setTag('author', 'Joe Author'); // Create namespace object $ns = new Code\Generator\NamespaceGenerator('Some\\Other'); $ns->setUse('Some\\Other\\Thing')->setUse('Some\\Other\\Blah', 'B')->setUse('Some\\Other\\Another'); // Create a method object $method = new Code\Generator\MethodGenerator('testMethod'); $method->setDesc('This is a test method')->addArgument('test', "null", '\\Pop\\Filter\\String')->addArgument('other', "array()", 'array'); // Create another method object $method2 = new Code\Generator\MethodGenerator('anotherMethod'); $method2->setDesc('This is another test method')->addArgument('someParam', "array()", 'array'); // Add code pieces to the code file $code->setNamespace($ns); $code->code()->setDocblock(new Code\Generator\DocblockGenerator('This is my test interface'))->getDocblock()->setTag('category', 'Pop')->setTag('package', 'Pop_Code')->setTag('author', 'Joe Author'); $code->code()->addMethod($method)->addMethod($method2); // Render and save the interface $code->save(); echo 'Interface saved.'; } catch (\Exception $e) { echo $e->getMessage() . PHP_EOL . PHP_EOL; }