init module

This commit is contained in:
Kai Ton 2024-05-16 09:08:45 +07:00
parent e42620c625
commit 867e553946
13 changed files with 254 additions and 0 deletions

View File

@ -0,0 +1,86 @@
<?php
namespace IpSupply\SyncOrder\Api;
use IpSupply\SyncOrder\Api\RepositoryInterface;
/**
* @api
*/
class Repository implements RepositoryInterface
{
function __construct()
{
$this->authorization();
}
private function authorization()
{
$headers = apache_request_headers();
$apiKey = \IpSupply\SyncOrder\Helper::API_KEY;
foreach ($headers as $key => $value) {
$key = strtolower($key);
if ('api_key' === $key && $value === $apiKey) {
return true;
}
}
header('HTTP/1.1 401 Unauthorized');
header('Accept: application/json');
header('Content-Type: application/json');
die(json_encode(['message' => 'unauthorized']));
}
private function _responseOk(array $data)
{
header('HTTP/1.1 200 Ok');
header('Accept: application/json');
header('Content-Type: application/json');
die(json_encode($data));
}
private function _responseFail(array $data)
{
header('HTTP/1.1 400 Bad request');
header('Accept: application/json');
header('Content-Type: application/json');
die(json_encode($data));
}
private function _responseMethodFail()
{
header('HTTP/1.1 400 bad request');
header('Accept: application/json');
header('Content-Type: application/json');
die(json_encode([
'status' => false,
'message' => 'Param ?method=... not exist!'
]));
}
public function getData()
{
return $this->_responseOk([
'status' => true,
'data' => []
]);
// return $this->_responseMethodFail();
}
public function postData()
{
parse_str(
string: file_get_contents('php://input'),
result: $payload
);
return $this->_responseOk([
'status' => true,
'data' => [], // TODO
'payload' => $payload
]);
// return $this->_responseMethodFail();
}
}

View File

@ -0,0 +1,23 @@
<?php
namespace IpSupply\SyncOrder\Api;
/**
* @api
*/
interface RepositoryInterface
{
/**
* method: GET
*
* @return string
*/
public function getData();
/**
* methot: POST
*
* @return string
*/
public function postData();
}

View File

@ -0,0 +1,29 @@
<?php
namespace IpSupply\SyncOrder\Block\Adminhtml;
use Magento\Backend\Block\Template;
class Config extends Template
{
protected $urlInterface;
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Backend\Model\UrlInterface $urlInterface,
$data = []
)
{
$this->urlInterface = $urlInterface;
parent::__construct($context, $data);
}
public function getSecretKey()
{
return $this->urlInterface->getSecretKey();
}
public function getApiKey()
{
return \IpSupply\SyncOrder\Helper::API_KEY;
}
}

View File

@ -0,0 +1,27 @@
<?php
namespace IpSupply\SyncOrder\Controller\Adminhtml\Config;
class Index extends \Magento\Backend\App\Action
{
protected $resultPageFactory = false;
public function __construct(
\Magento\Backend\App\Action\Context $context,
\Magento\Framework\View\Result\PageFactory $resultPageFactory
) {
parent::__construct($context);
$this->resultPageFactory = $resultPageFactory;
}
public function execute()
{
$resultPage = $this->resultPageFactory->create();
$resultPage->setActiveMenu('IpSupply_SyncOrder::menu');
$resultPage->getConfig()->getTitle()->prepend(__('IpSupply | Sync Order'));
return $resultPage;
}
protected function _isAllowed()
{
return $this->_authorization->isAllowed('IpSupply_SyncOrder::config');
}
}

View File

@ -0,0 +1,7 @@
<?php
namespace IpSupply\SyncOrder;
final class Helper {
public const API_KEY = 'IpSupply@123';
}

View File

@ -0,0 +1,32 @@
<?xml version="1.0"?>
<config
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:module:IpSupply_SyncOrder:etc/menu.xsd"
>
<menu>
<add
id="IpSupply_SyncOrder::ipsupply"
title="Ip Supply"
module="IpSupply_SyncOrder"
sortOrder="51"
resource="IpSupply_SyncOrder::ipsupply"
/>
<add
module="IpSupply_SyncOrder"
parent="IpSupply_SyncOrder::ipsupply"
title="Sync Order"
sortOrder="10"
id="IpSupply_SyncOrder::config"
resource="IpSupply_SyncOrder::config"
action="syncorder/config/index"
/>
<!--
Parent: Value is the ID of the main menu. It specifies the sub menu belongs to parentory menu.
Action: Direct URL if clicking to the menu, as format [router_name]/[controller_name]/[action_name].
In our example, menu links with module Bss, controller Create and action Index
+ router_name: etc/adminhtml/routes.xml as route[id="router_name"]
+ controller_name: Controller/Adminhtml/[controller_name]/
+ action_name: Controller/Adminhtml/[controller_name]/[action_name].php
-->
</menu>
</config>

View File

@ -0,0 +1,11 @@
<?xml version="1.0"?>
<config
xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<router id="admin">
<route id="syncorder" frontName="syncorder">
<module name="IpSupply_SyncOrder" before="Magento_Backend" />
</route>
</router>
</config>

View File

@ -0,0 +1,4 @@
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="IpSupply_SyncOrder" setup_version="1.0.1"/>
</config>

View File

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
<route url="ipsupply/syncorder/sync" method="GET">
<service class="IpSupply\SyncOrder\Api\RepositoryInterface" method="getData"/>
<resources>
<resource ref="anonymous"/>
</resources>
</route>
<route url="ipsupply/syncorder/sync" method="POST">
<service class="IpSupply\SyncOrder\Api\RepositoryInterface" method="postData"/>
<resources>
<resource ref="anonymous"/>
</resources>
</route>
</routes>

View File

@ -0,0 +1,6 @@
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'IpSupply_SyncOrder',
__DIR__
);

View File

@ -0,0 +1,14 @@
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<head>
<css src="IpSupply_SyncOrder::css/config.css"/>
</head>
<body>
<referenceContainer name="content">
<block class="IpSupply\SyncOrder\Block\Adminhtml\Config" template="IpSupply_SyncOrder::syncorder_config.phtml"/>
<!--
Template: IpSupply_SyncOrder::syncorder_config.phtml to ../templates/syncorder_config.phtml
-->
</referenceContainer>
</body>
</page>