Skip to content

Commit 96fe318

Browse files
committed
connection add form
1 parent 85c37ef commit 96fe318

13 files changed

Lines changed: 498 additions & 15 deletions

.phpcs.xml

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
<?xml version="1.0"?>
2-
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/squizlabs/PHP_CodeSniffer/master/phpcs.xsd">
3-
<arg name="basepath" value="."/>
4-
<arg name="cache" value=".phpcs-cache"/>
5-
<arg name="colors"/>
6-
<arg name="extensions" value="php"/>
7-
<arg name="parallel" value="10"/>
2+
<ruleset
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/squizlabs/PHP_CodeSniffer/master/phpcs.xsd"
5+
>
6+
<file>files/</file>
7+
<arg name="extensions" value="php" />
8+
<arg value="p"/>
9+
<arg name="basepath" value="."/>
810

9-
<!-- Show progress -->
10-
<arg value="p"/>
11-
12-
<!-- Paths to check -->
13-
<file>files</file>
14-
15-
<!-- Include all rules from the Zend Coding Standard -->
16-
<rule ref="PSR12"/>
17-
</ruleset>
11+
<rule ref="PSR12">
12+
<!-- https://github.com/squizlabs/PHP_CodeSniffer/issues/3200 -->
13+
<exclude name="PSR12.Classes.AnonClassDeclaration.SpaceAfterKeyword"/>
14+
15+
<!-- We have a large number of comments between the closing brace of an `if` and the `else`. -->
16+
<exclude name="Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace"/>
17+
</rule>
18+
</ruleset>

eventListener.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/6.0/eventListener.xsd">
3+
<import>
4+
<eventlistener name="connectionWsdbDatabaseEditFormListener">
5+
<eventclassname>wcf\acp\form\WsdbDatabaseEditForm</eventclassname>
6+
<eventname>createForm</eventname>
7+
<listenerclassname>wcf\system\event\listener\ConnectionWsdbDatabaseEditFormListener</listenerclassname>
8+
<environment>admin</environment>
9+
</eventlistener>
10+
</import>
11+
</data>

files/acp/database/install_dev.hanashi.wsdb.connection.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
use wcf\system\database\table\column\NotNullInt10DatabaseTableColumn;
44
use wcf\system\database\table\column\ObjectIdDatabaseTableColumn;
5+
use wcf\system\database\table\column\TinyintDatabaseTableColumn;
56
use wcf\system\database\table\DatabaseTable;
67
use wcf\system\database\table\index\DatabaseTableForeignKey;
78
use wcf\system\database\table\index\DatabaseTableIndex;
89
use wcf\system\database\table\index\DatabaseTablePrimaryIndex;
10+
use wcf\system\database\table\PartialDatabaseTable;
911

