diff --git a/client/src/app-components/ticket-event.js b/client/src/app-components/ticket-event.js
index 5eb22637..a284ba00 100644
--- a/client/src/app-components/ticket-event.js
+++ b/client/src/app-components/ticket-event.js
@@ -178,7 +178,7 @@ class TicketEvent extends React.Component {
renderPrivateBadge() {
return (
-
+
{i18n('PRIVATE')}
diff --git a/client/src/app-components/ticket-viewer.js b/client/src/app-components/ticket-viewer.js
index 79cf0048..6bab5566 100644
--- a/client/src/app-components/ticket-viewer.js
+++ b/client/src/app-components/ticket-viewer.js
@@ -268,7 +268,7 @@ class TicketViewer extends React.Component {
return (
-
+
);
} else {
diff --git a/client/src/app-components/topic-edit-modal.js b/client/src/app-components/topic-edit-modal.js
index 4f56ec2d..bc57d238 100644
--- a/client/src/app-components/topic-edit-modal.js
+++ b/client/src/app-components/topic-edit-modal.js
@@ -10,6 +10,7 @@ import FormField from 'core-components/form-field';
import SubmitButton from 'core-components/submit-button';
import IconSelector from 'core-components/icon-selector';
import ColorSelector from 'core-components/color-selector';
+import InfoTooltip from 'core-components/info-tooltip';
class TopicEditModal extends React.Component {
@@ -24,7 +25,7 @@ class TopicEditModal extends React.Component {
};
state = {
- values: this.props.defaultValues || {title: '', icon: 'address-card', color: '#ff6900'},
+ values: this.props.defaultValues || {title: '', icon: 'address-card', color: '#ff6900', private: false},
loading: false
};
@@ -36,7 +37,9 @@ class TopicEditModal extends React.Component {
-
+
+
+
{i18n('SAVE')}
@@ -59,7 +62,8 @@ class TopicEditModal extends React.Component {
topicId: this.props.topicId,
name: this.state.values['title'],
icon: this.state.values['icon'],
- iconColor: this.state.values['color']
+ iconColor: this.state.values['color'],
+ private: this.state.values['private']*1
}
}).then(() => {
this.context.closeModal();
diff --git a/client/src/app-components/topic-edit-modal.scss b/client/src/app-components/topic-edit-modal.scss
index 470f01ae..2eff13a4 100644
--- a/client/src/app-components/topic-edit-modal.scss
+++ b/client/src/app-components/topic-edit-modal.scss
@@ -16,4 +16,8 @@
&__discard-button {
float: right;
}
-}
\ No newline at end of file
+ &__private {
+ display: inline-block;
+ padding-right: 10px;
+ }
+}
diff --git a/client/src/app-components/topic-viewer.js b/client/src/app-components/topic-viewer.js
index d35f08c3..c1dd01fd 100644
--- a/client/src/app-components/topic-viewer.js
+++ b/client/src/app-components/topic-viewer.js
@@ -22,7 +22,8 @@ class TopicViewer extends React.Component {
iconColor: React.PropTypes.string.isRequired,
articles: React.PropTypes.array.isRequired,
articlePath: React.PropTypes.string,
- editable: React.PropTypes.bool
+ editable: React.PropTypes.bool,
+ private: React.PropTypes.bool
};
static defaultProps = {
@@ -53,6 +54,8 @@ class TopicViewer extends React.Component {
{this.props.name}
{(this.props.editable) ? this.renderEditButton() : null}
{(this.props.editable) ? this.renderDeleteButton() : null}
+ {this.props.private*1 ? : null}
+
{this.state.articles.map(this.renderArticleItem.bind(this))}
@@ -127,7 +130,8 @@ class TopicViewer extends React.Component {
defaultValues: {
title: this.props.name,
icon: this.props.icon,
- iconColor: this.props.iconColor
+ iconColor: this.props.iconColor,
+ private: false
}
};
@@ -148,7 +152,7 @@ class TopicViewer extends React.Component {
);
}
-
+
getArticleLinkProps(article) {
let classes = {
'topic-viewer__list-item-button': true,
@@ -265,4 +269,4 @@ class TopicViewer extends React.Component {
}
}
-export default TopicViewer;
\ No newline at end of file
+export default TopicViewer;
diff --git a/client/src/app-components/topic-viewer.scss b/client/src/app-components/topic-viewer.scss
index 97dd43f5..ca1d1227 100644
--- a/client/src/app-components/topic-viewer.scss
+++ b/client/src/app-components/topic-viewer.scss
@@ -25,6 +25,10 @@
margin-left: 15px;
}
+ &__private {
+ margin-left: 10px;
+ }
+
&__edit-icon {
color: $grey;
cursor: pointer;
@@ -78,4 +82,4 @@
&__add-item {
color: $dark-grey;
}
-}
\ No newline at end of file
+}
diff --git a/client/src/app/admin/panel/articles/admin-panel-list-articles.js b/client/src/app/admin/panel/articles/admin-panel-list-articles.js
index 223fb157..d52f0ab8 100644
--- a/client/src/app/admin/panel/articles/admin-panel-list-articles.js
+++ b/client/src/app/admin/panel/articles/admin-panel-list-articles.js
@@ -18,4 +18,4 @@ class AdminPanelListArticles extends React.Component {
}
}
-export default AdminPanelListArticles;
\ No newline at end of file
+export default AdminPanelListArticles;
diff --git a/client/src/data/languages/br.js b/client/src/data/languages/br.js
index d8702d58..33d64a08 100644
--- a/client/src/data/languages/br.js
+++ b/client/src/data/languages/br.js
@@ -302,7 +302,8 @@ export default {
'SMTP_SERVER_DESCRIPTION': 'A configuração do servidor SMTP permite que o aplicativo envie e-mails. Se você não configurá-lo, nenhum e-mail será enviado pela OpenSupports.',
'ENABLE_USER_DESCRIPTION': 'Essa ação permite que o usuário faça login e crie tickets.',
'DISABLE_USER_DESCRIPTION': 'O usuário será desativado e não poderá fazer login e criar tickets.',
- 'PRIVATE_DESCRIPTION': 'Esta resposta só será vista pelos funcionários',
+ 'PRIVATE_RESPONSE_DESCRIPTION': 'Esta resposta só será vista pelos funcionários',
+ 'PRIVATE_TOPIC_DESCRIPTION': 'Este tópico será visto apenas por membros da equipe',
//ERRORS
'EMAIL_OR_PASSWORD': 'E-mail ou senha inválidos',
diff --git a/client/src/data/languages/cn.js b/client/src/data/languages/cn.js
index 1e419142..90ae4ecb 100644
--- a/client/src/data/languages/cn.js
+++ b/client/src/data/languages/cn.js
@@ -302,7 +302,8 @@ export default {
'SMTP_SERVER_DESCRIPTION': 'SMTP服务器允许应用程序发送邮件。 如果您没有配置,OpenSupports将不会发送任何电子邮件。',
'ENABLE_USER_DESCRIPTION': '此操作允许用户登录并创建票证。',
'DISABLE_USER_DESCRIPTION': '用户将被禁用,无法登录并创建票证。',
- 'PRIVATE_DESCRIPTION': '只有工作人员才能看到这种回应',
+ 'PRIVATE_RESPONSE_DESCRIPTION': '只有工作人员才能看到这种回应',
+ 'PRIVATE_TOPIC_DESCRIPTION': '只有工作人员才能看到此主题',
//ERRORS
'EMAIL_OR_PASSWORD': '電子郵件或密碼無效',
diff --git a/client/src/data/languages/de.js b/client/src/data/languages/de.js
index f82747c4..8b18a6fd 100644
--- a/client/src/data/languages/de.js
+++ b/client/src/data/languages/de.js
@@ -302,7 +302,8 @@ export default {
'SMTP_SERVER_DESCRIPTION': 'Die Konfiguration des SMTP-Servers ermöglicht es der Software, Mails zu senden. Wenn Sie es nicht konfigurieren, werden keine E-Mails von OpenSupports gesendet.',
'ENABLE_USER_DESCRIPTION': 'Mit dieser Aktion kann der Benutzer sich anmelden und Tickets erstellen.',
'DISABLE_USER_DESCRIPTION': 'Der Benutzer wird deaktiviert und kann keine Tickets anmelden und erstellen.',
- 'PRIVATE_DESCRIPTION': 'Diese Antwort wird nur von den Mitarbeitern gesehen werden',
+ 'PRIVATE_RESPONSE_DESCRIPTION': 'Diese Antwort wird nur von den Mitarbeitern gesehen werden',
+ 'PRIVATE_TOPIC_DESCRIPTION': 'Dieses Thema wird nur von Mitarbeitern gesehen',
//ERRORS
'EMAIL_OR_PASSWORD': 'E-Mail-Adresse oder Passwort ungültig!',
diff --git a/client/src/data/languages/en.js b/client/src/data/languages/en.js
index 58df9540..17693c7f 100644
--- a/client/src/data/languages/en.js
+++ b/client/src/data/languages/en.js
@@ -302,7 +302,8 @@ export default {
'SMTP_SERVER_DESCRIPTION': 'The configuration of the SMTP server allows the application to send mails. If you do not configure it, no emails will be sent by OpenSupports.',
'ENABLE_USER_DESCRIPTION': 'This action allows the user to sign in and create tickets.',
'DISABLE_USER_DESCRIPTION': 'User will be disabled and will not be able to sign in and create tickets.',
- 'PRIVATE_DESCRIPTION': 'This response will only be seen by staff members',
+ 'PRIVATE_RESPONSE_DESCRIPTION': 'This response will only be seen by staff members',
+ 'PRIVATE_TOPIC_DESCRIPTION': 'This topic will only be seen by staff members',
//ERRORS
'EMAIL_OR_PASSWORD': 'Email or password invalid',
diff --git a/client/src/data/languages/es.js b/client/src/data/languages/es.js
index 59addec6..b6ecd9c9 100644
--- a/client/src/data/languages/es.js
+++ b/client/src/data/languages/es.js
@@ -302,7 +302,8 @@ export default {
'SMTP_SERVER_DESCRIPTION': 'La configuracion de SMTP permite que la applicacion mande emails. Si no es configurado, ningún mail sera enviado OpenSupports.',
'ENABLE_USER_DESCRIPTION': 'Esta acción permite al usuario iniciar sesión y crear tickets..',
'DISABLE_USER_DESCRIPTION': 'El usuario estará deshabilitado y no podrá iniciar sesión y crear tickets.',
- 'PRIVATE_DESCRIPTION': 'Esta respuesta solo será vista por los miembros del personal.',
+ 'PRIVATE_RESPONSE_DESCRIPTION': 'Esta respuesta solo será vista por los miembros del personal.',
+ 'PRIVATE_TOPIC_DESCRIPTION': 'Este tema solo será visto por los miembros del personal.',
//ERRORS
'EMAIL_OR_PASSWORD': 'Email o contraseña inválida',
diff --git a/client/src/data/languages/fr.js b/client/src/data/languages/fr.js
index 4b5a7d39..fec68bfd 100644
--- a/client/src/data/languages/fr.js
+++ b/client/src/data/languages/fr.js
@@ -302,7 +302,8 @@ export default {
'SMTP_SERVER_DESCRIPTION': 'La configuration du serveur SMTP permet à l\'application d\'envoyer des mails. Si vous ne le configurez pas, aucun service d\'email ne sera envoyé par OpenSupports.',
'ENABLE_USER_DESCRIPTION': 'Cette action permet à l\'utilisateur de se connecter et de créer des tickets.',
'DISABLE_USER_DESCRIPTION': 'L\'utilisateur sera désactivé et ne pourra pas se connecter et créer des tickets.',
- 'PRIVATE_DESCRIPTION': 'Cette réponse ne sera vue que par les membres du personnel',
+ 'PRIVATE_RESPONSE_DESCRIPTION': 'Cette réponse ne sera vue que par les membres du personnel',
+ 'PRIVATE_TOPIC_DESCRIPTION': 'Ce sujet ne sera vu que par les membres du personnel',
//ERRORS
'EMAIL_OR_PASSWORD': 'E-mail ou mot de passe invalide',
diff --git a/client/src/data/languages/gr.js b/client/src/data/languages/gr.js
index 94b2db28..8a776822 100644
--- a/client/src/data/languages/gr.js
+++ b/client/src/data/languages/gr.js
@@ -302,7 +302,8 @@
'SMTP_SERVER_DESCRIPTION': 'Η διαμόρφωση του διακομιστή SMTP επιτρέπει στην εφαρμογή να στείλει μηνύματα. Αν δεν το ρυθμίσετε, δεν θα σταλούν μηνύματα ηλεκτρονικού ταχυδρομείου από το OpenSupport.',
'ENABLE_USER_DESCRIPTION': 'Αυτή η ενέργεια επιτρέπει στο χρήστη να συνδεθεί και να δημιουργήσει εισιτήρια.',
'DISABLE_USER_DESCRIPTION': 'Ο χρήστης θα απενεργοποιηθεί και δεν θα μπορέσει να συνδεθεί και να δημιουργήσει εισιτήρια.',
- 'PRIVATE_DESCRIPTION': 'Αυτή η απάντηση θα δει μόνο τα μέλη του προσωπικού',
+ 'PRIVATE_RESPONSE_DESCRIPTION': 'Αυτή η απάντηση θα δει μόνο τα μέλη του προσωπικού',
+ 'PRIVATE_TOPIC_DESCRIPTION': 'Αυτό το θέμα θα προβληθεί μόνο από μέλη του προσωπικού',
//ERRORS
'EMAIL_OR_PASSWORD': 'Λάθος ηλεκτρονική διεύθυνση ή κωδικός πρόσβασης',
diff --git a/client/src/data/languages/in.js b/client/src/data/languages/in.js
index 7f81cfb1..4b3773fc 100644
--- a/client/src/data/languages/in.js
+++ b/client/src/data/languages/in.js
@@ -302,7 +302,8 @@ export default {
'SMTP_SERVER_DESCRIPTION': 'एसएमटीपी सर्वर का कॉन्फ़िगरेशन एप्लिकेशन को मेल भेजने की अनुमति देता है। यदि आप इसे कॉन्फ़िगर नहीं करते हैं, तो OpenSupports द्वारा कोई ईमेल नहीं भेजा जाएगा।',
'ENABLE_USER_DESCRIPTION': 'यह क्रिया उपयोगकर्ता को साइन इन करने और टिकट बनाने की अनुमति देती है।',
'DISABLE_USER_DESCRIPTION': 'उपयोगकर्ता अक्षम कर दिया जाएगा और साइन इन करने और टिकट बनाने में सक्षम नहीं होगा।',
- 'PRIVATE_DESCRIPTION': 'यह प्रतिक्रिया केवल कर्मचारियों के सदस्यों द्वारा देखी जाएगी',
+ 'PRIVATE_RESPONSE_DESCRIPTION': 'यह प्रतिक्रिया केवल कर्मचारियों के सदस्यों द्वारा देखी जाएगी',
+ 'PRIVATE_TOPIC_DESCRIPTION': 'यह विषय केवल कर्मचारियों के सदस्यों द्वारा देखा जाएगा',
//ERRORS
'EMAIL_OR_PASSWORD': 'ईमेल या पासवर्ड अमान्य',
diff --git a/client/src/data/languages/it.js b/client/src/data/languages/it.js
index caa00841..60fff443 100644
--- a/client/src/data/languages/it.js
+++ b/client/src/data/languages/it.js
@@ -302,7 +302,8 @@ export default {
'SMTP_SERVER_DESCRIPTION': 'La configurazione del server SMTP consente all\'applicazione di inviare messaggi. Se non lo si configura, non verrà inviata alcuna email da OpenSupports.',
'ENABLE_USER_DESCRIPTION': 'Questa azione consente all\'utente di accedere e creare ticket.',
'DISABLE_USER_DESCRIPTION': 'L\'utente sarà disabilitato e non sarà in grado di accedere e creare biglietti.',
- 'PRIVATE_DESCRIPTION': 'Questa risposta sarà visibile solo ai membri dello staff',
+ 'PRIVATE_RESPONSE_DESCRIPTION': 'Questa risposta sarà visibile solo ai membri dello staff',
+ 'PRIVATE_TOPIC_DESCRIPTION': 'Questo argomento sarà visto solo dai membri dello staff',
//ERRORS
'EMAIL_OR_PASSWORD': 'Email o password errate',
diff --git a/client/src/data/languages/jp.js b/client/src/data/languages/jp.js
index 1c52c9f1..2ad5d9f9 100644
--- a/client/src/data/languages/jp.js
+++ b/client/src/data/languages/jp.js
@@ -302,7 +302,8 @@ export default {
'SMTP_SERVER_DESCRIPTION': 'SMTPサーバーの設定により、アプリケーションはメールを送信できます。 これを設定しないと、OpenSupportsから電子メールは送信されません。',
'ENABLE_USER_DESCRIPTION': 'これにより、ユーザーはサインインしてチケットを作成できます。',
'DISABLE_USER_DESCRIPTION': 'ユーザーは無効になり、ログインしてチケットを作成することはできません。',
- 'PRIVATE_DESCRIPTION': 'スタッフのみがこの回答を見ることができます',
+ 'PRIVATE_RESPONSE_DESCRIPTION': 'スタッフのみがこの回答を見ることができます',
+ 'PRIVATE_TOPIC_DESCRIPTION': 'このトピックは、スタッフによってのみ表示されます',
//ERRORS
'EMAIL_OR_PASSWORD': '電子メールまたはパスワードが無効です',
diff --git a/client/src/data/languages/main.py b/client/src/data/languages/main.py
new file mode 100644
index 00000000..027b778f
--- /dev/null
+++ b/client/src/data/languages/main.py
@@ -0,0 +1,78 @@
+from googletrans import Translator
+import colorama
+import ast
+
+class Translater:
+ def __init__(self):
+ colorama.init(autoreset=True)
+ self.data = self.get_language_data('en')
+
+ def get_language_description(self, data):
+ return data[15:len(data)-2];
+
+ def get_dest_language(self, lang):
+ if lang == 'br':
+ return 'pt'
+ if lang == 'cn':
+ return 'zh-cn'
+ if lang == 'gr':
+ return 'el'
+ if lang == 'in':
+ return 'hi'
+ if lang == 'jp':
+ return 'ja'
+ return lang
+
+ def get_language_data(self, lang):
+ data = {}
+ with open(lang + '.js', encoding='utf-8') as f:
+ lineno = 0
+ for l in f:
+ lineno += 1
+ last_char = l[-2:-1]
+ if last_char != ',' and last_char != "'":
+ continue
+ line_data = ast.literal_eval('{'+l+'}')
+ if line_data.keys():
+ key = list(line_data.keys())[0]
+ data[key] = {
+ 'value': line_data[key],
+ 'lineno': lineno,
+ }
+ return data
+
+ def add_property(self, lang, key, value, line):
+ """Adds a property to a lang.js file.
+ """
+ f = open(lang + '.js', 'r')
+ contents = f.readlines()
+ f.close()
+
+ new_line = " '{0}': '{1}',\n".format(key, value)
+ print(colorama.Fore.GREEN + str(line) + ': ' + new_line[:-1])
+ contents.insert(line - 1, new_line)
+
+ f = open(lang + '.js', 'w')
+ contents = "".join(contents)
+ f.write(contents)
+ f.close()
+
+ def main(self):
+ translator = Translator()
+ language_list = ['br', 'cn', 'de', 'es', 'fr', 'gr', 'in', 'it',
+ 'jp', 'nl', 'pt', 'ru', 'tr']
+
+ for language in language_list:
+ print('Translating for language: ' + language)
+ dest_language = self.get_dest_language(language)
+ odata = self.get_language_data(language)
+
+ for key in self.data.keys():
+ if not key in odata:
+ value = translator.translate(self.data[key]['value'],
+ src='en', dest=dest_language).text
+ self.add_property(language, key, value, self.data[key]['lineno'])
+
+if __name__ == "__main__":
+ translater = Translater()
+ translater.main()
diff --git a/client/src/data/languages/nl.js b/client/src/data/languages/nl.js
index e47ab33f..62a2cd34 100644
--- a/client/src/data/languages/nl.js
+++ b/client/src/data/languages/nl.js
@@ -302,7 +302,8 @@ export default {
'SMTP_SERVER_DESCRIPTION': 'De configuratie van de SMTP-server staat het systeem toe om e-mails te verzenden. Als u deze optie niet configureerd, worden er geen e-mails verzonden door OpenSupports.',
'ENABLE_USER_DESCRIPTION': 'Met deze actie kan de gebruiker inloggen en tickets maken.',
'DISABLE_USER_DESCRIPTION': 'De gebruiker wordt uitgeschakeld en kan zich niet aanmelden en geen tickets maken.',
- 'PRIVATE_DESCRIPTION': 'Dit antwoord is alleen zichtbaar voor personeelsleden',
+ 'PRIVATE_RESPONSE_DESCRIPTION': 'Dit antwoord is alleen zichtbaar voor personeelsleden',
+ 'PRIVATE_TOPIC_DESCRIPTION': 'Dit onderwerp is alleen zichtbaar voor personeelsleden',
//ERRORS
'EMAIL_OR_PASSWORD': 'E-mailadres of wachtwoord ongeldig',
diff --git a/client/src/data/languages/pt.js b/client/src/data/languages/pt.js
index d1db214f..268fed65 100644
--- a/client/src/data/languages/pt.js
+++ b/client/src/data/languages/pt.js
@@ -302,7 +302,8 @@ export default {
'SMTP_SERVER_DESCRIPTION': 'A configuração do servidor SMTP permite que o aplicativo envie e-mails. Se você não configurá-lo, nenhum e-mail será enviado pela OpenSupports.',
'ENABLE_USER_DESCRIPTION': 'Essa ação permite que o usuário faça login e crie tickets.',
'DISABLE_USER_DESCRIPTION': 'O usuário será desativado e não poderá fazer login e criar tickets.',
- 'PRIVATE_DESCRIPTION': 'Esta resposta só será vista pelos funcionários',
+ 'PRIVATE_RESPONSE_DESCRIPTION': 'Esta resposta só será vista pelos funcionários',
+ 'PRIVATE_TOPIC_DESCRIPTION': 'Este tópico será visto apenas por membros da equipe',
//ERRORS
'EMAIL_OR_PASSWORD': 'E-mail ou senha inválidos',
diff --git a/client/src/data/languages/ru.js b/client/src/data/languages/ru.js
index c967a393..152d40ac 100644
--- a/client/src/data/languages/ru.js
+++ b/client/src/data/languages/ru.js
@@ -302,6 +302,8 @@ export default {
'SMTP_SERVER_DESCRIPTION': 'Конфигурация SMTP-сервера позволяет приложению отправлять письма. Если вы не настроите его, никакие электронные письма не будут отправлены OpenSupports.',
'ENABLE_USER_DESCRIPTION': 'Это действие позволяет пользователю входить в систему и создавать билеты.',
'DISABLE_USER_DESCRIPTION': 'Пользователь будет отключен и не сможет войти и создать билеты',
+ 'PRIVATE_RESPONSE_DESCRIPTION': 'Этот ответ будет рассматриваться только сотрудниками',
+ 'PRIVATE_TOPIC_DESCRIPTION': 'Эта тема будет видна только сотрудникам',
'PRIVATE_DESCRIPTION': 'Этот ответ будет рассматриваться только сотрудниками',
//ERRORS
diff --git a/client/src/data/languages/tr.js b/client/src/data/languages/tr.js
index 0a00bf76..d66398e7 100644
--- a/client/src/data/languages/tr.js
+++ b/client/src/data/languages/tr.js
@@ -302,6 +302,8 @@ export default {
'SMTP_SERVER_DESCRIPTION': 'SMTP sunucusunun yapılandırması, uygulamanın postalar göndermesine izin verir. Onu yapılandırmazsanız, OpenSupports tarafından hiçbir e-posta gönderilmeyecektir',
'ENABLE_USER_DESCRIPTION': 'Bu eylem, kullanıcının giriş yapmasına ve bilet oluşturmasına izin verir.',
'DISABLE_USER_DESCRIPTION': 'Kullanıcı devre dışı bırakılacak ve oturum açıp bilet oluşturamayacak.',
+ 'PRIVATE_RESPONSE_DESCRIPTION': 'Bu yanıt sadece personel tarafından görülebilir',
+ 'PRIVATE_TOPIC_DESCRIPTION': 'Bu konu sadece çalışanlar tarafından görülebilir',
'PRIVATE_DESCRIPTION': 'Bu yanıt sadece personel tarafından görülebilir',
//ERRORS
diff --git a/server/controllers/article/add-topic.php b/server/controllers/article/add-topic.php
index 3f4e240d..1e1ee276 100755
--- a/server/controllers/article/add-topic.php
+++ b/server/controllers/article/add-topic.php
@@ -17,6 +17,7 @@ DataValidator::with('CustomValidations', true);
* @apiParam {String} name Name of the new topic.
* @apiParam {String} icon Icon of the new topic.
* @apiParam {String} iconColor Icon's color of the new topic.
+ * @apiParam {Boolean} private Indicates if the topic is not shown to users.
*
* @apiUse NO_PERMISSION
* @apiUse INVALID_NAME
@@ -35,7 +36,7 @@ class AddTopicController extends Controller {
'permission' => 'staff_2',
'requestData' => [
'name' => [
- 'validation' => DataValidator::length(3, 100),
+ 'validation' => DataValidator::length(2, 100),
'error' => ERRORS::INVALID_NAME
]
]
@@ -47,7 +48,8 @@ class AddTopicController extends Controller {
$topic->setProperties([
'name' => Controller::request('name'),
'icon' => Controller::request('icon'),
- 'iconColor' => Controller::request('iconColor')
+ 'iconColor' => Controller::request('iconColor'),
+ 'private' => Controller::request('private') ? 1 : 0
]);
Log::createLog('ADD_TOPIC', $topic->name);
@@ -56,4 +58,4 @@ class AddTopicController extends Controller {
'topicId' => $topic->store()
]);
}
-}
\ No newline at end of file
+}
diff --git a/server/controllers/article/edit-topic.php b/server/controllers/article/edit-topic.php
index 92df3653..0a0d75ab 100755
--- a/server/controllers/article/edit-topic.php
+++ b/server/controllers/article/edit-topic.php
@@ -18,6 +18,7 @@ DataValidator::with('CustomValidations', true);
* @apiParam {String} name The new name of the topic. Optional.
* @apiParam {String} icon The new icon of the topic. Optional.
* @apiParam {String} iconColor The new Icon's color of the topic. Optional.
+ * @apiParam {Boolean} private Indicates if the topic is not shown to users.
*
* @apiUse NO_PERMISSION
* @apiUse INVALID_TOPIC
@@ -56,8 +57,11 @@ class EditTopicController extends Controller {
if(Controller::request('icon')) {
$topic->icon = Controller::request('icon');
}
+ if(Controller::request('private') || Controller::request('private') == 0) {
+ $topic->private = Controller::request('private');
+ }
$topic->store();
Response::respondSuccess();
}
-}
\ No newline at end of file
+}
diff --git a/server/controllers/article/get-all.php b/server/controllers/article/get-all.php
index bcd76393..54aa4214 100755
--- a/server/controllers/article/get-all.php
+++ b/server/controllers/article/get-all.php
@@ -15,7 +15,7 @@ DataValidator::with('CustomValidations', true);
* @apiPermission any or user
*
* @apiUse NO_PERMISSION
- *
+ *
* @apiSuccess {[Topic](#api-Data_Structures-ObjectTopic)[]} data Array of topics.
*/
@@ -33,11 +33,11 @@ class GetAllArticlesController extends Controller {
public function handler() {
$topics = Topic::getAll();
$topicsArray = [];
-
+
foreach($topics as $topic) {
- $topicsArray[] = $topic->toArray();
+ Controller::isStaffLogged() ? $topicsArray[] = $topic->toArray() : ($topic->private*1 ? null : $topicsArray[] = $topic->toArray()) ;
}
-
+
Response::respondSuccess($topicsArray);
}
-}
\ No newline at end of file
+}
diff --git a/server/models/Topic.php b/server/models/Topic.php
index 478e839c..c97d5cee 100755
--- a/server/models/Topic.php
+++ b/server/models/Topic.php
@@ -7,6 +7,7 @@
* @apiParam {String} name Name of the topic.
* @apiParam {String} icon Icon of the topic.
* @apiParam {String} iconColor Icon's color of the topic.
+ * @apiParam {Boolean} private Indicates if this event is not shown to users.
* @apiParam {[Article](#api-Data_Structures-ObjectArticle)[]} articles Articles of the Topic.
*/
@@ -18,7 +19,8 @@ class Topic extends DataStore {
'name',
'icon',
'iconColor',
- 'ownArticleList'
+ 'ownArticleList',
+ 'private'
];
}
@@ -34,7 +36,8 @@ class Topic extends DataStore {
'name' => $this->name,
'icon' => $this->icon,
'iconColor' => $this->iconColor,
+ 'private' => $this->private,
'articles' => $articlesArray
];
}
-}
\ No newline at end of file
+}
diff --git a/tests/article/topic.rb b/tests/article/topic.rb
index e9e969b4..d264f89e 100644
--- a/tests/article/topic.rb
+++ b/tests/article/topic.rb
@@ -7,6 +7,7 @@ describe 'Topic paths' do
name: 'Server management',
icon: 'cogs',
iconColor: 'red',
+ private: 0,
csrf_userid: $csrf_userid,
csrf_token: $csrf_token
})
@@ -17,6 +18,7 @@ describe 'Topic paths' do
(topic['name']).should.equal('Server management')
(topic['icon_color']).should.equal('red')
(topic['icon']).should.equal('cogs')
+ (topic['private']).should.equal('0')
lastLog = $database.getLastRow('log')
(lastLog['type']).should.equal('ADD_TOPIC')
@@ -27,6 +29,7 @@ describe 'Topic paths' do
topicId: 1,
name: 'Installation issues',
iconColor: 'blue',
+ private: 1,
csrf_userid: $csrf_userid,
csrf_token: $csrf_token
})
@@ -37,6 +40,7 @@ describe 'Topic paths' do
(topic['name']).should.equal('Installation issues')
(topic['icon_color']).should.equal('blue')
(topic['icon']).should.equal('cogs')
+ (topic['private']).should.equal('1')
end
it 'should delete topic correctly' do