feat(ws_faqAccordion): Add installer; create entity & db table
This commit is contained in:
@@ -0,0 +1,18 @@
|
|||||||
|
services:
|
||||||
|
_defaults:
|
||||||
|
autowire: true
|
||||||
|
autoconfigure: true
|
||||||
|
|
||||||
|
# Repository - this makes it available via dependency injection
|
||||||
|
Module\WsFaqAccordion\Repository\FaqAccordionRepository:
|
||||||
|
public: true
|
||||||
|
factory: ["@doctrine.orm.default_entity_manager", getRepository]
|
||||||
|
arguments:
|
||||||
|
- Module\WsFaqAccordion\Entity\FaqAccordion
|
||||||
|
|
||||||
|
# Database installer
|
||||||
|
Module\WsFaqAccordion\Database\faqInstaller:
|
||||||
|
public: true
|
||||||
|
arguments:
|
||||||
|
- "@doctrine.dbal.default_connection"
|
||||||
|
- "%database_prefix%"
|
||||||
|
|||||||
82
src/Database/faqInstaller.php
Normal file
82
src/Database/faqInstaller.php
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 2026 De Websmid
|
||||||
|
*
|
||||||
|
* @author De Websmid <contact@De Websmid.com>
|
||||||
|
* @copyright 2026 De Websmid
|
||||||
|
* @license De Websmid
|
||||||
|
*
|
||||||
|
* NOTICE OF LICENSE
|
||||||
|
*
|
||||||
|
* This source file is subject to the Academic Free License 3.0 (AFL-3.0).
|
||||||
|
* It is also available through the world-wide-web at this URL: https://opensource.org/licenses/AFL-3.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Module\WsFaqAccordion\Database;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\Connection;
|
||||||
|
use Doctrine\DBAL\Exception as DBALException;
|
||||||
|
|
||||||
|
class faqInstaller
|
||||||
|
{
|
||||||
|
private Connection $connection;
|
||||||
|
private string $dbPrefix;
|
||||||
|
|
||||||
|
public function __construct(Connection $connection, string $dbPrefix)
|
||||||
|
{
|
||||||
|
$this->connection = $connection;
|
||||||
|
$this->dbPrefix = $dbPrefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createTables(): array
|
||||||
|
{
|
||||||
|
$errors = [];
|
||||||
|
$this->dropTables();
|
||||||
|
$sqlInstallFile = dirname(__DIR__) . '/Resources/data/install.sql';
|
||||||
|
|
||||||
|
$sqlContent = file_get_contents($sqlInstallFile);
|
||||||
|
$sqlContent = str_replace('PREFIX_', $this->dbPrefix, $sqlContent);
|
||||||
|
|
||||||
|
$sqlQueries = array_filter(array_map('trim', explode(';', $sqlContent)));
|
||||||
|
|
||||||
|
foreach ($sqlQueries as $query) {
|
||||||
|
if (empty($query)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$this->connection->executeQuery($query);
|
||||||
|
} catch (DBALException $e) {
|
||||||
|
$errors[] = [
|
||||||
|
'key' => $e->getMessage(),
|
||||||
|
'parameters' => [],
|
||||||
|
'domain' => 'Admin.Modules.Notification',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function dropTables(): array
|
||||||
|
{
|
||||||
|
$errors = [];
|
||||||
|
$tableNames = [
|
||||||
|
'ws_faqaccordion',
|
||||||
|
];
|
||||||
|
foreach ($tableNames as $tableName) {
|
||||||
|
$sql = 'DROP TABLE IF EXISTS ' . $this->dbPrefix . $tableName;
|
||||||
|
try {
|
||||||
|
$this->connection->executeQuery($sql);
|
||||||
|
} catch (DBALException $e) {
|
||||||
|
$errors[] = [
|
||||||
|
'key' => $e->getMessage(),
|
||||||
|
'parameters' => [],
|
||||||
|
'domain' => 'Admin.Modules.Notification',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $errors;
|
||||||
|
}
|
||||||
|
}
|
||||||
117
src/Entity/faqAccordion.php
Normal file
117
src/Entity/faqAccordion.php
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2026 De Websmid
|
||||||
|
*
|
||||||
|
* @author De Websmid <contact@De Websmid.com>
|
||||||
|
* @copyright 2026 De Websmid
|
||||||
|
* @license Academic Free License 3.0 (AFL-3.0)
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Module\WsFaqAccordion\Entity;
|
||||||
|
|
||||||
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\Table()
|
||||||
|
* @ORM\Entity(repositoryClass="Module\WsFaqAccordion\Repository\FaqAccordionRepository")
|
||||||
|
*/
|
||||||
|
class faqAccordion
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*
|
||||||
|
* @ORM\Id
|
||||||
|
* @ORM\Column(name="id", type="integer")
|
||||||
|
* @ORM\GeneratedValue(strategy="AUTO")
|
||||||
|
*/
|
||||||
|
private $id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*
|
||||||
|
* @ORM\Column(name="title", type="string", length=255)
|
||||||
|
*/
|
||||||
|
private $title;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*
|
||||||
|
* @ORM\Column(name="description", type="text")
|
||||||
|
*/
|
||||||
|
private $description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*
|
||||||
|
* @ORM\Column(name="position", type="integer")
|
||||||
|
*/
|
||||||
|
private $position;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int|null
|
||||||
|
*/
|
||||||
|
public function getId(): ?int
|
||||||
|
{
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public function getTitle(): ?string
|
||||||
|
{
|
||||||
|
return $this->title;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $title
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setTitle(string $title): self
|
||||||
|
{
|
||||||
|
$this->title = $title;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public function getDescription(): ?string
|
||||||
|
{
|
||||||
|
return $this->description;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $description
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setDescription(string $description): self
|
||||||
|
{
|
||||||
|
$this->description = $description;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int|null
|
||||||
|
*/
|
||||||
|
public function getPosition(): ?int
|
||||||
|
{
|
||||||
|
return $this->position;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $position
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setPosition(int $position): self
|
||||||
|
{
|
||||||
|
$this->position = $position;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
||||||
0
src/Form/formController.php
Normal file
0
src/Form/formController.php
Normal file
@@ -2,11 +2,41 @@
|
|||||||
|
|
||||||
namespace Module\WsFaqAccordion\Module;
|
namespace Module\WsFaqAccordion\Module;
|
||||||
|
|
||||||
|
use Module\WsFaqAccordion\Database\faqInstaller;
|
||||||
|
|
||||||
trait Install
|
trait Install
|
||||||
{
|
{
|
||||||
public function install()
|
public function install()
|
||||||
{
|
{
|
||||||
return parent::install()
|
return $this->installTables()
|
||||||
&& $this->registerHook('displayHomeAccordion');
|
&& parent::install()
|
||||||
|
&& $this->registerHook('displayHomeAccordion');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getInstaller(): faqInstaller
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$installer = $this->get(faqInstaller::class);
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
$installer = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$installer) {
|
||||||
|
$installer = new faqInstaller(
|
||||||
|
$this->get('doctrine.dbal.default_connection'),
|
||||||
|
$this->getContainer()->getParameter('database_prefix')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $installer;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function installTables(): bool
|
||||||
|
{
|
||||||
|
/** @var faqInstaller $installer */
|
||||||
|
$installer = $this->getInstaller();
|
||||||
|
$errors = $installer->createTables();
|
||||||
|
|
||||||
|
return empty($errors);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
16
src/Module/adminHooks.php
Normal file
16
src/Module/adminHooks.php
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Module\WsFaqAccordion\Module;
|
||||||
|
|
||||||
|
trait adminHooks
|
||||||
|
{
|
||||||
|
// This function is for the configuraion page on the back office. When you click "configure" this is called.
|
||||||
|
public function getContent()
|
||||||
|
{
|
||||||
|
return $this->renderForm();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function renderForm(){
|
||||||
|
return("Hello! This is the configuration page in the back office.");
|
||||||
|
}
|
||||||
|
}
|
||||||
20
src/Repository/faqAccordionRepository.php
Normal file
20
src/Repository/faqAccordionRepository.php
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 2026 De Websmid
|
||||||
|
*
|
||||||
|
* @author De Websmid <contact@De Websmid.com>
|
||||||
|
* @copyright 2026 De Websmid
|
||||||
|
* @license Academic Free License 3.0 (AFL-3.0)
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Module\WsFaqAccordion\Repository;
|
||||||
|
|
||||||
|
use Doctrine\ORM\EntityRepository;
|
||||||
|
use Module\WsFaqAccordion\Entity\FaqAccordion;
|
||||||
|
|
||||||
|
class faqAccordionRepository extends EntityRepository
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
7
src/Resources/data/install.sql
Normal file
7
src/Resources/data/install.sql
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
CREATE TABLE IF NOT EXISTS `PREFIX_faqaccordion` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`title` varchar(255) NOT NULL,
|
||||||
|
`description` text NOT NULL,
|
||||||
|
`position` int(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
@@ -21,6 +21,7 @@
|
|||||||
*/
|
*/
|
||||||
use Module\WsFaqAccordion\Module\Install;
|
use Module\WsFaqAccordion\Module\Install;
|
||||||
use Module\WsFaqAccordion\Module\displayHooks;
|
use Module\WsFaqAccordion\Module\displayHooks;
|
||||||
|
use Module\WsFaqAccordion\Module\adminHooks;
|
||||||
|
|
||||||
|
|
||||||
if (!defined('_PS_VERSION_')) {
|
if (!defined('_PS_VERSION_')) {
|
||||||
@@ -31,6 +32,7 @@ class ws_faqAccordion extends Module
|
|||||||
{
|
{
|
||||||
use Install;
|
use Install;
|
||||||
use displayHooks;
|
use displayHooks;
|
||||||
|
use adminHooks;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user