Skip to content

Commit 9ffb21c

Browse files
author
Ashutosh Srivastva
authored
Merge pull request #5 from ashutoshwebkul/dev
merge latest changes
2 parents 5697386 + 4dc2bb1 commit 9ffb21c

31 files changed

+2388
-12
lines changed

Model/Generate/Controller.php

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
<?php
2+
/**
3+
* Webkul Software.
4+
*
5+
* @package Webkul_CodeGenerator
6+
* @author Ashutosh Srivastava
7+
*/
8+
9+
namespace Webkul\CodeGenerator\Model\Generate;
10+
11+
use Webkul\CodeGenerator\Model\Helper as CodeHelper;
12+
use Webkul\CodeGenerator\Api\GenerateInterface;
13+
14+
/**
15+
* Class controller
16+
*/
17+
class Controller implements GenerateInterface
18+
{
19+
20+
protected $helper;
21+
22+
public function __construct(
23+
CodeHelper $helper
24+
) {
25+
$this->helper = $helper;
26+
}
27+
28+
/**
29+
* @inheritDoc
30+
*/
31+
public function execute($data)
32+
{
33+
$modelName = $data['name'];
34+
$path = $data['path'];
35+
$area = $data['area'];
36+
37+
CodeHelper::createDirectory(
38+
$controllerPath = $path
39+
);
40+
41+
if ($area == 'frontend') {
42+
$this->createFrontController($controllerPath, $data);
43+
} else {
44+
$this->createAdminController($controllerPath, $data);
45+
}
46+
47+
return ['status' => 'success', 'message' => "Controller Class generated successfully"];
48+
}
49+
50+
/**
51+
* create front controller
52+
*
53+
* @param string $dir
54+
* @param array $data
55+
* @return void
56+
*/
57+
public function createFrontController($dir, $data)
58+
{
59+
$fileName = ucfirst($data['name']);
60+
$nameSpace = $data['module'];
61+
$pathParts = explode("Controller/", $data['path']);
62+
63+
$nameArray = explode("_", $nameSpace);
64+
$nameSpace = implode("\\", $nameArray);
65+
$actionPath = explode("/", $pathParts[1]);
66+
67+
$nameSpace = $nameSpace."\\Controller\\".implode("\\", $actionPath);
68+
69+
$controllerFile = $this->helper->getTemplatesFiles('templates/controller/controller_front.php.dist');
70+
$controllerFile = str_replace('%module_name%', $data['module'], $controllerFile);
71+
$controllerFile = str_replace('%class_name%', $fileName, $controllerFile);
72+
$controllerFile = str_replace('%namespace%', $nameSpace, $controllerFile);
73+
$this->helper->saveFile(
74+
$dir.DIRECTORY_SEPARATOR.$fileName.'.php',
75+
$controllerFile
76+
);
77+
}
78+
79+
/**
80+
* create admin controller
81+
*
82+
* @param string $dir
83+
* @param array $data
84+
* @return void
85+
*/
86+
public function createAdminController($dir, $data)
87+
{
88+
$fileName = ucfirst($data['name']);
89+
$nameSpace = $data['module'];
90+
$pathParts = explode("Controller/", $data['path']);
91+
92+
$nameArray = explode("_", $nameSpace);
93+
$nameSpace = implode("\\", $nameArray);
94+
$actionPath = explode("/", $pathParts[1]);
95+
96+
$nameSpace = $nameSpace."\\Controller\\Adminhtml\\".implode("\\", $actionPath);
97+
98+
$controllerFile = $this->helper->getTemplatesFiles('templates/controller/controller_admin.php.dist');
99+
$controllerFile = str_replace('%module_name%', $data['module'], $controllerFile);
100+
$controllerFile = str_replace('%class_name%', $fileName, $controllerFile);
101+
$controllerFile = str_replace('%namespace%', $nameSpace, $controllerFile);
102+
$this->helper->saveFile(
103+
$dir.DIRECTORY_SEPARATOR.$fileName.'.php',
104+
$controllerFile
105+
);
106+
}
107+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?php
2+
/**
3+
* Webkul Software.
4+
*
5+
* @package Webkul_CodeGenerator
6+
* @author Ashutosh Srivastava
7+
*/
8+
9+
namespace Webkul\CodeGenerator\Model\Generate\Controller;
10+
11+
class Validator implements \Webkul\CodeGenerator\Api\ValidatorInterface
12+
{
13+
public function validate($data)
14+
{
15+
$module = $data['module'];
16+
$type = $data['type'];
17+
$name = $data['name'];
18+
$area = $data['area'] ?? null;
19+
$path = $data['path'] ?? null;
20+
$response = [];
21+
if ($module) {
22+
$moduleManager = \Magento\Framework\App\ObjectManager::getInstance()
23+
->get(\Magento\Framework\Module\ModuleListInterface::class);
24+
$moduleData = $moduleManager->getOne($module);
25+
if (!$moduleData) {
26+
throw new \InvalidArgumentException(__("invalid module name"));
27+
}
28+
$response["module"] = $module;
29+
} else {
30+
throw new \InvalidArgumentException(__("module name not provided"));
31+
}
32+
33+
if (!$area || !in_array($area, ['frontend', 'adminhtml'])) {
34+
throw new \InvalidArgumentException(__("invalid area type provided"));
35+
} else {
36+
$response['area'] = $area;
37+
}
38+
39+
if ($name) {
40+
$response["name"] = $name;
41+
} else {
42+
throw new \InvalidArgumentException(__("name is required"));
43+
}
44+
45+
$dir = \Magento\Framework\App\ObjectManager::getInstance()
46+
->get(\Magento\Framework\Module\Dir::class);
47+
48+
$modulePath = $dir->getDir($module);
49+
$response["path"] = $modulePath;
50+
if ($area == 'frontend') {
51+
$response["path"] = $modulePath.DIRECTORY_SEPARATOR.'Controller';
52+
} else {
53+
$response["path"] = $modulePath.DIRECTORY_SEPARATOR.'Controller'.DIRECTORY_SEPARATOR.'Adminhtml';
54+
}
55+
if (!$path) {
56+
throw new \InvalidArgumentException(__("path is required"));
57+
} else {
58+
$pathParts = explode("_", $path);
59+
60+
$response["path"] = $response["path"].DIRECTORY_SEPARATOR.implode(DIRECTORY_SEPARATOR, $pathParts);
61+
}
62+
63+
$response["type"] = $type;
64+
65+
return $response;
66+
}
67+
}

Model/Generate/Helper.php

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?php
2+
/**
3+
* Webkul Software.
4+
*
5+
* @package Webkul_CodeGenerator
6+
* @author Ashutosh Srivastava
7+
*/
8+
9+
namespace Webkul\CodeGenerator\Model\Generate;
10+
11+
use Webkul\CodeGenerator\Model\Helper as CodeHelper;
12+
use Webkul\CodeGenerator\Api\GenerateInterface;
13+
14+
/**
15+
* Class Helper
16+
*/
17+
class Helper implements GenerateInterface
18+
{
19+
20+
protected $helper;
21+
22+
public function __construct(
23+
CodeHelper $helper
24+
) {
25+
$this->helper = $helper;
26+
}
27+
28+
/**
29+
* @inheritDoc
30+
*/
31+
public function execute($data)
32+
{
33+
$modelName = $data['name'];
34+
$path = $data['path'];
35+
36+
CodeHelper::createDirectory(
37+
$helperDirPath = $path.DIRECTORY_SEPARATOR.'Helper'
38+
);
39+
40+
$this->createHelper($helperDirPath, $data);
41+
42+
return ['status' => 'success', 'message' => "Helper Class generated successfully"];
43+
}
44+
45+
/**
46+
* create helper class
47+
*
48+
* @param string $dir
49+
* @param array $data
50+
* @return void
51+
*/
52+
public function createHelper($dir, $data)
53+
{
54+
$fileName = ucfirst($data['name']);
55+
$nameSpace = $data['module'];
56+
$nameArray = explode("_", $nameSpace);
57+
$helperFile = $this->helper->getTemplatesFiles('templates/helper/helper.php.dist');
58+
$helperFile = str_replace('%module_name%', $data['module'], $helperFile);
59+
$helperFile = str_replace('%helper_name%', $fileName, $helperFile);
60+
$helperFile = str_replace('%namespace%', $nameArray[0].'\\'.$nameArray[1], $helperFile);
61+
$this->helper->saveFile(
62+
$dir.DIRECTORY_SEPARATOR.$fileName.'.php',
63+
$helperFile
64+
);
65+
}
66+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
/**
3+
* Webkul Software.
4+
*
5+
* @package Webkul_CodeGenerator
6+
* @author Ashutosh Srivastava
7+
*/
8+
9+
namespace Webkul\CodeGenerator\Model\Generate\Helper;
10+
11+
class Validator implements \Webkul\CodeGenerator\Api\ValidatorInterface
12+
{
13+
public function validate($data)
14+
{
15+
$module = $data['module'];
16+
$type = $data['type'];
17+
$name = $data['name'];
18+
$response = [];
19+
if ($module) {
20+
$moduleManager = \Magento\Framework\App\ObjectManager::getInstance()
21+
->get(\Magento\Framework\Module\ModuleListInterface::class);
22+
$moduleData = $moduleManager->getOne($module);
23+
if (!$moduleData) {
24+
throw new \InvalidArgumentException(__("invalid module name"));
25+
}
26+
$response["module"] = $module;
27+
} else {
28+
throw new \InvalidArgumentException(__("module name not provided"));
29+
}
30+
31+
if ($name) {
32+
$response["name"] = $name;
33+
} else {
34+
throw new \InvalidArgumentException(__("name is required"));
35+
}
36+
37+
$dir = \Magento\Framework\App\ObjectManager::getInstance()
38+
->get(\Magento\Framework\Module\Dir::class);
39+
40+
$modulePath = $dir->getDir($module);
41+
$response["path"] = $modulePath;
42+
$response["type"] = $type;
43+
44+
return $response;
45+
}
46+
}

0 commit comments

Comments
 (0)