Skip to content

Commit 133b571

Browse files
committed
Craft 5 Compatability & ckEditor support
1 parent 5045316 commit 133b571

File tree

13 files changed

+343
-110
lines changed

13 files changed

+343
-110
lines changed

src/Plugin.php

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class Plugin extends BasePlugin
3737
/**
3838
* @var string
3939
*/
40-
public string $schemaVersion = '1.0.0';
40+
public string $schemaVersion = '1.0.1';
4141

4242
/**
4343
* @var bool
@@ -119,8 +119,16 @@ static function (DefineFieldHtmlEvent $event) {
119119
/** @var SettingsModel $settings */
120120
$settings = Plugin::getInstance()->getSettings();
121121

122-
if (array_key_exists($event->sender->id, $settings->enabledFields) && $settings->enabledFields[$event->sender->id]){
123-
$event->html .= Craft::$app->view->renderTemplate('chatgpt-integration/form.twig', [ 'event' => $event, 'hash' => StringHelper::UUID()] );
122+
$settingKey = $event->sender->layoutElement->layout->provider->handle . '_' . $event->sender->handle;
123+
124+
if (
125+
array_key_exists($settingKey, $settings->enabledFields)
126+
&& $settings->enabledFields[$settingKey]
127+
&& $settings->getAccessToken() !== '')
128+
{
129+
$event->html .= Craft::$app->view->renderTemplate('chatgpt-integration/form.twig', [
130+
'event' => $event, 'hash' => StringHelper::UUID()
131+
]);
124132
}
125133
}
126134
);
@@ -137,11 +145,11 @@ function (Event $event) {
137145
$settings = Plugin::getInstance()->getSettings();
138146

139147
if (!in_array(true, $settings->enabledFields, false)){
140-
Craft::$app->getSession()->setError('ChatGPT-Integration currently has no fields to attach to!');
148+
Craft::$app->getSession()->setError(Craft::t('chatgpt-integration', 'ChatGPT-Integration currently has no fields to attach to!'));
141149
}
142150

143151
if ($settings->accessToken === ''){
144-
Craft::$app->getSession()->setError('API Access Token required .');
152+
Craft::$app->getSession()->setError(Craft::t('chatgpt-integration', 'API Access Token required .'));
145153
}
146154
}
147155
);

src/controllers/PromptController.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ public function actionUpdatePrompt()
6666
$model->label = $request->getRequiredParam('label');
6767
$model->promptTemplate = $request->getRequiredParam('promptTemplate');
6868
$model->enabled = $request->getRequiredParam('enabled');
69+
$model->temperature = $request->getRequiredParam('temperature');
70+
$model->frequencyPenalty = $request->getRequiredParam('frequencyPenalty');
71+
$model->presencePenalty = $request->getRequiredParam('presencePenalty');
6972

