nodebb-plugin-niki-loyalty 1.5.8 → 1.5.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/library.js +23 -3
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/static/lib/admin.js +23 -28
- package/static/templates/admin/plugins/niki-loyalty.tpl +121 -133
package/library.js
CHANGED
|
@@ -51,13 +51,24 @@ const TEST_MODE_UNLIMITED = false;
|
|
|
51
51
|
// =========================
|
|
52
52
|
async function loadAndApplySettings() {
|
|
53
53
|
try {
|
|
54
|
+
console.log('[NIKI] Ayarlar DB\'den yükleniyor...');
|
|
55
|
+
|
|
54
56
|
const saved = await new Promise((resolve) => {
|
|
55
57
|
meta.settings.get('niki-loyalty', (err, settings) => {
|
|
56
|
-
|
|
58
|
+
if (err) {
|
|
59
|
+
console.error('[NIKI] meta.settings.get HATA:', err);
|
|
60
|
+
return resolve({});
|
|
61
|
+
}
|
|
62
|
+
resolve(settings || {});
|
|
57
63
|
});
|
|
58
64
|
});
|
|
59
65
|
|
|
60
|
-
|
|
66
|
+
console.log('[NIKI] DB\'den gelen ham veri:', JSON.stringify(saved, null, 2));
|
|
67
|
+
|
|
68
|
+
if (!saved || Object.keys(saved).length === 0) {
|
|
69
|
+
console.log('[NIKI] DB\'de kayıtlı ayar yok, varsayılanlar kullanılacak.');
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
61
72
|
|
|
62
73
|
// Genel
|
|
63
74
|
if (saved.dailyCap) SETTINGS.dailyCap = parseInt(saved.dailyCap, 10) || SETTINGS.dailyCap;
|
|
@@ -83,6 +94,12 @@ async function loadAndApplySettings() {
|
|
|
83
94
|
if (saved.bonus_vip !== undefined && saved.bonus_vip !== '')
|
|
84
95
|
GROUP_BONUSES['VIP'] = parseInt(saved.bonus_vip, 10);
|
|
85
96
|
|
|
97
|
+
console.log('[NIKI] === UYGULANAN AYARLAR ===');
|
|
98
|
+
console.log('[NIKI] SETTINGS:', JSON.stringify(SETTINGS));
|
|
99
|
+
console.log('[NIKI] ACTIONS:', JSON.stringify(ACTIONS));
|
|
100
|
+
console.log('[NIKI] REWARDS:', JSON.stringify(REWARDS));
|
|
101
|
+
console.log('[NIKI] GROUP_BONUSES:', JSON.stringify(GROUP_BONUSES));
|
|
102
|
+
|
|
86
103
|
} catch (err) {
|
|
87
104
|
console.error('[NIKI] Ayarlar yüklenirken hata:', err);
|
|
88
105
|
}
|
|
@@ -126,8 +143,9 @@ async function awardDailyAction(uid, actionKey) {
|
|
|
126
143
|
const today = new Date().toISOString().slice(0, 10).replace(/-/g, '');
|
|
127
144
|
const rule = ACTIONS[actionKey];
|
|
128
145
|
|
|
129
|
-
|
|
146
|
+
console.log(`[NIKI] awardDailyAction => uid:${uid}, action:${actionKey}, rule:${JSON.stringify(rule)}, dailyCap:${SETTINGS.dailyCap}`);
|
|
130
147
|
|
|
148
|
+
if (!rule) {
|
|
131
149
|
return { success: false, reason: 'unknown_action' };
|
|
132
150
|
}
|
|
133
151
|
|
|
@@ -954,11 +972,13 @@ Plugin.adminGetStats = async function (socket, data) {
|
|
|
954
972
|
|
|
955
973
|
// 6) AYARLARI YENİDEN YÜKLE (Admin panelden kaydet sonrası)
|
|
956
974
|
Plugin.reloadSettings = async function (socket) {
|
|
975
|
+
console.log('[NIKI] reloadSettings socket çağrıldı, uid:', socket.uid);
|
|
957
976
|
const uid = socket.uid;
|
|
958
977
|
if (!uid) throw new Error('Giriş yapmalısınız.');
|
|
959
978
|
const isAdmin = await user.isAdministrator(uid);
|
|
960
979
|
if (!isAdmin) throw new Error('Yetkisiz Erişim');
|
|
961
980
|
await loadAndApplySettings();
|
|
981
|
+
console.log('[NIKI] reloadSettings tamamlandı.');
|
|
962
982
|
return { success: true };
|
|
963
983
|
};
|
|
964
984
|
|
package/package.json
CHANGED
package/plugin.json
CHANGED
package/static/lib/admin.js
CHANGED
|
@@ -1,35 +1,30 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
define('admin/plugins/niki-loyalty', ['settings', 'alerts'], function (Settings, alerts) {
|
|
4
|
-
|
|
4
|
+
var ACP = {};
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
ACP.init = function () {
|
|
7
|
+
console.log('[NIKI ADMIN] init çalıştı');
|
|
8
|
+
console.log('[NIKI ADMIN] form bulundu mu:', $('#niki-loyalty-settings').length);
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
socket.emit('plugins.niki.reloadSettings', {}, function (err) {
|
|
13
|
-
if (err) {
|
|
14
|
-
return alerts.alert({
|
|
15
|
-
type: 'danger',
|
|
16
|
-
alert_id: 'niki-loyalty-error',
|
|
17
|
-
title: 'Hata',
|
|
18
|
-
message: 'Ayarlar kaydedildi ama sunucuya uygulanamadı. NodeBB\'yi yeniden başlatın.',
|
|
19
|
-
timeout: 5000,
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
alerts.alert({
|
|
23
|
-
type: 'success',
|
|
24
|
-
alert_id: 'niki-loyalty-saved',
|
|
25
|
-
title: 'Ayarlar Kaydedildi',
|
|
26
|
-
message: 'Niki Loyalty ayarları kaydedildi ve anında uygulandı.',
|
|
27
|
-
timeout: 2500,
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
};
|
|
10
|
+
Settings.load('niki-loyalty', $('#niki-loyalty-settings'), function () {
|
|
11
|
+
console.log('[NIKI ADMIN] Settings.load tamamlandı');
|
|
12
|
+
});
|
|
33
13
|
|
|
34
|
-
|
|
14
|
+
$('#save').on('click', function () {
|
|
15
|
+
console.log('[NIKI ADMIN] Kaydet butonuna basıldı');
|
|
16
|
+
Settings.save('niki-loyalty', $('#niki-loyalty-settings'), function () {
|
|
17
|
+
console.log('[NIKI ADMIN] Settings.save tamamlandı');
|
|
18
|
+
alerts.alert({
|
|
19
|
+
type: 'success',
|
|
20
|
+
alert_id: 'niki-loyalty-saved',
|
|
21
|
+
title: 'Ayarlar Kaydedildi',
|
|
22
|
+
message: 'Niki Loyalty ayarları kaydedildi. Uygulamak için NodeBB\'yi yeniden başlatın.',
|
|
23
|
+
timeout: 3000,
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
return ACP;
|
|
35
30
|
});
|
|
@@ -1,135 +1,123 @@
|
|
|
1
1
|
<div class="acp-page-container">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
<div class="col-md-6 mb-3">
|
|
124
|
-
<label class="form-label fw-semibold">VIP Grup Bonusu</label>
|
|
125
|
-
<input type="number" class="form-control" data-key="bonus_vip" placeholder="60">
|
|
126
|
-
<div class="form-text">VIP grubuna katılan kullanıcıya verilecek bonus puan.</div>
|
|
127
|
-
</div>
|
|
128
|
-
</div>
|
|
129
|
-
</div>
|
|
130
|
-
</div>
|
|
131
|
-
|
|
132
|
-
</form>
|
|
133
|
-
|
|
134
|
-
</div>
|
|
2
|
+
<div class="col-lg-9">
|
|
3
|
+
|
|
4
|
+
<div class="panel panel-default">
|
|
5
|
+
<div class="panel-heading"><i class="fa fa-coffee"></i> Niki Loyalty Ayarları</div>
|
|
6
|
+
<div class="panel-body">
|
|
7
|
+
|
|
8
|
+
<form id="niki-loyalty-settings">
|
|
9
|
+
|
|
10
|
+
<!-- GENEL AYARLAR -->
|
|
11
|
+
<fieldset>
|
|
12
|
+
<legend>Genel Ayarlar</legend>
|
|
13
|
+
<div class="form-group">
|
|
14
|
+
<label for="dailyCap">Günlük Maksimum Puan Limiti</label>
|
|
15
|
+
<input type="number" id="dailyCap" name="dailyCap" data-key="dailyCap" class="form-control" placeholder="35">
|
|
16
|
+
<p class="help-block">Bir kullanıcının günde kazanabileceği maksimum puan.</p>
|
|
17
|
+
</div>
|
|
18
|
+
</fieldset>
|
|
19
|
+
|
|
20
|
+
<hr/>
|
|
21
|
+
|
|
22
|
+
<!-- PUAN TABLOSU -->
|
|
23
|
+
<fieldset>
|
|
24
|
+
<legend>Puan Tablosu</legend>
|
|
25
|
+
|
|
26
|
+
<div class="row">
|
|
27
|
+
<div class="col-sm-4"><strong>Aksiyon</strong></div>
|
|
28
|
+
<div class="col-sm-4"><strong>Puan</strong></div>
|
|
29
|
+
<div class="col-sm-4"><strong>Günlük Limit</strong></div>
|
|
30
|
+
</div>
|
|
31
|
+
<hr style="margin:5px 0 10px"/>
|
|
32
|
+
|
|
33
|
+
<div class="row form-group">
|
|
34
|
+
<div class="col-sm-4"><label><i class="fa fa-sign-in"></i> Günlük Giriş</label></div>
|
|
35
|
+
<div class="col-sm-4"><input type="number" step="0.5" id="login_points" name="login_points" data-key="login_points" class="form-control" placeholder="5"></div>
|
|
36
|
+
<div class="col-sm-4"><input type="number" id="login_limit" name="login_limit" data-key="login_limit" class="form-control" placeholder="1"></div>
|
|
37
|
+
</div>
|
|
38
|
+
<div class="row form-group">
|
|
39
|
+
<div class="col-sm-4"><label><i class="fa fa-pencil"></i> Yeni Konu</label></div>
|
|
40
|
+
<div class="col-sm-4"><input type="number" step="0.5" id="new_topic_points" name="new_topic_points" data-key="new_topic_points" class="form-control" placeholder="5"></div>
|
|
41
|
+
<div class="col-sm-4"><input type="number" id="new_topic_limit" name="new_topic_limit" data-key="new_topic_limit" class="form-control" placeholder="1"></div>
|
|
42
|
+
</div>
|
|
43
|
+
<div class="row form-group">
|
|
44
|
+
<div class="col-sm-4"><label><i class="fa fa-commenting"></i> Yorum Yazma</label></div>
|
|
45
|
+
<div class="col-sm-4"><input type="number" step="0.5" id="reply_points" name="reply_points" data-key="reply_points" class="form-control" placeholder="5"></div>
|
|
46
|
+
<div class="col-sm-4"><input type="number" id="reply_limit" name="reply_limit" data-key="reply_limit" class="form-control" placeholder="2"></div>
|
|
47
|
+
</div>
|
|
48
|
+
<div class="row form-group">
|
|
49
|
+
<div class="col-sm-4"><label><i class="fa fa-book"></i> Konu Okuma</label></div>
|
|
50
|
+
<div class="col-sm-4"><input type="number" step="0.5" id="read_points" name="read_points" data-key="read_points" class="form-control" placeholder="1"></div>
|
|
51
|
+
<div class="col-sm-4"><input type="number" id="read_limit" name="read_limit" data-key="read_limit" class="form-control" placeholder="10"></div>
|
|
52
|
+
</div>
|
|
53
|
+
<div class="row form-group">
|
|
54
|
+
<div class="col-sm-4"><label><i class="fa fa-heart"></i> Beğeni Atma</label></div>
|
|
55
|
+
<div class="col-sm-4"><input type="number" step="0.5" id="like_given_points" name="like_given_points" data-key="like_given_points" class="form-control" placeholder="2.5"></div>
|
|
56
|
+
<div class="col-sm-4"><input type="number" id="like_given_limit" name="like_given_limit" data-key="like_given_limit" class="form-control" placeholder="2"></div>
|
|
57
|
+
</div>
|
|
58
|
+
<div class="row form-group">
|
|
59
|
+
<div class="col-sm-4"><label><i class="fa fa-star"></i> Beğeni Alma</label></div>
|
|
60
|
+
<div class="col-sm-4"><input type="number" step="0.5" id="like_taken_points" name="like_taken_points" data-key="like_taken_points" class="form-control" placeholder="5"></div>
|
|
61
|
+
<div class="col-sm-4"><input type="number" id="like_taken_limit" name="like_taken_limit" data-key="like_taken_limit" class="form-control" placeholder="2"></div>
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
<p class="help-block">Boş bırakırsanız placeholder'daki varsayılan değer kullanılır.</p>
|
|
65
|
+
</fieldset>
|
|
66
|
+
|
|
67
|
+
<hr/>
|
|
68
|
+
|
|
69
|
+
<!-- ÖDÜLLER -->
|
|
70
|
+
<fieldset>
|
|
71
|
+
<legend>Ödüller</legend>
|
|
72
|
+
|
|
73
|
+
<div class="row">
|
|
74
|
+
<div class="col-sm-8"><strong>Ödül Adı</strong></div>
|
|
75
|
+
<div class="col-sm-4"><strong>Gerekli Puan</strong></div>
|
|
76
|
+
</div>
|
|
77
|
+
<hr style="margin:5px 0 10px"/>
|
|
78
|
+
|
|
79
|
+
<div class="row form-group">
|
|
80
|
+
<div class="col-sm-8"><input type="text" id="reward0_name" name="reward0_name" data-key="reward0_name" class="form-control" placeholder="Ücretsiz Kahve"></div>
|
|
81
|
+
<div class="col-sm-4"><input type="number" id="reward0_cost" name="reward0_cost" data-key="reward0_cost" class="form-control" placeholder="250"></div>
|
|
82
|
+
</div>
|
|
83
|
+
<div class="row form-group">
|
|
84
|
+
<div class="col-sm-8"><input type="text" id="reward1_name" name="reward1_name" data-key="reward1_name" class="form-control" placeholder="%60 İndirimli Kahve"></div>
|
|
85
|
+
<div class="col-sm-4"><input type="number" id="reward1_cost" name="reward1_cost" data-key="reward1_cost" class="form-control" placeholder="180"></div>
|
|
86
|
+
</div>
|
|
87
|
+
<div class="row form-group">
|
|
88
|
+
<div class="col-sm-8"><input type="text" id="reward2_name" name="reward2_name" data-key="reward2_name" class="form-control" placeholder="%30 İndirimli Kahve"></div>
|
|
89
|
+
<div class="col-sm-4"><input type="number" id="reward2_cost" name="reward2_cost" data-key="reward2_cost" class="form-control" placeholder="120"></div>
|
|
90
|
+
</div>
|
|
91
|
+
<div class="row form-group">
|
|
92
|
+
<div class="col-sm-8"><input type="text" id="reward3_name" name="reward3_name" data-key="reward3_name" class="form-control" placeholder="1 Kurabiye"></div>
|
|
93
|
+
<div class="col-sm-4"><input type="number" id="reward3_cost" name="reward3_cost" data-key="reward3_cost" class="form-control" placeholder="60"></div>
|
|
94
|
+
</div>
|
|
95
|
+
</fieldset>
|
|
96
|
+
|
|
97
|
+
<hr/>
|
|
98
|
+
|
|
99
|
+
<!-- GRUP BONUSLARI -->
|
|
100
|
+
<fieldset>
|
|
101
|
+
<legend>Grup Katılım Bonusları</legend>
|
|
102
|
+
<div class="form-group">
|
|
103
|
+
<label for="bonus_premium">Premium Grup Bonusu</label>
|
|
104
|
+
<input type="number" id="bonus_premium" name="bonus_premium" data-key="bonus_premium" class="form-control" placeholder="30">
|
|
105
|
+
<p class="help-block">Premium grubuna katılan kullanıcıya verilecek bonus puan.</p>
|
|
106
|
+
</div>
|
|
107
|
+
<div class="form-group">
|
|
108
|
+
<label for="bonus_vip">VIP Grup Bonusu</label>
|
|
109
|
+
<input type="number" id="bonus_vip" name="bonus_vip" data-key="bonus_vip" class="form-control" placeholder="60">
|
|
110
|
+
<p class="help-block">VIP grubuna katılan kullanıcıya verilecek bonus puan.</p>
|
|
111
|
+
</div>
|
|
112
|
+
</fieldset>
|
|
113
|
+
|
|
114
|
+
</form>
|
|
115
|
+
</div>
|
|
116
|
+
</div>
|
|
117
|
+
|
|
118
|
+
<button class="btn btn-primary" id="save">
|
|
119
|
+
<i class="fa fa-save"></i> Kaydet
|
|
120
|
+
</button>
|
|
121
|
+
|
|
122
|
+
</div>
|
|
135
123
|
</div>
|