1012
return [
1113
DatabaseTable::create('wcf1_wsdb_record_connection')
@@ -45,4 +47,11 @@
4547
->referencedColumns(['recordID'])
4648
->onDelete('CASCADE'),
4749
]),
50+
PartialDatabaseTable::create('wcf1_wsdb_database')
51+
->columns([
52+
TinyintDatabaseTableColumn::create('enableConnection')
53+
->length(1)
54+
->notNull()
55+
->defaultValue(0),
56+
]),
4857
];
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
use wcf\command\wsdb\database\SetConnectionDatabasePages;
4+
use wcf\data\wsdb\database\DatabaseList;
5+
6+
$databaseList = new DatabaseList();
7+
$databaseList->readObjects();
8+
9+
foreach ($databaseList as $database) {
10+
(new SetConnectionDatabasePages($database, $this->installation->getPackageID()))();
11+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
use wcf\command\wsdb\database\SetConnectionDatabasePages;
4+
use wcf\event\wsdb\database\DatabaseCreated;
5+
use wcf\event\wsdb\interaction\user\RecordInteractionCollecting;
6+
use wcf\system\event\EventHandler;
7+
use wcf\system\event\listener\ConnectionWsdbRecordInteractionCollectingListener;
8+
9+
return static function (): void {
10+
EventHandler::getInstance()->register(
11+
RecordInteractionCollecting::class,
12+
ConnectionWsdbRecordInteractionCollectingListener::class
13+
);
14+
15+
EventHandler::getInstance()->register(DatabaseCreated::class, static function (DatabaseCreated $event): void {
16+
(new SetConnectionDatabasePages($event->database))();
17+
});
18+
};
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
<?php
2+
3+
namespace wcf\command\wsdb\database;
4+
5+
use wcf\data\package\PackageCache;
6+
use wcf\data\page\PageAction;
7+
use wcf\data\page\PageCache;
8+
use wcf\data\wsdb\database\Database;
9+
use wcf\system\language\LanguageFactory;
10+
use wcf\system\WCF;
11+
12+
final class SetConnectionDatabasePages
13+
{
14+
public function __construct(private readonly Database $database, private ?int $packageID = null)
15+
{
16+
}
17+
18+
public function __invoke(): void
19+
{
20+
if ($this->packageID === null) {
21+
$this->packageID = PackageCache::getInstance()->getPackageID('dev.hanashi.wsdb.connection');
22+
}
23+
$this->setConnectionAddForm();
24+
$this->setConnectionListPage();
25+
}
26+
27+
private function setConnectionAddForm(): void
28+
{
29+
$pageContents = [];
30+
foreach (LanguageFactory::getInstance()->getLanguages() as $language) {
31+
$pageContents[$language->languageID] = [
32+
'title' => $language->get('wsdb.record.connection.add'),
33+
];
34+
}
35+
36+
$identifier = "dev.hanashi.wsdb.{$this->database->identifier}.ConnectionAdd";
37+
$page = PageCache::getInstance()->getPageByIdentifier($identifier);
38+
if ($page !== null) {
39+
$action = new PageAction([$page], 'update', [
40+
'data' => [],
41+
'content' => $pageContents,
42+
]);
43+
$action->executeAction();
44+
} else {
45+
$action = new PageAction([], 'create', [
46+
'data' => [
47+
'identifier' => $identifier,
48+
'name' => "{$this->database->getTitle()}: " . WCF::getLanguage()->get('wsdb.record.connection.add'),
49+
'pageType' => 'system',
50+
'originIsSystem' => 1,
51+
'packageID' => $this->packageID,
52+
'applicationPackageID' => 1,
53+
'controller' => "wcf\\form\\{$this->database->identifier}_WsdbConnectionAddForm",
54+
'requireObjectID' => 1,
55+
],
56+
'content' => $pageContents,
57+
]);
58+
$action->executeAction();
59+
}
60+
}
61+
62+
private function setConnectionListPage(): void
63+
{
64+
$pageContents = [];
65+
foreach (LanguageFactory::getInstance()->getLanguages() as $language) {
66+
$pageContents[$language->languageID] = [
67+
'title' => $language->get('wsdb.record.connections'),
68+
];
69+
}
70+
71+
$identifier = "dev.hanashi.wsdb.{$this->database->identifier}.ConnectionList";
72+
$page = PageCache::getInstance()->getPageByIdentifier($identifier);
73+
if ($page !== null) {
74+
$action = new PageAction([$page], 'update', [
75+
'data' => [],
76+
'content' => $pageContents,
77+
]);
78+
$action->executeAction();
79+
} else {
80+
$action = new PageAction([], 'create', [
81+
'data' => [
82+
'identifier' => $identifier,
83+
'name' => "{$this->database->getTitle()}: " . WCF::getLanguage()->get('wsdb.record.connections'),
84+
'pageType' => 'system',
85+
'originIsSystem' => 1,
86+
'packageID' => $this->packageID,
87+
'applicationPackageID' => 1,
88+
'controller' => "wcf\\page\\{$this->database->identifier}_WsdbConnectionListPage",
89+
'requireObjectID' => 1,
90+
],
91+
'content' => $pageContents,
92+
]);
93+
$action->executeAction();
94+
}
95+
}
96+
}

0 commit comments

Comments
 (0)