Skip to content

Commit fd8ed3b

Browse files
committed
refactor to plugin
1 parent 98598ed commit fd8ed3b

File tree

12 files changed

+279
-128
lines changed

12 files changed

+279
-128
lines changed

composer.json

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
{
2+
"name": "digitaldiff/diffbase",
3+
"description": "diff. base plugin for Craft CMS",
4+
"type": "craft-plugin",
5+
"keywords": [],
6+
"support": {
7+
"docs": "https://github.com/digitaldiff/diffbase/blob/main/README.md",
8+
"issues": "https://github.com/digitaldiff/diffbase/issues"
9+
},
10+
"license": "MIT",
11+
"authors": [
12+
{
13+
"name": "diff. Kommunikation AG",
14+
"homepage": "https://github.com/digitaldiff"
15+
}
16+
],
17+
"require": {
18+
"craftcms/cms": "^5.0.0"
19+
},
20+
"autoload": {
21+
"psr-4": {
22+
"digitaldiff\\diffbase\\": "src/"
23+
}
24+
},
25+
"extra": {
26+
"name": "diff. base module",
27+
"handle": "_diffbase",
28+
"developer": "diff. Kommunikation AG",
29+
"documentationUrl": "https://github.com/digitaldiff/diffbase/blob/main/README.md",
30+
"changelogUrl": "https://raw.githubusercontent.com/digitaldiff/diffbase/main/CHANGELOG.md",
31+
"class": "digitaldiff\\diffbase\\Plugin"
32+
}
33+
}

diffbase/Module.php

Lines changed: 0 additions & 79 deletions
This file was deleted.

diffbase/services/ApiService.php

Lines changed: 0 additions & 26 deletions
This file was deleted.

src/Plugin.php

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
<?php
2+
namespace digitaldiff\diffbase;
3+
4+
use Craft;
5+
use craft\base\Plugin as BasePlugin;
6+
use craft\web\UrlManager;
7+
use craft\events\RegisterUrlRulesEvent;
8+
use craft\web\twig\variables\Cp;
9+
use craft\events\RegisterCpNavItemsEvent;
10+
use craft\events\RegisterTemplateRootsEvent;
11+
use craft\web\View;
12+
use yii\base\Event;
13+
use digitaldiff\diffbase\models\Settings;
14+
use digitaldiff\diffbase\services\ApiService;
15+
16+
class Plugin extends BasePlugin
17+
{
18+
public string $schemaVersion = '1.0.0';
19+
// public bool $hasCpSettings = true;
20+
// public bool $hasCpSection = true;
21+
22+
public static function config(): array
23+
{
24+
return [
25+
'components' => [
26+
'apiService' => ApiService::class,
27+
],
28+
];
29+
}
30+
31+
public function init()
32+
{
33+
parent::init();
34+
35+
Craft::setAlias('@digitaldiff/diffbase', $this->getBasePath());
36+
37+
// Template-Pfad registrieren
38+
Event::on(
39+
View::class,
40+
View::EVENT_REGISTER_CP_TEMPLATE_ROOTS,
41+
function(RegisterTemplateRootsEvent $event) {
42+
$event->roots['_diffbase'] = $this->getBasePath() . '/templates';
43+
}
44+
);
45+
46+
// Site URL-Regeln für API
47+
Event::on(
48+
UrlManager::class,
49+
UrlManager::EVENT_REGISTER_SITE_URL_RULES,
50+
function (RegisterUrlRulesEvent $event) {
51+
$event->rules['api/info'] = '_diffbase/api/info';
52+
}
53+
);
54+
55+
// CP URL-Regeln
56+
Event::on(
57+
UrlManager::class,
58+
UrlManager::EVENT_REGISTER_CP_URL_RULES,
59+
function (RegisterUrlRulesEvent $event) {
60+
$event->rules['_diffbase'] = '_diffbase/cp/index';
61+
$event->rules['_diffbase/settings'] = '_diffbase/cp/settings';
62+
}
63+
);
64+
65+
Event::on(
66+
Cp::class,
67+
Cp::EVENT_REGISTER_CP_NAV_ITEMS,
68+
function (RegisterCpNavItemsEvent $event) {
69+
$event->navItems[] = [
70+
'url' => '_diffbase',
71+
'label' => 'diff. base plugin',
72+
'icon' => '@digitaldiff/diffbase/icon-mask.svg',
73+
'weight' => 2, // Position im Hauptmenü
74+
];
75+
}
76+
);
77+
78+
/* // CP Navigation
79+
Event::on(
80+
Cp::class,
81+
Cp::EVENT_REGISTER_CP_NAV_ITEMS,
82+
function (RegisterCpNavItemsEvent $event) {
83+
foreach ($event->navItems as &$item) {
84+
if ($item['url'] === 'settings') {
85+
$item['subnav']['_diffbase'] = [
86+
'label' => 'DiffBase',
87+
'url' => '_diffbase',
88+
'selected' => Craft::$app->getRequest()->getSegment(1) === '_diffbase'
89+
];
90+
break;
91+
}
92+
}
93+
}
94+
);*/
95+
}
96+
97+
protected function createSettingsModel(): Settings
98+
{
99+
return new Settings();
100+
}
101+
102+
protected function settingsHtml(): ?string
103+
{
104+
return Craft::$app->getView()->renderTemplate('_diffbase/settings', [
105+
'plugin' => $this,
106+
'settings' => $this->getSettings(),
107+
]);
108+
}
109+
}
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
<?php
2-
namespace modules\diffbase\controllers;
2+
namespace digitaldiff\diffbase\controllers;
33

