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 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
- resolve(err ? {} : (settings || {}));
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
- if (!saved || Object.keys(saved).length === 0) return;
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
- if (!rule) {
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-plugin-niki-loyalty",
3
- "version": "1.5.8",
3
+ "version": "1.5.10",
4
4
  "description": "Niki The Cat Coffee Loyalty System - Earn points while studying on IEU Forum.",
5
5
  "main": "library.js",
6
6
  "nbbpm": {
package/plugin.json CHANGED
@@ -51,5 +51,5 @@
51
51
  "less": [
52
52
  "static/style.less"
53
53
  ],
54
- "templates": "./static/templates"
54
+ "templates": "static/templates"
55
55
  }
@@ -1,35 +1,30 @@
1
1
  'use strict';
2
2
 
3
3
  define('admin/plugins/niki-loyalty', ['settings', 'alerts'], function (Settings, alerts) {
4
- var ACP = {};
4
+ var ACP = {};
5
5
 
6
- ACP.init = function () {
7
- Settings.load('niki-loyalty', $('#niki-loyalty-settings'));
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
- $('#save').on('click', function () {
10
- Settings.save('niki-loyalty', $('#niki-loyalty-settings'), function () {
11
- // Sunucu tarafında ayarları anında uygula
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
- return ACP;
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
- <div class="col-12 col-md-10 col-lg-8 px-0 mx-auto">
3
-
4
- <div class="d-flex justify-content-between align-items-center mb-4">
5
- <h4 class="fw-bold mb-0"><i class="fa fa-coffee text-warning"></i> Niki Loyalty Ayarları</h4>
6
- <button id="save" class="btn btn-primary btn-sm">
7
- <i class="fa fa-save"></i> Kaydet
8
- </button>
9
- </div>
10
-
11
- <form id="niki-loyalty-settings">
12
-
13
- <!-- GENEL AYARLAR -->
14
- <div class="card mb-4">
15
- <div class="card-header fw-bold"><i class="fa fa-cog"></i> Genel Ayarlar</div>
16
- <div class="card-body">
17
- <div class="row">
18
- <div class="col-md-6 mb-3">
19
- <label class="form-label fw-semibold">Günlük Maksimum Puan Limiti</label>
20
- <input type="number" class="form-control" data-key="dailyCap" placeholder="35">
21
- <div class="form-text">Bir kullanıcının günde kazanabileceği maksimum puan.</div>
22
- </div>
23
- </div>
24
- </div>
25
- </div>
26
-
27
- <!-- PUAN TABLOSU -->
28
- <div class="card mb-4">
29
- <div class="card-header fw-bold"><i class="fa fa-star text-warning"></i> Puan Tablosu</div>
30
- <div class="card-body">
31
- <div class="table-responsive">
32
- <table class="table table-hover align-middle mb-0">
33
- <thead>
34
- <tr>
35
- <th style="width:30%">Aksiyon</th>
36
- <th style="width:35%">Puan</th>
37
- <th style="width:35%">Günlük Limit</th>
38
- </tr>
39
- </thead>
40
- <tbody>
41
- <tr>
42
- <td><i class="fa fa-sign-in text-purple"></i> Günlük Giriş</td>
43
- <td><input type="number" step="0.5" class="form-control form-control-sm" data-key="login_points" placeholder="5"></td>
44
- <td><input type="number" class="form-control form-control-sm" data-key="login_limit" placeholder="1"></td>
45
- </tr>
46
- <tr>
47
- <td><i class="fa fa-pencil text-primary"></i> Yeni Konu</td>
48
- <td><input type="number" step="0.5" class="form-control form-control-sm" data-key="new_topic_points" placeholder="5"></td>
49
- <td><input type="number" class="form-control form-control-sm" data-key="new_topic_limit" placeholder="1"></td>
50
- </tr>
51
- <tr>
52
- <td><i class="fa fa-commenting text-success"></i> Yorum Yazma</td>
53
- <td><input type="number" step="0.5" class="form-control form-control-sm" data-key="reply_points" placeholder="5"></td>
54
- <td><input type="number" class="form-control form-control-sm" data-key="reply_limit" placeholder="2"></td>
55
- </tr>
56
- <tr>
57
- <td><i class="fa fa-book text-warning"></i> Konu Okuma</td>
58
- <td><input type="number" step="0.5" class="form-control form-control-sm" data-key="read_points" placeholder="1"></td>
59
- <td><input type="number" class="form-control form-control-sm" data-key="read_limit" placeholder="10"></td>
60
- </tr>
61
- <tr>
62
- <td><i class="fa fa-heart text-danger"></i> Beğeni Atma</td>
63
- <td><input type="number" step="0.5" class="form-control form-control-sm" data-key="like_given_points" placeholder="2.5"></td>
64
- <td><input type="number" class="form-control form-control-sm" data-key="like_given_limit" placeholder="2"></td>
65
- </tr>
66
- <tr>
67
- <td><i class="fa fa-star text-info"></i> Beğeni Alma</td>
68
- <td><input type="number" step="0.5" class="form-control form-control-sm" data-key="like_taken_points" placeholder="5"></td>
69
- <td><input type="number" class="form-control form-control-sm" data-key="like_taken_limit" placeholder="2"></td>
70
- </tr>
71
- </tbody>
72
- </table>
73
- </div>
74
- <div class="form-text mt-2">Placeholder'daki değerler varsayılan değerlerdir. Boş bırakırsanız varsayılan kullanılır.</div>
75
- </div>
76
- </div>
77
-
78
- <!-- ÖDÜLLER -->
79
- <div class="card mb-4">
80
- <div class="card-header fw-bold"><i class="fa fa-gift text-danger"></i> Ödüller</div>
81
- <div class="card-body">
82
- <div class="table-responsive">
83
- <table class="table table-hover align-middle mb-0">
84
- <thead>
85
- <tr>
86
- <th style="width:60%">Ödül Adı</th>
87
- <th style="width:40%">Gerekli Puan</th>
88
- </tr>
89
- </thead>
90
- <tbody>
91
- <tr>
92
- <td><input type="text" class="form-control form-control-sm" data-key="reward0_name" placeholder="Ücretsiz Kahve ☕"></td>
93
- <td><input type="number" class="form-control form-control-sm" data-key="reward0_cost" placeholder="250"></td>
94
- </tr>
95
- <tr>
96
- <td><input type="text" class="form-control form-control-sm" data-key="reward1_name" placeholder="%60 İndirimli Kahve"></td>
97
- <td><input type="number" class="form-control form-control-sm" data-key="reward1_cost" placeholder="180"></td>
98
- </tr>
99
- <tr>
100
- <td><input type="text" class="form-control form-control-sm" data-key="reward2_name" placeholder="%30 İndirimli Kahve"></td>
101
- <td><input type="number" class="form-control form-control-sm" data-key="reward2_cost" placeholder="120"></td>
102
- </tr>
103
- <tr>
104
- <td><input type="text" class="form-control form-control-sm" data-key="reward3_name" placeholder="1 Kurabiye 🍪"></td>
105
- <td><input type="number" class="form-control form-control-sm" data-key="reward3_cost" placeholder="60"></td>
106
- </tr>
107
- </tbody>
108
- </table>
109
- </div>
110
- </div>
111
- </div>
112
-
113
- <!-- GRUP BONUSLARI -->
114
- <div class="card mb-4">
115
- <div class="card-header fw-bold"><i class="fa fa-users text-success"></i> Grup Katılım Bonusları</div>
116
- <div class="card-body">
117
- <div class="row">
118
- <div class="col-md-6 mb-3">
119
- <label class="form-label fw-semibold">Premium Grup Bonusu</label>
120
- <input type="number" class="form-control" data-key="bonus_premium" placeholder="30">
121
- <div class="form-text">Premium grubuna katılan kullanıcıya verilecek bonus puan.</div>
122
- </div>
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>