7073
if (!$model->validate()) {
7174
return $this->renderTemplate('chatgpt-integration/prompts/_edit', ['prompt' => $model]);

src/icon.svg

Lines changed: 33 additions & 20 deletions
Loading

src/migrations/Install.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ public function safeUp(): bool
2525
public function safeDown(): bool
2626
{
2727
$this->removeTables();
28-
2928
return true;
3029
}
3130

@@ -34,13 +33,15 @@ public function safeDown(): bool
3433
*/
3534
protected function createTables(): void
3635
{
37-
3836
$this->archiveTableIfExists(ChatgptIntegration_PromptRecord::tableName());
3937
$this->createTable(ChatgptIntegration_PromptRecord::tableName(), [
4038
'id' => $this->primaryKey(),
4139
'label' => $this->string()->notNull(),
4240
'promptTemplate' => $this->string()->notNull(),
4341
'enabled' => $this->boolean()->notNull()->defaultValue(true),
42+
'temperature' => $this->float()->notNull()->defaultValue(1),
43+
'frequencyPenalty' => $this->float()->notNull()->defaultValue(0),
44+
'presencePenalty' => $this->float()->notNull()->defaultValue(0),
4445
'dateCreated' => $this->dateTime()->notNull(),
4546
'dateUpdated' => $this->dateTime()->notNull(),
4647
'uid' => $this->uid(),
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
namespace publishing\chatgptintegration\migrations;
4+
5+
use Craft;
6+
use craft\db\Migration;
7+
use publishing\chatgptintegration\records\ChatgptIntegration_PromptRecord;
8+
9+
/**
10+
* m240410_102308_new_prompt_settings migration.
11+
*/
12+
class m240410_102308_new_prompt_settings extends Migration
13+
{
14+
/**
15+
* @inheritdoc
16+
*/
17+
public function safeUp(): bool
18+
{
19+
if (!$this->db->columnExists(ChatgptIntegration_PromptRecord::tableName(), 'temperature')) {
20+
$this->addColumn(ChatgptIntegration_PromptRecord::tableName(), 'temperature', $this->float()->defaultValue(1));
21+
}
22+
23+
if (!$this->db->columnExists(ChatgptIntegration_PromptRecord::tableName(), 'frequencyPenalty')) {
24+
$this->addColumn(ChatgptIntegration_PromptRecord::tableName(), 'frequencyPenalty', $this->float()->defaultValue(0));
25+
}
26+
27+
if (!$this->db->columnExists(ChatgptIntegration_PromptRecord::tableName(), 'presencePenalty')) {
28+
$this->addColumn(ChatgptIntegration_PromptRecord::tableName(), 'presencePenalty', $this->float()->defaultValue(0));
29+
}
30+
31+
return true;
32+
}
33+
34+
/**
35+
* @inheritdoc
36+
*/
37+
public function safeDown(): bool
38+
{
39+
echo "m240410_102308_new_prompt_settings cannot be reverted.\n";
40+
return false;
41+
}
42+
}

src/models/PromptModel.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,19 @@ class PromptModel extends Model
2121
*/
2222
public string $promptTemplate = '';
2323

24+
/**
25+
* @var float
26+
*/
27+
public float $temperature = 1.0;
28+
/**
29+
* @var float
30+
*/
31+
public float $frequencyPenalty = 0.0;
32+
/**
33+
* @var float
34+
*/
35+
public float $presencePenalty = 0.0;
36+
2437
/**
2538
* @var bool
2639
*/

src/services/PromptService.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ public function updatePrompt(PromptModel $model): bool {
7878
$record->promptTemplate = $model->promptTemplate;
7979
$record->enabled = $model->enabled;
8080

81+
$record->temperature = $model->temperature;
82+
$record->frequencyPenalty = $model->frequencyPenalty;
83+
$record->presencePenalty = $model->presencePenalty;
84+
8185
return $record->update() > 0;
8286
}
8387

@@ -101,6 +105,9 @@ protected function mapToModel(ChatgptIntegration_PromptRecord $record): PromptMo
101105
$model->enabled = $record->enabled;
102106
$model->label = $record->label;
103107
$model->promptTemplate = $record->promptTemplate;
108+
$model->temperature = $record->temperature;
109+
$model->frequencyPenalty = $record->frequencyPenalty;
110+
$model->presencePenalty = $record->presencePenalty;
104111
$model->uid = $record->uid;
105112
$model->dateCreated = date_create_from_format('Y-m-d H:i:s', $record->dateCreated);
106113
$model->dateUpdated = date_create_from_format('Y-m-d H:i:s', $record->dateUpdated);

src/templates/form.twig

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
class: ['btn', '', '', 'menubtn'],
33
type: 'button',
44
role: 'button',
5-
title: 'Actions'|t('neo'),
5+
title: 'Actions'|t('chatgpt-integration'),
66
aria: {
77
controls: 1,
8-
label: "test button",
8+
label: "ChatGPT Dropdown",
99
},
1010
data: {
1111
'disclosure-trigger': true,
@@ -41,7 +41,18 @@
4141
<div id="1" class="menu menu--disclosure chatgpt-menu">
4242
<ul class="padded">
4343
{% for item in prompts %}
44-
<li><a href="javascript:void(0)" class="doAi" type="button" role="button" data-hash="{{ hash }}" data-prompt="{{ currentLang }} {{ item.promptTemplate }}: " aria-label="{{ item.label }}">{{ item.label }}</a></li>
44+
<li><a
45+
href="javascript:void(0)"
46+
class="doAi"
47+
type="button"
48+
role="button"
49+
data-hash="{{ hash }}"
50+
data-prompt="{{ currentLang }} {{ item.promptTemplate }}: "
51+
aria-label="{{ item.label }}"
52+
data-prompt-temperature="{{ item.temperature }}"
53+
data-prompt-frequencyPenalty="{{ item.frequencyPenalty }}"
54+
data-prompt-presencePenalty="{{ item.presencePenalty }}"
55+
>{{ item.label }}</a></li>
4556
{% else %}
4657
{% if displayTranslationPrompts == false %}
4758
<li style="padding: 1em 0"><p>{{ 'No prompts found'|t('chatgpt-integration') }}</p></li>
@@ -74,4 +85,17 @@
7485
{% endif %}
7586
</div>
7687
</div>
77-
{% endif %}
88+
{% endif %}
89+
90+
91+
{% js %}
92+
$(function() {
93+
let button = $('button[data-hash="{{ hash }}"]');
94+
let ckEditor = button.closest('[data-type*="ckeditor"]');
95+
96+
if (ckEditor.length > 0) {
97+
$(button).css('top', 'calc(var(--ck-font-size-base) * 3.2)');
98+
ckEditor.addClass('chatgpt-padding');
99+
}
100+
});
101+
{% endjs %}

0 commit comments

Comments
 (0)