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