44
use Craft;
55
use craft\web\Controller;
6+
use digitaldiff\diffbase\Plugin;
67

78
class ApiController extends Controller
89
{
@@ -35,8 +36,8 @@ public function actionInfo(): \yii\web\Response
3536
private function validateApiKey(): bool
3637
{
3738
$providedKey = Craft::$app->getRequest()->getParam('key');
38-
$storedKey = Craft::$app->getProjectConfig()->get('diffbase.apiKey');
39-
return $storedKey && $providedKey === $storedKey;
39+
$settings = Plugin::getInstance()->getSettings();
40+
return $settings->apiKey && $providedKey === $settings->apiKey;
4041
}
4142

4243
private function getCraftInfo(): array
Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
<?php
2-
namespace modules\diffbase\controllers;
2+
namespace digitaldiff\diffbase\controllers;
33

44
use Craft;
55
use craft\errors\BusyResourceException;
66
use craft\errors\MissingComponentException;
77
use craft\errors\StaleResourceException;
88
use craft\web\Controller;
9-
use modules\diffbase\models\Settings;
9+
use digitaldiff\diffbase\models\Settings;
10+
use digitaldiff\diffbase\Plugin;
1011
use yii\base\ErrorException;
1112
use yii\base\Exception;
1213
use yii\base\InvalidConfigException;
@@ -34,15 +35,20 @@ public function actionIndex(): \yii\web\Response
3435
// API-Key automatisch generieren wenn keiner vorhanden
3536
if (!$settings->apiKey) {
3637
$settings->apiKey = $settings->generateApiKey();
37-
Craft::$app->getProjectConfig()->set('diffbase.apiKey', $settings->apiKey);
38+
Craft::$app->getProjectConfig()->set('_diffbase.apiKey', $settings->apiKey);
3839
Craft::$app->getSession()->setNotice('API-Key wurde automatisch generiert.');
3940
}
4041

41-
return $this->renderTemplate('diffbase/index', [
42+
return $this->renderTemplate('_diffbase/index', [
4243
'settings' => $settings
4344
]);
4445
}
4546

47+
private function getSettings(): Settings
48+
{
49+
return Plugin::getInstance()->getSettings();
50+
}
51+
4652
/**
4753
* @throws NotSupportedException
4854
* @throws InvalidConfigException
@@ -59,10 +65,11 @@ public function actionGenerateApiKey(): \yii\web\Response
5965
{
6066
$this->requirePostRequest();
6167

62-
$settings = $this->getSettings();
68+
$settings = Plugin::getInstance()->getSettings();
6369
$newKey = $settings->generateApiKey();
6470

65-
Craft::$app->getProjectConfig()->set('diffbase.apiKey', $newKey);
71+
// Settings über Plugin speichern
72+
Craft::$app->plugins->savePluginSettings(Plugin::getInstance(), ['apiKey' => $newKey]);
6673
Craft::$app->getSession()->setNotice('Neuer API-Key wurde generiert.');
6774

6875
return $this->redirectToPostedUrl();
@@ -77,17 +84,10 @@ public function actionDeleteApiKey(): \yii\web\Response
7784
{
7885
$this->requirePostRequest();
7986

80-
Craft::$app->getProjectConfig()->remove('diffbase.apiKey');
87+
// Settings über Plugin speichern
88+
Craft::$app->plugins->savePluginSettings(Plugin::getInstance(), ['apiKey' => null]);
8189
Craft::$app->getSession()->setNotice('API-Key wurde gelöscht.');
8290

8391
return $this->redirectToPostedUrl();
8492
}
85-
86-
private function getSettings(): Settings
87-
{
88-
$settings = new Settings();
89-
$settings->apiKey = Craft::$app->getProjectConfig()->get('diffbase.apiKey');
90-
91-
return $settings;
92-
}
9393
}

src/icon-mask.svg

Lines changed: 10 additions & 0 deletions
Loading

src/icon.svg

Lines changed: 3 additions & 0 deletions
Loading
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?php
2-
namespace modules\diffbase\models;
2+
namespace digitaldiff\diffbase\models;
33

44
use craft\base\Model;
55

src/services/ApiService.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
namespace digitaldiff\diffbase\services;
3+
4+
use craft\base\Component;
5+
use digitaldiff\diffbase\Plugin;
6+
7+
class ApiService extends Component
8+
{
9+
public function validateApiKey(string $key): bool
10+
{
11+
$settings = Plugin::getInstance()->getSettings();
12+
return $settings->apiKey === $key;
13+
}
14+
15+
public function getSystemData(): array
16+
{
17+
$settings = Plugin::getInstance()->getSettings();
18+
return [
19+
'api_enabled' => !empty($settings->apiKey),
20+
'version' => Plugin::getInstance()->getVersion()
21+
];
22+
}
23+
}

0 commit comments

Comments
 (0)