diff --git a/twake/backend/core/src/Twake/Channels/Controller/ChannelsNotifications.php b/twake/backend/core/src/Twake/Channels/Controller/ChannelsNotifications.php
index e3391a4296..baf0d1c4fa 100755
--- a/twake/backend/core/src/Twake/Channels/Controller/ChannelsNotifications.php
+++ b/twake/backend/core/src/Twake/Channels/Controller/ChannelsNotifications.php
@@ -12,7 +12,10 @@ class ChannelsNotifications extends BaseController
public function mute(Request $request)
{
$channel_id = $request->request->get("channel_id");
- $mute = $request->request->get("mute", true);
+ $mute = $request->request->get("mute", 1);
+ if(!is_integer($mute)){
+ $mute = $mute?2:0;
+ }
$res = $this->get("app.channels.notifications")->mute($channel_id, $mute, $this->getUser());
if (!$res) {
return new Response(Array("status" => "error"));
diff --git a/twake/backend/core/src/Twake/Channels/Entity/ChannelMember.php b/twake/backend/core/src/Twake/Channels/Entity/ChannelMember.php
index 8bf224f7dd..a7e9956ac0 100755
--- a/twake/backend/core/src/Twake/Channels/Entity/ChannelMember.php
+++ b/twake/backend/core/src/Twake/Channels/Entity/ChannelMember.php
@@ -64,7 +64,7 @@ class ChannelMember
private $last_access = 0;
/**
- * @ORM\Column(name="muted", type="twake_boolean")
+ * @ORM\Column(name="muted", type="tinyint")
*/
private $muted = 0;
@@ -73,6 +73,11 @@ class ChannelMember
*/
private $last_messages_increment = 0; //Will increment on each new message to count notifications
+ /**
+ * @ORM\Column(name="last_quoted_message_id", type="text")
+ */
+ private $last_quoted_message_id = ""; //Will be set when the user is quoted to the quoted message id
+
/**
* ChannelMember constructor.
* @param $user
@@ -193,7 +198,7 @@ public function getMuted()
}
/**
- * @param mixed $muted
+ * @param mixed $muted 0: no, 1: mute default (except @all, @[user]), 2: mute all except user mension, 3: mute everything
*/
public function setMuted($muted)
{
@@ -216,4 +221,20 @@ public function setLastMessagesIncrement($last_messages_increment)
$this->last_messages_increment = $last_messages_increment;
}
+ /**
+ * @return mixed
+ */
+ public function getLastQuotedMessageId()
+ {
+ return $this->last_quoted_message_id;
+ }
+
+ /**
+ * @param mixed $last_quoted_message_id
+ */
+ public function setLastQuotedMessageId($last_quoted_message_id)
+ {
+ $this->last_quoted_message_id = $last_quoted_message_id;
+ }
+
}
diff --git a/twake/backend/core/src/Twake/Channels/Services/ChannelSystemAbstract.php b/twake/backend/core/src/Twake/Channels/Services/ChannelSystemAbstract.php
index 8bc988e9bf..ddb86b98c1 100755
--- a/twake/backend/core/src/Twake/Channels/Services/ChannelSystemAbstract.php
+++ b/twake/backend/core/src/Twake/Channels/Services/ChannelSystemAbstract.php
@@ -187,6 +187,8 @@ public function addTab($channel_id, $application_id, $name)
$this->entity_manager->persist($channel);
$this->entity_manager->flush();
+ return $tab;
+
}
public function addAllWorkspaceMember($workspace, $channel)
@@ -217,6 +219,9 @@ public function updateChannelMembers($channel_entity, $members_ids, $current_use
$members_ids[] = $current_user_id;
}
+ $members_ids = array_unique($members_ids);
+ $final_members_ids = [];
+
$current_members = $channel_entity->getMembers();
$membersRepo = $this->entity_manager->getRepository("Twake\Channels:ChannelMember");
@@ -224,9 +229,20 @@ public function updateChannelMembers($channel_entity, $members_ids, $current_use
foreach ($members_ids as $member_id) {
if (!in_array($member_id, $current_members)) {
- $member = new \Twake\Channels\Entity\ChannelMember($member_id . "", $channel_entity);
- $member->setLastMessagesIncrement($channel_entity->getMessagesIncrement());
- $this->entity_manager->persist($member);
+ //Check if user is in workspace
+ $canBeAdded = true;
+ if(!$channel_entity->getDirect()){
+ $wuRepo = $this->entity_manager->getRepository("Twake\Workspaces:WorkspaceUser");
+ $canBeAdded = !!$wuRepo->findBy(Array("workspace" => $channel_entity->getOriginalWorkspaceId()."", "user" => $member_id.""));
+ }
+ if($canBeAdded){
+ $member = new \Twake\Channels\Entity\ChannelMember($member_id . "", $channel_entity);
+ $member->setLastMessagesIncrement($channel_entity->getMessagesIncrement());
+ $this->entity_manager->persist($member);
+ $final_members_ids[] = $member_id;
+ }
+ }else{
+ $final_members_ids[] = $member_id;
}
}
@@ -239,7 +255,7 @@ public function updateChannelMembers($channel_entity, $members_ids, $current_use
}
}
- $channel_entity->setMembers($members_ids);
+ $channel_entity->setMembers($final_members_ids);
$this->entity_manager->persist($channel_entity);
$this->entity_manager->flush();
diff --git a/twake/backend/core/src/Twake/Channels/Services/ChannelsNotificationsSystem.php b/twake/backend/core/src/Twake/Channels/Services/ChannelsNotificationsSystem.php
index 2ada932f64..5715d1f1a4 100755
--- a/twake/backend/core/src/Twake/Channels/Services/ChannelsNotificationsSystem.php
+++ b/twake/backend/core/src/Twake/Channels/Services/ChannelsNotificationsSystem.php
@@ -34,16 +34,21 @@ public function newElement($channel, $sender_application = null, $sender_user =
$workspace_ent = $this->doctrine->getRepository("Twake\Workspaces:Workspace")->find($workspace);
$users_to_notify = [];
- $users_to_notify_mention = [];
+ $mentions_types = [];
foreach ($members as $member) {
- $mention = strpos(json_encode($message->getContent()), $member->getUserId()) !== false;
- $mention = $mention || strpos(json_encode($message->getContent()), "@here") !== false;
- $mention = $mention || strpos(json_encode($message->getContent()), "@all") !== false;
-
- $muted = $member->getMuted();
- if ($muted && $mention) {
+ $user_mention = strpos(json_encode($message->getContent()), $member->getUserId()) !== false;
+ $here_mention = strpos(json_encode($message->getContent()), "@here") !== false;
+ $all_mention = strpos(json_encode($message->getContent()), "@all") !== false;
+ $any_mention = $here_mention || $all_mention || $user_mention;
+
+ $muted_options = $member->getMuted();
+ $mention_level = ($any_mention?1:0) + ($user_mention?1:0); //2 if @user, 1 if only @here
+
+ $muted = true;
+ $mention_text = false;
+ if($mention_level >= $muted_options){
$muted = false;
}
@@ -51,9 +56,21 @@ public function newElement($channel, $sender_application = null, $sender_user =
$user = $userRepo->find($member->getUserId());
- $member->setLastActivity(new \DateTime());
+ if($mention_level === 1){
+ $mention_text = "@".($all_mention?"all":"here");
+ }
+ if($mention_level === 2){
+ $mention_text = "@".$user->getUsername();
+ }
- $this->pusher->push(Array("type" => "update", "notification" => Array("channel" => $channel->getAsArray())), "notifications/" . $member->getUserId());
+ $member->setLastActivity(new \DateTime());
+ if($mention_text){
+ $member->setLastQuotedMessageId("" . $message->getId());
+ }
+
+ $channel_array = $channel->getAsArray();
+ $channel_array["_user_last_quoted_message_id"] = $member->getLastQuotedMessageId();
+ $this->pusher->push(Array("type" => "update", "notification" => Array("channel" => $channel_array)), "notifications/" . $member->getUserId());
//Updating workspace and group notifications
if (!$channel->getDirect()) {
@@ -62,16 +79,15 @@ public function newElement($channel, $sender_application = null, $sender_user =
}
- if($mention){
- $users_to_notify_mention[] = $user;
+ if($mention_text){
+ $mentions_types[$mention_text] = $mentions_types[$mention_text] ?: [];
+ $mentions_types[$mention_text][] = $user;
}else{
$users_to_notify[] = $user;
}
- } else {
- $member->setLastMessagesIncrement($channel->getMessagesIncrement());
- $member->setLastAccess(new \DateTime());
}
+
$this->doctrine->persist($member);
}
@@ -90,20 +106,23 @@ public function newElement($channel, $sender_application = null, $sender_user =
true
);
- $this->notificationSystem->pushNotification(
- null,
- $sender_application,
- $sender_user,
- $workspace_ent,
- $channel,
- $users_to_notify_mention,
- "channel_" . $channel->getId(),
- "@mentionned: ".$message_as_text,
- $message ? $message->getId() : "",
- Array(),
- Array("push"),
- true
- );
+ foreach($mentions_types as $mention_text => $users){
+ error_log($mention_text);
+ $this->notificationSystem->pushNotification(
+ null,
+ $sender_application,
+ $sender_user,
+ $workspace_ent,
+ $channel,
+ $users,
+ "channel_" . $channel->getId(),
+ "@".ltrim($mention_text, "@").": ".$message_as_text,
+ $message ? $message->getId() : "",
+ Array(),
+ Array("push"),
+ true
+ );
+ }
$this->doctrine->persist($channel);
@@ -168,9 +187,11 @@ public function unread($channel, $user)
$member = $membersRepo->findOneBy(Array("direct" => $channel->getDirect(), "channel_id" => $channel->getId(), "user_id" => $user->getId()));
$member->setLastMessagesIncrement($channel->getMessagesIncrement() - 1);
+ $member->setLastQuotedMessageId("force_unread");
$array = $channel->getAsArray();
$array["_user_last_message_increment"] = $member->getLastMessagesIncrement();
+ $array["_user_last_quoted_message_id"] = $member->getLastQuotedMessageId();
$array["_user_last_access"] = $member->getLastAccess() ? $member->getLastAccess()->getTimestamp() : 0;
$this->pusher->push(Array("type" => "update", "notification" => Array("channel" => $array)), "notifications/" . $user->getId());
@@ -210,9 +231,11 @@ public function read($channel, $user)
$member->setLastMessagesIncrement($channel->getMessagesIncrement());
$member->setLastAccess(new \DateTime());
+ $member->setLastQuotedMessageId("");
$array = $channel->getAsArray();
$array["_user_last_message_increment"] = $member->getLastMessagesIncrement();
+ $array["_user_last_quoted_message_id"] = $member->getLastQuotedMessageId();
$array["_user_last_access"] = $member->getLastAccess() ? $member->getLastAccess()->getTimestamp() : 0;
$this->pusher->push(Array("type" => "update", "notification" => Array("channel" => $array)), "notifications/" . $user->getId());
diff --git a/twake/backend/core/src/Twake/Channels/Services/ChannelsSystem.php b/twake/backend/core/src/Twake/Channels/Services/ChannelsSystem.php
index 46b461fc93..2c1e154aec 100755
--- a/twake/backend/core/src/Twake/Channels/Services/ChannelsSystem.php
+++ b/twake/backend/core/src/Twake/Channels/Services/ChannelsSystem.php
@@ -74,6 +74,7 @@ public function get($options, $current_user)
if ($res) {
$tmp = $channel->getAsArray();
$tmp["_user_last_message_increment"] = $res->getLastMessagesIncrement();
+ $tmp["_user_last_quoted_message_id"] = $res->getLastQuotedMessageId();
$tmp["_user_last_access"] = $res->getLastAccess() ? $res->getLastAccess()->getTimestamp() : null;
$tmp["_user_muted"] = $res->getMuted();
$result[] = $tmp;
@@ -158,18 +159,6 @@ public function save($object, $options, $current_user)
$this->entity_manager->flush($channel);
- //Send first message if created channel
- if ($did_create) {
- //Init channel with a first message
- $init_message = Array(
- "channel_id" => $channel->getId(),
- "hidden_data" => Array("type" => "init_channel"),
- "content" => "[]"
- );
- $this->messages_service->save($init_message, Array());
- }
-
-
//Private and non private users management
if ($channel->getPrivate()) {
$this->updateChannelMembers($channel, $members, $current_user->getId());
@@ -197,18 +186,34 @@ public function save($object, $options, $current_user)
//Tabs
+ $tab = null;
if (isset($object["_once_save_tab"])) {
if (isset($object["_once_save_tab"]["id"]) && $object["_once_save_tab"]["id"]) {
$this->renameTab($channel->getId(), $object["_once_save_tab"]["app_id"], $object["_once_save_tab"]["id"], $object["_once_save_tab"]["name"]);
} else {
- $this->addTab($channel->getId(), $object["_once_save_tab"]["app_id"], $object["_once_save_tab"]["name"]);
+ $tab = $this->addTab($channel->getId(), $object["_once_save_tab"]["app_id"], $object["_once_save_tab"]["name"]);
}
}
if (isset($object["_once_remove_tab"])) {
$this->removeTab($channel->getId(), $object["_once_remove_tab"]["app_id"], $object["_once_remove_tab"]["id"]);
}
if (isset($object["_once_save_tab_config"])) {
- $this->updateTabConfiguration($channel->getId(), $object["_once_save_tab_config"]["app_id"], $object["_once_save_tab_config"]["id"], $object["_once_save_tab_config"]["configuration"]);
+ $tab_id = $object["_once_save_tab_config"]["id"];
+ if($tab && !$tab_id){
+ $tab_id = $tab->getId();
+ }
+ $this->updateTabConfiguration($channel->getId(), $object["_once_save_tab_config"]["app_id"], $tab_id, $object["_once_save_tab_config"]["configuration"]);
+ }
+
+ //Send first message if created channel
+ if ($did_create) {
+ //Init channel with a first message
+ $init_message = Array(
+ "channel_id" => $channel->getId(),
+ "hidden_data" => Array("type" => "init_channel"),
+ "content" => "[]"
+ );
+ $this->messages_service->save($init_message, Array());
}
return $channel->getAsArray();
diff --git a/twake/backend/core/src/Twake/Channels/Services/DirectMessagesSystem.php b/twake/backend/core/src/Twake/Channels/Services/DirectMessagesSystem.php
index bf0bea691d..ad456b0096 100755
--- a/twake/backend/core/src/Twake/Channels/Services/DirectMessagesSystem.php
+++ b/twake/backend/core/src/Twake/Channels/Services/DirectMessagesSystem.php
@@ -59,6 +59,7 @@ public function get($options, $current_user)
if ($channel) {
$tmp = $channel->getAsArray();
$tmp["_user_last_message_increment"] = $link->getLastMessagesIncrement();
+ $tmp["_user_last_quoted_message_id"] = $link->getLastQuotedMessageId();
$tmp["_user_last_access"] = $link->getLastAccess() ? $link->getLastAccess()->getTimestamp() : null;
$tmp["_user_muted"] = $link->getMuted();
$result[] = $tmp;
diff --git a/twake/backend/core/src/Twake/Core/Command/TwakeSchemaUpdateCommand.php b/twake/backend/core/src/Twake/Core/Command/TwakeSchemaUpdateCommand.php
index 78d905cc12..ea546c9df9 100755
--- a/twake/backend/core/src/Twake/Core/Command/TwakeSchemaUpdateCommand.php
+++ b/twake/backend/core/src/Twake/Core/Command/TwakeSchemaUpdateCommand.php
@@ -378,6 +378,7 @@ private function convertType($type)
"twake_timeuuid" => "timeuuid",
"array" => "text",
"twake_boolean" => "tinyint",
+ "tinyint" => "tinyint",
"boolean" => "tinyint",
"text" => "text",
"twake_float" => "float",
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/DriverManager.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/DriverManager.php
index 87247070d9..c360fb634d 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/DriverManager.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/DriverManager.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraBigIntType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraBigIntType.php
index ae4eff24d0..dd85d7b51e 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraBigIntType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraBigIntType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraBooleanType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraBooleanType.php
index 9c6cbe8b9a..1a18dbedda 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraBooleanType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraBooleanType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraCounterType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraCounterType.php
index 9d48606622..df292649a1 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraCounterType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraCounterType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraDateTimeType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraDateTimeType.php
index f291a384c9..c1606a6e78 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraDateTimeType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraDateTimeType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraFloatType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraFloatType.php
index c3ee50d031..fcf7895cc3 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraFloatType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraFloatType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraSearchableTextType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraSearchableTextType.php
index b04e85b88d..4ec98d7cac 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraSearchableTextType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraSearchableTextType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraStringType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraStringType.php
index 151730adc3..7db50f07a2 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraStringType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraStringType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraTextType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraTextType.php
index 79111bdc7d..efd225e592 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraTextType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraTextType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraTimeUUIDType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraTimeUUIDType.php
index f40a77bd02..02629fcd1c 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraTimeUUIDType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/CassandraTimeUUIDType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlBigIntType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlBigIntType.php
index d6d8033346..27092b6c44 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlBigIntType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlBigIntType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlBooleanType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlBooleanType.php
index a6f9acd357..a21b43f4bf 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlBooleanType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlBooleanType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlCounterType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlCounterType.php
index a3a19df55b..fa98a04391 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlCounterType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlCounterType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlDateTimeType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlDateTimeType.php
index 851091f526..373892aebf 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlDateTimeType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlDateTimeType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlFloatType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlFloatType.php
index eaea9743a8..9cf18bd001 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlFloatType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlFloatType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlSearchableTextType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlSearchableTextType.php
index e9847bd5f2..de4f9d3403 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlSearchableTextType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlSearchableTextType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlStringType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlStringType.php
index cbae9f24d0..3c9bce570a 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlStringType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlStringType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlTextType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlTextType.php
index 189b18cc32..6634da96c4 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlTextType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlTextType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlTimeUUIDType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlTimeUUIDType.php
index ebcd310b60..ca22b82119 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlTimeUUIDType.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/MysqlTimeUUIDType.php
@@ -1,21 +1,5 @@
.
- */
+
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/TinyintType.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/TinyintType.php
new file mode 100755
index 0000000000..7fac423344
--- /dev/null
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/DBAL/Types/TinyintType.php
@@ -0,0 +1,35 @@
+.
- */
namespace Twake\Core\Services\DoctrineAdapter\DBAL\Types;
diff --git a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/ManagerAdapter.php b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/ManagerAdapter.php
index d9a22562c4..26be50461f 100755
--- a/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/ManagerAdapter.php
+++ b/twake/backend/core/src/Twake/Core/Services/DoctrineAdapter/ManagerAdapter.php
@@ -96,6 +96,7 @@ public function getEntityManager()
'twake_datetime' => 'Twake\Core\Services\DoctrineAdapter\DBAL\Types\\' . $driver_type . 'DateTimeType',
'twake_timeuuid' => 'Twake\Core\Services\DoctrineAdapter\DBAL\Types\\' . $driver_type . 'TimeUUIDType',
'twake_boolean' => 'Twake\Core\Services\DoctrineAdapter\DBAL\Types\\' . $driver_type . 'BooleanType',
+ 'tinyint' => 'Twake\Core\Services\DoctrineAdapter\DBAL\Types\\TinyintType',
'twake_no_salt_text' => 'Twake\Core\Services\DoctrineAdapter\DBAL\Types\\' . $driver_type . 'SearchableTextType',
'twake_text' => 'Twake\Core\Services\DoctrineAdapter\DBAL\Types\\' . $driver_type . 'TextType',
'twake_string' => 'Twake\Core\Services\DoctrineAdapter\DBAL\Types\\' . $driver_type . 'StringType',
diff --git a/twake/backend/core/src/Twake/Discussion/Services/MessageSystem.php b/twake/backend/core/src/Twake/Discussion/Services/MessageSystem.php
index 802090151c..bed1c289e9 100755
--- a/twake/backend/core/src/Twake/Discussion/Services/MessageSystem.php
+++ b/twake/backend/core/src/Twake/Discussion/Services/MessageSystem.php
@@ -470,6 +470,13 @@ public function save($object, $options, $user = null, $application = null)
$channel->setLastActivity(new \DateTime());
$channel->setMessagesIncrement($channel->getMessagesIncrement() + 1);
+ //Sender autoread the channel
+ if($user){
+ $membersRepo = $this->em->getRepository("Twake\Channels:ChannelMember");
+ $member = $membersRepo->findOneBy(Array("direct" => $channel->getDirect(), "channel_id" => $channel->getId(), "user_id" => $user->getId()));
+ $member->setLastMessagesIncrement($channel->getMessagesIncrement());
+ }
+
try{
$this->queues->push("message_dispatch_queue", [
"channel" => $channel->getId(),
diff --git a/twake/frontend/scripts/find_non_translated_fields.py b/twake/frontend/scripts/find_non_translated_fields.py
index 3714b83af9..1849ac65f9 100644
--- a/twake/frontend/scripts/find_non_translated_fields.py
+++ b/twake/frontend/scripts/find_non_translated_fields.py
@@ -1,7 +1,7 @@
import os
import re
-rootpath = '../src/app'
+rootpath = os.path.abspath('../frontend/src/app')
def nextGuillemet(s, i):
for k in range(i , len(s)):
diff --git a/twake/frontend/scripts/redundances_lan_fields.py b/twake/frontend/scripts/redundances_lan_fields.py
index 63a4d48ad2..827c4792d8 100644
--- a/twake/frontend/scripts/redundances_lan_fields.py
+++ b/twake/frontend/scripts/redundances_lan_fields.py
@@ -1,6 +1,7 @@
import use_of_the_lan_fields as sc
import os
+import sys
sc.init()
items = sc.dicstr.items()
@@ -20,34 +21,48 @@ def redundance():
if k1!=k2:# and v1[-1]!='':
b= True
for l in range(len(min(v1,v2))):
- b = b and v1[l]==v2[l]
+ b = b and v1[l] == v2[l]
if b:
update_rep(v1[-1],k1)
def overwrite():
#overwriting
+ meta = [item for sublist in [it for it in dicrep.values()] for item in sublist]
+ print(meta)
for dossier, sous_dossiers, fichiers in os.walk(sc.rootpath):
for fichier in fichiers:
currentpath = os.path.join(dossier, fichier)
if currentpath.endswith(".js") and (currentpath.count(".")==1):
if currentpath.__contains__("languages"):
continue
+ b = False
- lecture = open(currentpath, "r")
+ lecture = open(currentpath, "r+")
s = lecture.read()
t = s.split("'")[1::2]
for sub in t:
- if sub in dicrep.values():
+ if sub in meta:
#replace sub by dicrep[sub][0] in file
- a=0
+ en_sub = sc.dicstr.get(sub)[-1]
+ if len(dicrep.get(en_sub))>3 and en_sub:
+ repsub = dicrep.get(en_sub)[0]
+ s = s.replace(sub, repsub)
+ b = True
+ if b:
+ print('Begin Lecture')
+ lecture.seek(0)
+ lecture.write(s)
+ print("Changed: " + currentpath)
lecture.close()
-
-ecriture = open('fichier3.txt', "w")
+redundance()
+ecriture = open('../fichier3.txt', "w")
c=0
for key, value in dicrep.items():
- c+= len(value)
- ecriture.write(key + " : "+ str(value)+" " + str(len(value))+ "\n")
+ if len(value)>3 and key:
+ c+= len(value)
+ ecriture.write(key + " : "+ str(value)+" " + str(len(value))+ "\n")
ecriture.write(str(c))
ecriture.close()
+overwrite()
diff --git a/twake/frontend/scripts/use_of_the_lan_fields.py b/twake/frontend/scripts/use_of_the_lan_fields.py
index 89677961cc..cfc662b9da 100644
--- a/twake/frontend/scripts/use_of_the_lan_fields.py
+++ b/twake/frontend/scripts/use_of_the_lan_fields.py
@@ -1,8 +1,7 @@
import os
import re
-rootpath = '..'
-
+rootpath = os.path.abspath('..')
#2 dictionnaries : 1 with the nb of occurences, 1 with the strings in the various languages
dicoc = dict()
@@ -37,11 +36,10 @@ def get_string(s):
def init():
#initialization of the strings dictionnaries
- for dossier, sous_dossiers, fichiers in os.walk(rootpath + "src/app/services/languages/locale/"):
+ for dossier, sous_dossiers, fichiers in os.walk(rootpath + "/frontend/src/app/services/languages/locale/"):
for fichier in fichiers:
currentpath = os.path.join(dossier, fichier)
- if currentpath.endswith(".js") and (currentpath.count(".")==1):
- print(currentpath)
+ if currentpath.endswith(".js") and (currentpath.count(".")==1) and 'ja' not in currentpath and not currentpath.endswith('es.js'):
lecture = open(currentpath, "r")
s = lecture.read()
@@ -91,7 +89,7 @@ def main():
count()
ecriture = open('../fichier2.txt', "w")
for key, value in dicstr.items():
- if dicoc[key] ==0 or len(value)<4 or value.__contains__('') or value.__contains__('No traduction'):
+ if (len(value)<3 or '' in value or 'No traduction'in value) and dicoc[key] >= 0:
ecriture.write(key + " : "+ str(value)+" "+ str(dicoc[key]) + "\n")
ecriture.close()
#print(dicstr)
diff --git a/twake/frontend/src/app/components/ConnectionIndicator/ConnectionIndicator.js b/twake/frontend/src/app/components/ConnectionIndicator/ConnectionIndicator.js
index f072b701b4..994810bd7b 100644
--- a/twake/frontend/src/app/components/ConnectionIndicator/ConnectionIndicator.js
+++ b/twake/frontend/src/app/components/ConnectionIndicator/ConnectionIndicator.js
@@ -4,6 +4,7 @@ import WebsocketsManager from 'services/websocket.js';
import ErrorOutlinedIcon from '@material-ui/icons/ErrorOutlined';
import HourglassEmpty from '@material-ui/icons/HourglassEmpty';
import CheckCircleIcon from '@material-ui/icons/CheckCircle';
+import Languages from 'services/languages/languages.js';
export default class ConnectionIndicator extends React.Component {
constructor(props) {
@@ -22,17 +23,18 @@ export default class ConnectionIndicator extends React.Component {
>
{WebsocketsManager.connected === false && WebsocketsManager.is_reconnecting !== true && (
- Vous êtes hors ligne
+ {' '}
+ {Languages.t('general.connexion_status.disconnected')}
)}
{WebsocketsManager.connected === false && WebsocketsManager.is_reconnecting === true && (
- Reconnexion en cours...
+ {Languages.t('general.connexion_status.connecting')}
)}
{WebsocketsManager.connected === true && (
- Vous êtes connecté
+ {Languages.t('general.connexion_status.connected')}
)}
diff --git a/twake/frontend/src/app/components/Drive/DriveElement.js b/twake/frontend/src/app/components/Drive/DriveElement.js
index cdd358dec5..ccbbf75fce 100755
--- a/twake/frontend/src/app/components/Drive/DriveElement.js
+++ b/twake/frontend/src/app/components/Drive/DriveElement.js
@@ -340,7 +340,7 @@ export default class DriveElement extends React.Component {
disabled={(this.state.new_name || '').length <= 0}
type="button"
value={Languages.t(
- 'scenes.apps.messages.message.save_button',
+ 'general.save',
[],
'Enregistrer',
)}
diff --git a/twake/frontend/src/app/components/Drive/FilePicker/FilePicker.js b/twake/frontend/src/app/components/Drive/FilePicker/FilePicker.js
index ba4149ded9..328e126ca3 100755
--- a/twake/frontend/src/app/components/Drive/FilePicker/FilePicker.js
+++ b/twake/frontend/src/app/components/Drive/FilePicker/FilePicker.js
@@ -117,7 +117,7 @@ export default class FilePicker extends React.Component {
}}
/>
)}{' '}
- {directory.parent_id ? directory.name : 'Documents'}
+ {directory.parent_id ? directory.name : Languages.t('app.name.twake_drive', [], 'Documents')}
{directories.map((item, index) => (
diff --git a/twake/frontend/src/app/components/Drive/VersionDetails.js b/twake/frontend/src/app/components/Drive/VersionDetails.js
index 6d2e7698d4..ba3ed64ff6 100755
--- a/twake/frontend/src/app/components/Drive/VersionDetails.js
+++ b/twake/frontend/src/app/components/Drive/VersionDetails.js
@@ -68,11 +68,11 @@ export default class VersionDetails extends React.Component {
}
title={
- Versions
+ {Languages.t('scenes.apps.drive.right_preview.versions', [], 'Versions')}
}
>
-
diff --git a/twake/frontend/src/app/components/Icon/Icon.js b/twake/frontend/src/app/components/Icon/Icon.js
index 40f39d043b..e3d97a2e9c 100755
--- a/twake/frontend/src/app/components/Icon/Icon.js
+++ b/twake/frontend/src/app/components/Icon/Icon.js
@@ -19,13 +19,24 @@ export default class Icon extends React.Component {
return false;
}
render() {
- return (
-
- );
+ if ((this.props.type || '').indexOf('http') === 0) {
+ return (
+
+ );
+ } else {
+ return (
+
+ );
+ }
}
}
diff --git a/twake/frontend/src/app/components/Icon/unicons.scss b/twake/frontend/src/app/components/Icon/unicons.scss
index b49fec80bb..528d440534 100755
--- a/twake/frontend/src/app/components/Icon/unicons.scss
+++ b/twake/frontend/src/app/components/Icon/unicons.scss
@@ -20,6 +20,10 @@
}
*/
+.no-margin-left::before {
+ margin-left: 0 !important;
+}
+
[class^='uil-']:before,
[class*=' uil-']:before {
font-family: 'unicons';
diff --git a/twake/frontend/src/app/components/InfiniteMessages/InfiniteMessages.js b/twake/frontend/src/app/components/InfiniteMessages/InfiniteMessages.js
index 3653a24fb1..807b14b209 100755
--- a/twake/frontend/src/app/components/InfiniteMessages/InfiniteMessages.js
+++ b/twake/frontend/src/app/components/InfiniteMessages/InfiniteMessages.js
@@ -99,7 +99,7 @@ export default class InfiniteMessages extends Component {
this.scrollToBottom();
var dom_fake_separator_top_visible = Math.max(
0,
- this.dom_infinite_messages.clientHeight - this.dom_visualized_messages_top.clientHeight
+ this.dom_infinite_messages.clientHeight - this.dom_visualized_messages_top.clientHeight,
);
if (dom_fake_separator_top_visible == 0) {
this.dom_fake_separator_top.style.display = 'none';
@@ -117,7 +117,7 @@ export default class InfiniteMessages extends Component {
this.dom_anything_on_top.clientHeight +
(this.did_update_messages_data.bloc_bottom_height -
(this.did_update_messages_data.scroll_height -
- this.did_update_messages_data.scroll_top))
+ this.did_update_messages_data.scroll_top)),
);
} else if (this.did_update_messages_data.direction == 'bottom_auto_add') {
//Nothing
@@ -263,7 +263,7 @@ export default class InfiniteMessages extends Component {
'get previous messages before ',
this.messages_min.id,
' min was ',
- (this.no_more_before || {}).id
+ (this.no_more_before || {}).id,
);
this.number_of_messages_to_load = 2 * (this.dom_infinite_messages.clientHeight / 20);
@@ -278,7 +278,7 @@ export default class InfiniteMessages extends Component {
}
var top_list = this.state.messages.filter(
- m => this.compare(m, this.messages_min) >= 0 && this.compare(m, this.messages_med) <= 0
+ m => this.compare(m, this.messages_min) >= 0 && this.compare(m, this.messages_med) <= 0,
);
top_list = res.concat(top_list);
@@ -339,7 +339,7 @@ export default class InfiniteMessages extends Component {
top_list = top_list.concat(res);
this.state.messages = this.props.messages.filter(
- m => this.compare(m, this.on_load_min) > 0
+ m => this.compare(m, this.on_load_min) > 0,
);
this.max_known = this.state.messages[this.state.messages.length - 1];
@@ -361,7 +361,7 @@ export default class InfiniteMessages extends Component {
this.setState({ messages: this.state.messages });
} else {
var top_list = this.state.messages.filter(
- m => this.compare(m, this.messages_med) > 0 && this.compare(m, this.messages_max) <= 0
+ m => this.compare(m, this.messages_med) > 0 && this.compare(m, this.messages_max) <= 0,
);
top_list = top_list.concat(res);
@@ -384,7 +384,7 @@ export default class InfiniteMessages extends Component {
}
this.is_getting_bottom_messages = false;
- }
+ },
);
}
diff --git a/twake/frontend/src/app/components/InlineTagPicker/InlineTagPicker.js b/twake/frontend/src/app/components/InlineTagPicker/InlineTagPicker.js
new file mode 100644
index 0000000000..4f8c74fb48
--- /dev/null
+++ b/twake/frontend/src/app/components/InlineTagPicker/InlineTagPicker.js
@@ -0,0 +1,27 @@
+import React, { Component } from 'react';
+import './InlineTagPicker.scss';
+
+export default class InlineTagPicker extends Component {
+ render() {
+ return this.props.available.map(item => {
+ return (
+
{
+ let array = (this.props.value || []).map(a => a);
+ if (this.props.value.includes(item)) {
+ array = this.props.value.filter(val => item !== val);
+ } else {
+ array.push(item);
+ }
+ this.props.onChange(array);
+ }}
+ >
+ {item}
+
+ );
+ });
+ }
+}
diff --git a/twake/frontend/src/app/components/InlineTagPicker/InlineTagPicker.scss b/twake/frontend/src/app/components/InlineTagPicker/InlineTagPicker.scss
new file mode 100644
index 0000000000..701aefcfbe
--- /dev/null
+++ b/twake/frontend/src/app/components/InlineTagPicker/InlineTagPicker.scss
@@ -0,0 +1,23 @@
+.inline-tag {
+ cursor: pointer;
+ background: var(--grey-light);
+ border-radius: var(--default-border-radius);
+ height: 20px;
+ color: var(--grey-dark);
+ font-size: 12px;
+ padding: 0 5px;
+ line-height: 18px;
+ box-sizing: border-box;
+ width: auto;
+ display: inline-block;
+ margin-right: 6px;
+ font-weight: normal;
+ &.selected {
+ background: var(--green);
+ color: var(--white);
+ }
+ &:hover {
+ transition: 0.3s;
+ opacity: 0.9;
+ }
+}
diff --git a/twake/frontend/src/app/components/Leftbar/Channel/Channel.js b/twake/frontend/src/app/components/Leftbar/Channel/Channel.js
index adefcffaf2..c506a6df3a 100755
--- a/twake/frontend/src/app/components/Leftbar/Channel/Channel.js
+++ b/twake/frontend/src/app/components/Leftbar/Channel/Channel.js
@@ -18,10 +18,11 @@ export default class Channel extends React.Component {
0 ? 'has_notifications ' : '')
+ (!!this.props.selected ? 'selected ' : '') +
+ (!!this.props.muted ? 'muted ' : '') +
+ (!!this.props.alinea ? 'extra-margin ' : '') +
+ (this.props.notifications > 0 ? 'has_notifications ' : '') +
+ (this.props.hasNewContent > 0 ? 'has_new_content ' : '')
}
parentClassOnDrag="dragging_channel_view"
minMove={5}
@@ -36,9 +37,9 @@ export default class Channel extends React.Component {
)}
- {this.props.icon &&
}
- {this.props.emoji &&
}
- {this.props.users && (
+ {!!this.props.icon &&
}
+ {!!this.props.emoji &&
}
+ {!!this.props.users && (
{this.props.users.map(user => {
return (
@@ -48,7 +49,7 @@ export default class Channel extends React.Component {
)}
- {this.props.notMember && (
+ {!!this.props.notMember && (
)}
- {this.props.appIndicator && APP
}
- {this.props.users && this.props.users.length > 1 && (
+ {!!this.props.appIndicator && APP
}
+ {!!this.props.users && this.props.users.length > 1 && (
{this.props.users.length}
)}
- {this.props.imported && (
+ {!!this.props.imported && (
{Math.max(1, this.props.notifications)}
)}
- {this.props.muted && }
+ {!!this.props.muted && }
{
diff --git a/twake/frontend/src/app/components/Leftbar/Channel/Channel.scss b/twake/frontend/src/app/components/Leftbar/Channel/Channel.scss
index a403af960c..f848bcd9f3 100755
--- a/twake/frontend/src/app/components/Leftbar/Channel/Channel.scss
+++ b/twake/frontend/src/app/components/Leftbar/Channel/Channel.scss
@@ -90,7 +90,7 @@
padding-left: 6px;
}
- &.has_notifications {
+ &.has_new_content {
font-weight: 700;
}
diff --git a/twake/frontend/src/app/components/Leftbar/Footer/Footer.scss b/twake/frontend/src/app/components/Leftbar/Footer/Footer.scss
index 1dc793e6e5..89eaa9ba92 100755
--- a/twake/frontend/src/app/components/Leftbar/Footer/Footer.scss
+++ b/twake/frontend/src/app/components/Leftbar/Footer/Footer.scss
@@ -79,9 +79,9 @@
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
- flex: 1;
margin-left: 20px;
cursor: pointer;
+ display: inline;
&.free {
background: #fff3cd;
diff --git a/twake/frontend/src/app/components/Parameters/Attribute.js b/twake/frontend/src/app/components/Parameters/Attribute.js
index 6c60b5e5e0..15e57f9991 100755
--- a/twake/frontend/src/app/components/Parameters/Attribute.js
+++ b/twake/frontend/src/app/components/Parameters/Attribute.js
@@ -70,11 +70,13 @@ export default class Attribute extends React.Component {
}
>
diff --git a/twake/frontend/src/app/components/TagPicker/TagPicker.js b/twake/frontend/src/app/components/TagPicker/TagPicker.js
index 42eaaac1ac..5bd955893a 100755
--- a/twake/frontend/src/app/components/TagPicker/TagPicker.js
+++ b/twake/frontend/src/app/components/TagPicker/TagPicker.js
@@ -174,7 +174,7 @@ export default class TagPicker extends React.Component {
}}
>
{' '}
- {Languages.t('scenes.apps.tasks.task.add', [], 'Add')}
+ {Languages.t('general.add', [], 'Add')}
)}
diff --git a/twake/frontend/src/app/components/Twacode/PseudoMarkdownDictionary.js b/twake/frontend/src/app/components/Twacode/PseudoMarkdownDictionary.js
index 7abb699afe..d86c1f356b 100755
--- a/twake/frontend/src/app/components/Twacode/PseudoMarkdownDictionary.js
+++ b/twake/frontend/src/app/components/Twacode/PseudoMarkdownDictionary.js
@@ -65,8 +65,12 @@ class PseudoMarkdownDictionary {
if (!object.url && object.url !== undefined) {
return
{child} ;
}
+ var protocol = 'https';
+ if ((object.url || object.content || '').indexOf('http://')) {
+ protocol = 'http';
+ }
var orig_url =
- 'http://' + (object.url || object.content || '').replace(/^(https?:\/\/)/, '');
+ protocol + '://' + (object.url || object.content || '').replace(/^(https?:\/\/)/, '');
var url = orig_url;
if (object.user_identifier && UserService.getCurrentUser()) {
var separator = '?';
diff --git a/twake/frontend/src/app/components/Twacode/Twacode.scss b/twake/frontend/src/app/components/Twacode/Twacode.scss
index df8211936a..ca8fbdec45 100755
--- a/twake/frontend/src/app/components/Twacode/Twacode.scss
+++ b/twake/frontend/src/app/components/Twacode/Twacode.scss
@@ -91,36 +91,45 @@
background: rgba(0, 0, 0, 0);
}
.user_twacode {
- font-weight: 500;
- box-sizing: border-box;
- color: $black;
- height: 18px;
- text-transform: capitalize;
- border-radius: var(--default-border-radius);
- text-overflow: ellipsis;
- white-space: nowrap;
- display: inline-block;
- padding-right: 5px;
- margin-right: -2px;
- vertical-align: top;
- background: $primary_background;
- cursor: pointer;
-
- &:hover {
- color: $primary;
+ &.highlighted,
+ &.with_user.highlighted {
+ background: #fff455;
+ font-weight: 500;
+ box-sizing: border-box;
+ border-radius: var(--default-border-radius);
}
-
- .userimage {
- width: 16px;
- height: 16px;
+ &.with_user {
+ font-weight: 500;
+ box-sizing: border-box;
+ color: $black;
+ height: 18px;
+ text-transform: capitalize;
border-radius: var(--default-border-radius);
+ text-overflow: ellipsis;
+ white-space: nowrap;
display: inline-block;
+ padding-right: 5px;
+ margin-right: -2px;
vertical-align: top;
- background: $grey_light;
- margin: 1px;
- margin-right: 3px;
- background-size: cover;
- background-position: center;
+ background: $primary_background;
+ cursor: pointer;
+
+ &:hover {
+ color: $primary;
+ }
+
+ .userimage {
+ width: 16px;
+ height: 16px;
+ border-radius: var(--default-border-radius);
+ display: inline-block;
+ vertical-align: top;
+ background: $grey_light;
+ margin: 1px;
+ margin-right: 3px;
+ background-size: cover;
+ background-position: center;
+ }
}
}
.channel_twacode {
diff --git a/twake/frontend/src/app/components/Twacode/blocks/Chan.js b/twake/frontend/src/app/components/Twacode/blocks/Chan.js
index 37b497954f..7ba40dc4c1 100755
--- a/twake/frontend/src/app/components/Twacode/blocks/Chan.js
+++ b/twake/frontend/src/app/components/Twacode/blocks/Chan.js
@@ -1,6 +1,7 @@
import React, { Component } from 'react';
import Collections from 'services/Collections/Collections.js';
import Emojione from 'components/Emojione/Emojione.js';
+import ChannelsService from 'services/channels/channels.js';
export default class CHan extends React.Component {
render() {
@@ -10,7 +11,12 @@ export default class CHan extends React.Component {
var chan = Collections.get('channels').find(this.props.id);
return (
-
+
{
+ if (chan) ChannelsService.select(chan);
+ }}
+ >
{chan.name}
diff --git a/twake/frontend/src/app/components/Twacode/blocks/User.js b/twake/frontend/src/app/components/Twacode/blocks/User.js
index 909d2aaddd..e6e2eef959 100755
--- a/twake/frontend/src/app/components/Twacode/blocks/User.js
+++ b/twake/frontend/src/app/components/Twacode/blocks/User.js
@@ -13,14 +13,25 @@ export default class User extends React.Component {
Collections.get('users').removeListener(this);
}
render() {
+ const highlighted =
+ this.props.id == UserService.getCurrentUserId() ||
+ this.props.username == 'here' ||
+ this.props.username == 'all';
if (!this.props.id) {
- return
@{this.props.username} ;
+ return (
+
+ @{this.props.username}
+
+ );
}
var id = this.props.id;
var user = Collections.get('users').find(id);
if (user) {
return (
-
ChannelsService.openDiscussion([user.id])}>
+
ChannelsService.openDiscussion([user.id])}
+ >
@{this.props.username};
+ return (
+
+ @{this.props.username}
+
+ );
}
}
}
diff --git a/twake/frontend/src/app/components/constants.scss b/twake/frontend/src/app/components/constants.scss
index 689cb6483f..f1e3ffb673 100755
--- a/twake/frontend/src/app/components/constants.scss
+++ b/twake/frontend/src/app/components/constants.scss
@@ -24,6 +24,8 @@ $primary_background: #f3f2ff;*/
--pale-grey: #f5f5f7;
--default-border-radius: 3px;
--default-border-radius-large: 5px;
+ --green: #18af2c;
+ --red: #ff5154;
}
$primary: var(--primary);
@@ -39,8 +41,8 @@ $white: var(--white);
$grey_background: var(--grey-background);
-$green: #3dcc97;
-$red: #ff5154;
+$green: var(--green);
+$red: var(--red);
$yellow: #fed453;
$yellow_background: #fffbee;
diff --git a/twake/frontend/src/app/scenes/App/ChannelsBar/Channel.js b/twake/frontend/src/app/scenes/App/ChannelsBar/Channel.js
index 1876f4107f..d76390569e 100755
--- a/twake/frontend/src/app/scenes/App/ChannelsBar/Channel.js
+++ b/twake/frontend/src/app/scenes/App/ChannelsBar/Channel.js
@@ -75,12 +75,48 @@ export default class Channel extends Component {
menu.push({
type: 'menu',
- text: channel._user_muted
- ? Languages.t('scenes.app.channelsbar.remove_mute', [], 'Enlever la sourdine')
- : Languages.t('scenes.app.channelsbar.mute', [], 'Sourdine'),
+ text: 'Notifications...',
onClick: () => {
Notifications.mute(channel, !channel._user_muted);
},
+ submenu: [
+ {
+ type: 'title',
+ text: 'Get notifications on',
+ },
+ {
+ type: 'menu',
+ icon: channel._user_muted === 0 ? 'check' : null,
+ text: 'Any message',
+ onClick: () => {
+ Notifications.mute(channel, 0);
+ },
+ },
+ {
+ type: 'menu',
+ icon: channel._user_muted === 1 ? 'check' : null,
+ text: '@all, @here and @' + UserService.getCurrentUser().username,
+ onClick: () => {
+ Notifications.mute(channel, 1);
+ },
+ },
+ {
+ type: 'menu',
+ icon: channel._user_muted === 2 ? 'check' : null,
+ text: '@' + UserService.getCurrentUser().username + ' only',
+ onClick: () => {
+ Notifications.mute(channel, 2);
+ },
+ },
+ {
+ type: 'menu',
+ icon: channel._user_muted === 3 ? 'check' : null,
+ text: 'Nothing',
+ onClick: () => {
+ Notifications.mute(channel, 3);
+ },
+ },
+ ],
});
if (has_notification) {
@@ -104,27 +140,29 @@ export default class Channel extends Component {
/**
* Pinned channel preference
*/
- var pinned_channels_preferences =
- (
- ((Collections.get('users').find(UserService.getCurrentUserId()) || {})
- .workspaces_preferences || {})[Workspaces.currentWorkspaceId] || {}
- ).pinned_channels || {};
- if (!pinned_channels_preferences[channel.id]) {
- menu.push({
- type: 'menu',
- text: 'Star this channel',
- onClick: () => {
- ChannelsService.pinChannel(channel, true);
- },
- });
- } else {
- menu.push({
- type: 'menu',
- text: 'Unstar this channel',
- onClick: () => {
- ChannelsService.pinChannel(channel, false);
- },
- });
+ if (!channel.direct && !channel.app_id) {
+ var pinned_channels_preferences =
+ (
+ ((Collections.get('users').find(UserService.getCurrentUserId()) || {})
+ .workspaces_preferences || {})[Workspaces.currentWorkspaceId] || {}
+ ).pinned_channels || {};
+ if (!pinned_channels_preferences[channel.id]) {
+ menu.push({
+ type: 'menu',
+ text: Languages.t('scenes.apps.messages.left_bar.stream.star'),
+ onClick: () => {
+ ChannelsService.pinChannel(channel, true);
+ },
+ });
+ } else {
+ menu.push({
+ type: 'menu',
+ text: Languages.t('scenes.apps.messages.left_bar.stream.unstar'),
+ onClick: () => {
+ ChannelsService.pinChannel(channel, false);
+ },
+ });
+ }
}
if (!channel.direct && WorkspaceUserRights.hasWorkspacePrivilege()) {
@@ -255,6 +293,12 @@ export default class Channel extends Component {
Notifications.listenOnly(this, ['channel_' + channel.id]);
ChannelsService.updateBadge(channel);
+ let new_content_count = (Notifications.notification_by_channel[channel.id] || {}).count || 0;
+ let notifications_count = new_content_count;
+ if(channel._user_muted >= 1 && !channel._user_last_quoted_message_id){
+ notifications_count = 0;
+ }
+
return (
(this.node = node)}
@@ -267,7 +311,7 @@ export default class Channel extends Component {
appIndicator={this.mode == 'direct_app'}
notMember={this.mode == 'direct' && this.props.outOfWorkspace}
private={channel.private}
- muted={channel._user_muted}
+ muted={channel._user_muted >= 1}
favorite={this.props.pinned}
public={
(
@@ -276,7 +320,8 @@ export default class Channel extends Component {
.filter(userId => channel.private || !WorkspacesUser.isAutoAddUser(userId)) || []
).length
}
- notifications={(Notifications.notification_by_channel[channel.id] || {}).count || 0}
+ hasNewContent={new_content_count}
+ notifications={notifications_count}
selected={ChannelsService.currentChannelFrontId == this.props.channel.front_id}
dragData={this.props.channel}
onClick={evt => ChannelsService.select(this.props.channel)}
diff --git a/twake/frontend/src/app/scenes/App/ChannelsBar/ChannelTemplateEditor.js b/twake/frontend/src/app/scenes/App/ChannelsBar/ChannelTemplateEditor.js
index ae7b2863c8..e43bfddf70 100755
--- a/twake/frontend/src/app/scenes/App/ChannelsBar/ChannelTemplateEditor.js
+++ b/twake/frontend/src/app/scenes/App/ChannelsBar/ChannelTemplateEditor.js
@@ -135,8 +135,8 @@ export default class ChannelTemplateEditor extends Component {
type="button"
value={
this.state.channel.id
- ? Languages.t('scenes.app.channelsbar.save_channel_button', 'Save')
- : Languages.t('scenes.app.channelsbar.add_channel_button', 'Add')
+ ? Languages.t('general.save', 'Save')
+ : Languages.t('general.add', 'Add')
}
onClick={() => this.updateChan()}
/>
diff --git a/twake/frontend/src/app/scenes/App/ChannelsBar/ChannelsUser/ChannelsUser.js b/twake/frontend/src/app/scenes/App/ChannelsBar/ChannelsUser/ChannelsUser.js
index 6670ceb995..55a7419cc5 100755
--- a/twake/frontend/src/app/scenes/App/ChannelsBar/ChannelsUser/ChannelsUser.js
+++ b/twake/frontend/src/app/scenes/App/ChannelsBar/ChannelsUser/ChannelsUser.js
@@ -202,13 +202,17 @@ export default class ChannelsUser extends Component {
if (channel._user_last_message_increment - channel.messages_increment < 0) {
keep = true;
}
- if (this.membersInWorkspace(channel.members) && channel.messages_increment > 0) {
+ if (this.membersInWorkspace(channel.members) && channel.messages_increment > 1) {
+ //Remove if only first message
keep = true;
}
if (this.state.channels.currentChannelFrontId == channel.front_id) {
keep = true;
}
- if (channel._user_last_access > new Date().getTime() / 1000 - 7 * 24 * 60 * 60) {
+ if (
+ channel._user_last_access > new Date().getTime() / 1000 - 7 * 24 * 60 * 60 &&
+ channel.messages_increment > 1
+ ) {
keep = true;
}
return keep;
diff --git a/twake/frontend/src/app/scenes/App/MainView/MainView.js b/twake/frontend/src/app/scenes/App/MainView/MainView.js
index 8b34af24cf..ac5bf692f8 100755
--- a/twake/frontend/src/app/scenes/App/MainView/MainView.js
+++ b/twake/frontend/src/app/scenes/App/MainView/MainView.js
@@ -112,13 +112,13 @@ export default class MainView extends Component {
}
render() {
var current_side_channel = Collections.get('channels').findByFrontId(
- this.state.channels.currentSideChannelFrontId
+ this.state.channels.currentSideChannelFrontId,
);
var current_channel = Collections.get('channels').findByFrontId(
- this.state.channels.currentChannelFrontId
+ this.state.channels.currentChannelFrontId,
);
var current_channel_tab = Collections.get('channel_tabs').find(
- this.state.channels.current_tab_id
+ this.state.channels.current_tab_id,
);
if (this.state.channels.current_tab_id) {
@@ -129,7 +129,7 @@ export default class MainView extends Component {
) {
Collections.get('channel_tabs').completeObject(item);
current_channel_tab = Collections.get('channel_tabs').find(
- this.state.channels.current_tab_id
+ this.state.channels.current_tab_id,
);
return false;
}
@@ -143,7 +143,7 @@ export default class MainView extends Component {
{Languages.t(
'scenes.app.mainview.instruction_current_tab',
[],
- 'Commencez par sélectionner une chaîne sur votre gauche.'
+ 'Commencez par sélectionner une chaîne sur votre gauche.',
)}
@@ -206,7 +206,7 @@ export default class MainView extends Component {
{!!icon &&
}
{!!emoji &&
}
- {app.name}
+ {Languages.t('app.name.' + app.simple_name, [], app.name)}
{!!current_channel.private &&
}
diff --git a/twake/frontend/src/app/scenes/App/Popup/AddUser/AddUser.js b/twake/frontend/src/app/scenes/App/Popup/AddUser/AddUser.js
index 727585435e..7c0704a897 100755
--- a/twake/frontend/src/app/scenes/App/Popup/AddUser/AddUser.js
+++ b/twake/frontend/src/app/scenes/App/Popup/AddUser/AddUser.js
@@ -176,15 +176,6 @@ export default class AddUser extends Component {
}}
className="full_width medium"
/>
- this.onChangeMail({ externe: state ? '1' : '0' }, index)}
- />
);
}
@@ -233,11 +224,11 @@ export default class AddUser extends Component {
(this.state.all_import && this.state.multi)
)
? this.state.i18n.t(
- 'scenes.apps.parameters.group_sections.managers.invite_manager_button_skip',
- 'Skip',
+ 'scenes.apps.parameters.group_sections.managers.invite_manager_button_skip',
+ 'Skip',
)
: this.state.i18n.t(
- 'scenes.apps.parameters.group_sections.managers.invite_manager_button',
+ 'general.add',
)
}
loading={this.state.workspacesUsersService.loading || this.props.loading}
diff --git a/twake/frontend/src/app/scenes/App/Popup/AppsParameters/AppsParameters.js b/twake/frontend/src/app/scenes/App/Popup/AppsParameters/AppsParameters.js
index cb81fd32c7..878fb60429 100755
--- a/twake/frontend/src/app/scenes/App/Popup/AppsParameters/AppsParameters.js
+++ b/twake/frontend/src/app/scenes/App/Popup/AppsParameters/AppsParameters.js
@@ -8,6 +8,7 @@ import popupManager from 'services/popupManager/popupManager.js';
import userService from 'services/user/user.js';
import currentUserService from 'services/user/current_user.js';
import WorkspaceApps from './Pages/WorkspaceApps.js';
+import WorkspaceAppsInformations from './Pages/WorkspaceAppsInformations.js';
import TwacodeTester from './Pages/TwacodeTester.js';
import MenuList from 'components/Menus/MenuComponent.js';
import './AppsParameters.scss';
@@ -48,11 +49,13 @@ export default class AppsParameters extends Component {
Collections.get('users').removeListener(this);
}
displayScene() {
- if (this.state.page == 1) {
- return ;
- }
- if (this.state.page == 2) {
- return ;
+ switch (this.state.page) {
+ case 1:
+ return ;
+ case 2:
+ return ;
+ case 3:
+ return ;
}
}
@@ -71,7 +74,7 @@ export default class AppsParameters extends Component {
text: Languages.t(
'scenes.app.popup.workspaceparameter.pages.your_apps_label',
[],
- 'Vos applications'
+ 'Vos applications',
),
emoji: ':control_knobs:',
selected: this.state.page == 1,
@@ -79,11 +82,18 @@ export default class AppsParameters extends Component {
},
{
type: 'menu',
- text: 'Twacode tester',
- emoji: ':love_letter:',
+ text: 'Basic informations',
+ emoji: ':information_source:',
selected: this.state.page == 2,
onClick: () => this.setPage(2),
},
+ {
+ type: 'menu',
+ text: 'Twacode tester',
+ emoji: ':love_letter:',
+ selected: this.state.page == 3,
+ onClick: () => this.setPage(3),
+ },
{
type: 'menu',
text: Languages.t('general.back', [], 'Retour'),
diff --git a/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/Pages.scss b/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/Pages.scss
index 3be674dd8a..e1de60b1f9 100755
--- a/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/Pages.scss
+++ b/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/Pages.scss
@@ -144,9 +144,7 @@
box-shadow: 0 0 15px rgba(0, 0, 0, 0.3);
margin: 15px;
margin-top: 0px;
- background: #555;
border-radius: var(--default-border-radius-large);
- color: #fff;
padding: 15px;
}
diff --git a/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/TwacodeTester.js b/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/TwacodeTester.js
index 47768e40e9..edf8374f35 100755
--- a/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/TwacodeTester.js
+++ b/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/TwacodeTester.js
@@ -26,7 +26,7 @@ export default class TwacodeTester extends Component {
content: Languages.t(
'scenes.app.popup.appsparameters.pages.call_event_handlers',
['interactive_action', id, +JSON.stringify(passives)],
- "Gestionnaire d'événement d'appels de type $1 et d'événement '$2', avec les passifs : $3"
+ "Event of type '$1' and id '$2' with passives '$3'"
),
});
this.setState({});
@@ -67,7 +67,7 @@ export default class TwacodeTester extends Component {
className={
this.state.display_json_error
? Languages.t('scenes.app.popup.appsparameters.pages.error_user_code', [], 'erreur')
- : Languages.t('scenes.app.popup.appsparameters.pages.ok_user_code', [], '')
+ : Languages.t('scenes.app.popup.appsparameters.pages.ok_user_code', [], 'ok')
}
onChange={evt => {
try {
diff --git a/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/WorkspaceApps.js b/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/WorkspaceApps.js
index fc82437095..b2e0c83aaa 100755
--- a/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/WorkspaceApps.js
+++ b/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/WorkspaceApps.js
@@ -12,6 +12,7 @@ import EditIcon from '@material-ui/icons/MoreHorizOutlined';
import Switch from 'components/Inputs/Switch.js';
import WorkspaceUserRights from 'services/workspaces/workspace_user_rights.js';
import Button from 'components/Buttons/Button.js';
+import Icon from 'components/Icon/Icon.js';
import WorkspaceAppsEditor from './WorkspaceAppsEditor.js';
import Api from 'services/api.js';
@@ -58,7 +59,7 @@ export default class WorkspaceApps extends Component {
Collections.get('applications').notify();
}
- }
+ },
);
}
@@ -73,7 +74,7 @@ export default class WorkspaceApps extends Component {
text: Languages.t(
'scenes.app.popup.appsparameters.pages.button_force',
[],
- "Forcer dans toute l'entreprise"
+ "Forcer dans toute l'entreprise",
),
onClick: () => {
AlertManager.confirm(() => WorkspacesApps.forceInEntreprise(app.id));
@@ -88,7 +89,7 @@ export default class WorkspaceApps extends Component {
label={Languages.t(
'scenes.app.popup.appsparameters.pages.automatique_label',
[],
- 'Automatique'
+ 'Automatique',
)}
value={ga.workspace_default}
onChange={state =>
@@ -104,7 +105,7 @@ export default class WorkspaceApps extends Component {
text: Languages.t(
'scenes.app.popup.appsparameters.pages.automatique_option_information',
[],
- "Si vous activez 'Automatique', cette application sera automatiquement ajoutée dans les prochains espaces de travail de cette entreprise."
+ "Si vous activez 'Automatique', cette application sera automatiquement ajoutée dans les prochains espaces de travail de cette entreprise.",
),
},
{ type: 'separator' },
@@ -116,7 +117,7 @@ export default class WorkspaceApps extends Component {
text: Languages.t(
'scenes.app.popup.appsparameters.pages.remove_app_from_workspace',
[],
- "Supprimer de l'espace"
+ "Supprimer de l'espace",
),
className: 'error',
onClick: () => {
@@ -130,7 +131,7 @@ export default class WorkspaceApps extends Component {
text: Languages.t(
'scenes.app.popup.appsparameters.pages.remove_app_from_company',
[],
- "Supprimer de toute l'entreprise"
+ "Supprimer de toute l'entreprise",
),
className: 'error',
onClick: () => {
@@ -165,10 +166,10 @@ export default class WorkspaceApps extends Component {
.filter(item => item.available_categories);
var workspaces_app_ids = Object.keys(
- WorkspacesApps.apps_by_workspace[workspaceService.currentWorkspaceId]
+ WorkspacesApps.apps_by_workspace[workspaceService.currentWorkspaceId],
);
var workspace_apps = workspaces_app_ids.map(
- id => WorkspacesApps.apps_by_workspace[workspaceService.currentWorkspaceId][id]
+ id => WorkspacesApps.apps_by_workspace[workspaceService.currentWorkspaceId][id],
);
var group_apps = Object.keys(WorkspacesApps.apps_by_group[workspaceService.currentGroupId])
.filter(id => workspaces_app_ids.indexOf(id) < 0)
@@ -182,7 +183,7 @@ export default class WorkspaceApps extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.apps_title',
[],
- 'Vos applications et connecteurs'
+ 'Vos applications et connecteurs',
)}
@@ -192,7 +193,7 @@ export default class WorkspaceApps extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.developped_apps_subtitle',
[],
- "Applications développées par l'entreprise"
+ "Applications développées par l'entreprise",
)}
@@ -200,7 +201,7 @@ export default class WorkspaceApps extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.apps_connectors_small_text',
[],
- 'Créez et administrez vos applications et connecteurs.'
+ 'Créez et administrez vos applications et connecteurs.',
)}
@@ -215,7 +216,7 @@ export default class WorkspaceApps extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.current_informations_apps_connectors',
[],
- "Vous n'avez pas créé d'application pour le moment. Avant de créer une application ou un connecteur, vérifiez que celle-ci n'existe pas déjà dans notre marché d'applications."
+ "Vous n'avez pas créé d'application pour le moment. Avant de créer une application ou un connecteur, vérifiez que celle-ci n'existe pas déjà dans notre marché d'applications.",
)}
)}
@@ -227,18 +228,16 @@ export default class WorkspaceApps extends Component {
title: Languages.t(
'scenes.app.popup.appsparameters.pages.application_title',
[],
- 'Application'
+ 'Application',
),
dataIndex: 'name',
render: row => {
return (
-
{row.name} ({row.app_group_name ? row.app_group_name + '.' : ''}
@@ -252,7 +251,7 @@ export default class WorkspaceApps extends Component {
title: Languages.t(
'scenes.app.popup.appsparameters.pages.status_tilte',
[],
- 'État'
+ 'État',
),
width: 140,
dataIndex: 'public',
@@ -264,7 +263,7 @@ export default class WorkspaceApps extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.interne_availability_application',
[],
- 'Application interne'
+ 'Application interne',
)}
)}
@@ -273,7 +272,7 @@ export default class WorkspaceApps extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.waiting_availability_application',
[],
- 'En attente...'
+ 'En attente...',
)}
)}
@@ -282,7 +281,7 @@ export default class WorkspaceApps extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.public_availability_application',
[],
- 'Application publique'
+ 'Application publique',
)}
)}
@@ -294,7 +293,7 @@ export default class WorkspaceApps extends Component {
title: Languages.t(
'scenes.app.popup.appsparameters.pages.installation',
[],
- 'Instal.'
+ 'Instal.',
),
titleStyle: { textAlign: 'right' },
width: 60,
@@ -321,7 +320,7 @@ export default class WorkspaceApps extends Component {
value={Languages.t(
'scenes.app.popup.appsparameters.pages.show_button',
[],
- 'Afficher'
+ 'Afficher',
)}
style={{ marginTop: 0, width: 'auto' }}
onClick={() => {
@@ -342,7 +341,7 @@ export default class WorkspaceApps extends Component {
value={Languages.t(
'scenes.app.popup.appsparameters.pages.create_app_button',
[],
- 'Créer une application'
+ 'Créer une application',
)}
onClick={() => {
this.setState({ edit_app_id: 'new' });
diff --git a/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/WorkspaceAppsCreator.js b/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/WorkspaceAppsCreator.js
index 3606840447..102411a00d 100755
--- a/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/WorkspaceAppsCreator.js
+++ b/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/WorkspaceAppsCreator.js
@@ -74,31 +74,23 @@ export default class WorkspaceAppsCreator extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.new_app_title',
[],
- 'Nouvelle application'
+ 'Nouvelle application',
)}
-
- {' '}
- {Languages.t(
- 'scenes.app.popup.appsparameters.pages.creation_app_instruction',
- [],
- 'Veuillez confirmer les informations suivantes avant de créer votre application.'
- )}
-
-
{Languages.t(
'scenes.app.popup.appsparameters.pages.app_name_label',
- 'Application name'
+ 'Application name',
)}
-
-
- {Languages.t(
- 'scenes.app.popup.appsparameters.pages.app_surname',
- [],
- 'Nom simplifié de votre application'
- )}
-
-
- {Languages.t(
- 'scenes.app.popup.appsparameters.pages.app_informations',
- [],
- "Cette chaine de caractère permet d'identifier votre application et sera utilisée dans les commandes de message."
- )}
-
-
{
- var simple = this.convertToSimpleName(ev.target.value);
- this.state.new_app_simple_name_modified =
- simple != this.convertToSimpleName(this.state.new_app_name);
- this.setState({ new_app_simple_name: simple });
- }}
- />
{this.state.error_simple_name && (
{Languages.t(
'scenes.app.popup.appsparameters.pages.error_message',
[],
- 'Ce nom est déjà utilisé par une autre application, veuillez en choisir un autre.'
+ 'Ce nom est déjà utilisé par une autre application, veuillez en choisir un autre.',
)}
)}
@@ -158,56 +119,17 @@ export default class WorkspaceAppsCreator extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.company_label',
[],
- 'Entreprise propriétaire'
+ 'Entreprise propriétaire',
)}
{Languages.t(
'scenes.app.popup.appsparameters.pages.app_modification_right',
[],
- 'Tous les gérants de cette entreprise pourront modifier cette application.'
- )}
-
-
-
-
- {Languages.t(
- 'scenes.app.popup.appsparameters.pages.user_grp_app',
- [],
- "Groupe d'applications (laisser vide si non utilisé)"
- )}
-
-
- {Languages.t(
- 'scenes.app.popup.appsparameters.pages.information_grp_of_app',
- [],
- "Cette chaine de caractère permet de grouper cette application avec d'autres applications du même type."
- )}
-
- {Languages.t(
- 'scenes.app.popup.appsparameters.pages.divided_connector',
- [],
- 'Si votre connecteur se divise en plusieurs modules optionnels, créez une application par module et regroupez les grâce à ce champ.'
- )}
-
-
-
- {' '}
- {Languages.t(
- 'scenes.app.popup.appsparameters.pages.warning_futur_modification',
- [],
- 'Attention, ce champ ne peut pas être modifié ultérieurement.'
+ 'Tous les gérants de cette entreprise pourront modifier cette application.',
)}
-
- this.setState({ new_app_group_name: this.convertToSimpleName(ev.target.value) })
- }
- />
+
@@ -217,7 +139,7 @@ export default class WorkspaceAppsCreator extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.error_check_needed',
[],
- 'Une erreur est survenue, vérifiez vos informations.'
+ 'Une erreur est survenue, vérifiez vos informations.',
)}
)}
@@ -236,7 +158,7 @@ export default class WorkspaceAppsCreator extends Component {
value={Languages.t(
'scenes.app.popup.appsparameters.pages.create_my_app',
[],
- 'Créer mon application'
+ 'Créer mon application',
)}
disabled={this.state.loading}
loading={this.state.loading}
diff --git a/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/WorkspaceAppsEditor.js b/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/WorkspaceAppsEditor.js
index 14370a9e86..3bea0856bc 100755
--- a/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/WorkspaceAppsEditor.js
+++ b/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/WorkspaceAppsEditor.js
@@ -12,10 +12,14 @@ import WorkspaceAppsCreator from './WorkspaceAppsCreator.js';
import Switch from 'components/Inputs/Switch.js';
import AutoHeight from 'components/AutoHeight/AutoHeight.js';
import TagPicker from 'components/TagPicker/TagPicker.js';
+import Icon from 'components/Icon/Icon.js';
import InputWithClipBoard from 'components/InputWithClipBoard/InputWithClipBoard.js';
import Input from 'components/Inputs/Input.js';
+import InlineTagPicker from 'app/components/InlineTagPicker/InlineTagPicker';
import './Pages.scss';
+import WorkspacesApp from 'services/workspaces/workspaces_apps.js';
+import WorkspaceApps from './WorkspaceApps.js';
export default class WorkspaceAppsEditor extends Component {
constructor(props) {
@@ -61,9 +65,9 @@ export default class WorkspaceAppsEditor extends Component {
text: Languages.t(
'scenes.app.popup.appsparameters.pages.app_update',
[this.state.application.name, this.state.application.install_count || 0],
- "Mettre à jour l'application $1 (application est utilisée $2 fois.)"
+ "Mettre à jour l'application $1 (l'application est utilisée $2 fois.)"
),
- }
+ },
);
} else {
saveApp();
@@ -93,9 +97,9 @@ export default class WorkspaceAppsEditor extends Component {
text: Languages.t(
'scenes.app.popup.appsparameters.pages.remove_app',
[this.state.application.name],
- "Supprimer l'application $1 définitivement."
+ "Supprimer l'application $1 définitivement.",
),
- }
+ },
);
}
@@ -111,7 +115,7 @@ export default class WorkspaceAppsEditor extends Component {
render() {
if (this.state.application.id != this.state.id) {
this.state.application = JSON.parse(
- JSON.stringify(Collections.get('applications').find(this.state.id) || {})
+ JSON.stringify(Collections.get('applications').find(this.state.id) || {}),
);
}
@@ -138,19 +142,17 @@ export default class WorkspaceAppsEditor extends Component {
return (
If you do not know how to fill these, go to{' '}
-
+
the Twake API documentation
{' '}
!
@@ -162,7 +164,7 @@ export default class WorkspaceAppsEditor extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.alert_published_app',
[],
- 'Votre application est publiée, vous ne pouvez pas la modifier.'
+ 'Votre application est publiée, vous ne pouvez pas la modifier.',
)}
)}
@@ -172,12 +174,12 @@ export default class WorkspaceAppsEditor extends Component {
label={Languages.t(
'scenes.app.popup.appsparameters.pages._app_identity',
[],
- "Identité de l'application"
+ "Identité de l'application",
)}
description={Languages.t(
'scenes.app.popup.appsparameters.pages.modify_public_data',
[],
- 'Modifier les données publiques de votre application.'
+ 'Modifier les données publiques de votre application.',
)}
>
@@ -186,7 +188,7 @@ export default class WorkspaceAppsEditor extends Component {
placeholder={Languages.t(
'scenes.app.popup.appsparameters.pages.amazing_app_name',
[],
- 'My amazing app'
+ 'My amazing app',
)}
type="text"
disabled={this.state.loading || public_lock}
@@ -201,14 +203,14 @@ export default class WorkspaceAppsEditor extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.grp_section_surname_label',
[],
- 'Nom simplifié'
+ 'Nom simplifié',
)}
{Languages.t(
'scenes.app.popup.appsparameters.pages.string_information',
[],
- "Cette chaine de caractère permet d'identifier votre application et sera utilisée dans les commandes de message."
+ "Cette chaine de caractère permet d'identifier votre application et sera utilisée dans les commandes de message.",
)}
)}
- {Languages.t(
- 'scenes.app.popup.appsparameters.pages.app_grp_label',
- [],
- "Groupe d'applications"
- )}
+ {Languages.t('scenes.app.popup.appsparameters.pages.icon', 'icon')}
-
-
-
Icône
{Languages.t(
'scenes.app.popup.appsparameters.pages.optimal_format',
[],
- 'Format optimal : 48x48px.'
+ 'Format optimal : 48x48px.',
)}
-
-
- {Languages.t(
- 'scenes.app.popup.appsparameters.pages.categories_label',
- [],
- 'Catégories'
- )}
-
{
@@ -327,12 +314,12 @@ export default class WorkspaceAppsEditor extends Component {
label={Languages.t(
'scenes.app.popup.appsparameters.pages.api_parameters_label',
[],
- "Paramètres de l'API"
+ "Paramètres de l'API",
)}
description={Languages.t(
'scenes.app.popup.appsparameters.pages.api_data_description',
[],
- "Données utiles pour l'API Twake."
+ "Données utiles pour l'API Twake.",
)}
>
@@ -340,7 +327,7 @@ export default class WorkspaceAppsEditor extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.public_login_label',
[],
- 'Identifiant public'
+ 'Identifiant public',
)}
@@ -370,7 +357,7 @@ export default class WorkspaceAppsEditor extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.url_reception_events_label',
[],
- 'Url de reception des évènements'
+ 'Url de reception des évènements',
)}
{Languages.t(
'scenes.app.popup.appsparameters.pages.filter_information',
[],
- "Ce filtre permet de limiter l'utilisation de votre clé API aux serveurs de votre connecteur uniquement."
+ "Ce filtre permet de limiter l'utilisation de votre clé API aux serveurs de votre connecteur uniquement.",
)}
{Languages.t(
'scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method',
[],
- 'Utilisez * en développement pour autorisé toutes les adresses IP.'
+ 'Utilisez * en développement pour autorisé toutes les adresses IP.',
)}
@@ -436,7 +423,7 @@ export default class WorkspaceAppsEditor extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.configuration_label',
[],
- 'Configuration'
+ 'Configuration',
)}
@@ -444,7 +431,7 @@ export default class WorkspaceAppsEditor extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.json_configuration_information',
[],
- 'Rendez-vous sur la documentation afin de générer votre configuration au format JSON.'
+ 'Rendez-vous sur la documentation afin de générer votre configuration au format JSON.',
)}
@@ -487,66 +474,40 @@ export default class WorkspaceAppsEditor extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.write_privileges_label',
[],
- 'Privilèges en écriture'
+ 'Privilèges en écriture',
)}
- {
- return { name: item.id || item, id: item.id || item };
- })}
- value={(application.capabilities || []).map(item => {
- return { name: item.id || item, id: item.id || item };
- })}
- onChange={values => {
- application.capabilities = values.map(item =>
- typeof item == 'string' ? item : item.id
- );
+ {
+ application.capabilities = items;
this.setState({});
}}
/>
-
{Languages.t(
'scenes.app.popup.appsparameters.pages.read_privileges_label',
[],
- 'Privilèges en lecture'
+ 'Privilèges en lecture',
)}
- {
- return { name: item.id || item, id: item.id || item };
- })}
- value={(application.privileges || []).map(item => {
- return { name: item.id || item, id: item.id || item };
- })}
- onChange={values => {
- application.privileges = values.map(item =>
- typeof item == 'string' ? item : item.id
- );
+ {
+ application.privileges = items;
this.setState({});
}}
/>
-
Hooks
- {
- return { name: item.id || item, id: item.id || item };
- })}
- value={(application.hooks || []).map(item => {
- return { name: item.id || item, id: item.id || item };
- })}
- onChange={values => {
- application.hooks = values.map(item =>
- typeof item == 'string' ? item : item.id
- );
+ {
+ application.hooks = items;
this.setState({});
}}
/>
@@ -559,12 +520,12 @@ export default class WorkspaceAppsEditor extends Component {
label={Languages.t(
'scenes.app.popup.appsparameters.pages.publication_label',
[],
- 'Publication'
+ 'Publication',
)}
description={Languages.t(
'scenes.app.popup.appsparameters.pages.publication_description',
[],
- 'Déterminez la visibilité de votre application.'
+ 'Déterminez la visibilité de votre application.',
)}
>
@@ -572,7 +533,7 @@ export default class WorkspaceAppsEditor extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.parameters_form_small_text',
[],
- "L'application non publiée ne fonctionnera que dans votre entreprise, si vous souhaitez la rendre disponible à tous les utilisateurs de Twake activez cette option."
+ "L'application non publiée ne fonctionnera que dans votre entreprise, si vous souhaitez la rendre disponible à tous les utilisateurs de Twake activez cette option.",
)}
@@ -582,7 +543,7 @@ export default class WorkspaceAppsEditor extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.available_publication_alert',
[],
- 'La publication de votre application est actuellement en attente de validation par les équipes de Twake.'
+ 'La publication de votre application est actuellement en attente de validation par les équipes de Twake.',
)}
)}
@@ -591,7 +552,7 @@ export default class WorkspaceAppsEditor extends Component {
label={Languages.t(
'scenes.app.popup.appsparameters.pages.publish_app_label',
[],
- "Publier l'application"
+ "Publier l'application",
)}
value={application.public}
onChange={value => {
@@ -608,12 +569,12 @@ export default class WorkspaceAppsEditor extends Component {
label={Languages.t(
'scenes.app.popup.appsparameters.pages.danger_zone_label',
[],
- 'Zone dangereuse'
+ 'Zone dangereuse',
)}
description={Languages.t(
'scenes.app.popup.appsparameters.pages.danger_zone_description',
[],
- "Supprimez l'application."
+ "Supprimez l'application.",
)}
>
@@ -621,7 +582,7 @@ export default class WorkspaceAppsEditor extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.danger_zone_small_text',
[],
- 'Vous ne pouvez pas supprimer cette application si elle est publiée.'
+ 'Vous ne pouvez pas supprimer cette application si elle est publiée.',
)}
@@ -630,7 +591,7 @@ export default class WorkspaceAppsEditor extends Component {
value={Languages.t(
'scenes.app.popup.appsparameters.pages.remove_app_button',
[],
- "Supprimer l'application"
+ "Supprimer l'application",
)}
disabled={this.state.loading || public_lock}
loading={this.state.loading}
@@ -647,7 +608,7 @@ export default class WorkspaceAppsEditor extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.error_app_simple_name_message',
[],
- 'Le nom simplifié de votre application est déjà utilisé par une autre application, veuillez le changer.'
+ 'Le nom simplifié de votre application est déjà utilisé par une autre application, veuillez le changer.',
)}
)}
@@ -657,14 +618,14 @@ export default class WorkspaceAppsEditor extends Component {
{Languages.t(
'scenes.app.popup.appsparameters.pages.error_app_update_message',
[],
- "Une erreur s'est produite lors de la mise à jour de l'application."
+ "Une erreur s'est produite lors de la mise à jour de l'application.",
)}
)}
{
this.props.exit();
@@ -676,7 +637,7 @@ export default class WorkspaceAppsEditor extends Component {
value={Languages.t(
'scenes.app.popup.appsparameters.pages.update_button',
[],
- 'Mettre à jour'
+ 'Mettre à jour',
)}
disabled={this.state.loading}
loading={this.state.loading}
diff --git a/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/WorkspaceAppsInformations.js b/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/WorkspaceAppsInformations.js
new file mode 100644
index 0000000000..254ee1a1e9
--- /dev/null
+++ b/twake/frontend/src/app/scenes/App/Popup/AppsParameters/Pages/WorkspaceAppsInformations.js
@@ -0,0 +1,54 @@
+import React, { Component } from 'react';
+
+import Languages from 'services/languages/languages.js';
+import InputWithClipBoard from 'components/InputWithClipBoard/InputWithClipBoard.js';
+import workspaceService from 'services/workspaces/workspaces.js';
+import userService from 'services/user/user.js';
+import './Pages.scss';
+
+export default class WorkspaceAppsInformations extends Component {
+ render() {
+ return (
+
+
+ {Languages.t(
+ 'scenes.app.popup.appsparameters.pages.title_informations',
+ 'Basic informations',
+ )}
+
+
+
+ {Languages.t(
+ 'scenes.app.popup.appsparameters.pages.subtitle_informations',
+ 'Informations related to applications management',
+ )}
+
+
+
+ {Languages.t(
+ 'scenes.app.popup.appsparameters.pages.smalltext_user_id',
+ 'Current user id',
+ )}
+
+
+
+
+ {Languages.t(
+ 'scenes.app.popup.appsparameters.pages.smalltext_workspace_id',
+ 'Current workspace id',
+ )}
+
+
+
+
+ {Languages.t(
+ 'scenes.app.popup.appsparameters.pages.smalltext_group_id',
+ 'Current group id',
+ )}
+
+
+
+
+ );
+ }
+}
diff --git a/twake/frontend/src/app/scenes/App/Popup/UserParameter/UserParameter.js b/twake/frontend/src/app/scenes/App/Popup/UserParameter/UserParameter.js
index dd308dec9b..f7e67f4852 100755
--- a/twake/frontend/src/app/scenes/App/Popup/UserParameter/UserParameter.js
+++ b/twake/frontend/src/app/scenes/App/Popup/UserParameter/UserParameter.js
@@ -212,7 +212,7 @@ export default class UserParameter extends Component {
Español
English
Français
- 中国
+ 日本語
Русский
diff --git a/twake/frontend/src/app/scenes/App/Popup/WorkspaceParameter/Pages/WorkspaceApps.js b/twake/frontend/src/app/scenes/App/Popup/WorkspaceParameter/Pages/WorkspaceApps.js
index 219a80a6d1..2d8a4c1300 100755
--- a/twake/frontend/src/app/scenes/App/Popup/WorkspaceParameter/Pages/WorkspaceApps.js
+++ b/twake/frontend/src/app/scenes/App/Popup/WorkspaceParameter/Pages/WorkspaceApps.js
@@ -21,6 +21,7 @@ import WorkspaceAppsSearch from './WorkspaceAppsSearch.js';
import Loader from 'components/Loader/Loader.js';
import './Pages.scss';
+import Icon from 'components/Icon/Icon.js';
export default class WorkspaceApps extends Component {
constructor(props) {
@@ -216,14 +217,13 @@ export default class WorkspaceApps extends Component {
title: 'Application',
dataIndex: 'name',
render: row => {
+ var icon = row.icon_url;
return (
-
{row.name} ({row.app_group_name ? row.app_group_name + '.' : ''}
@@ -397,16 +397,10 @@ export default class WorkspaceApps extends Component {
0}
- label={Languages.t(
- 'scenes.app.popup.workspaceparameter.pages.your_apps_label',
- [],
- 'Vos applications',
- )}
+ autoOpen={true}
description={Languages.t(
- 'scenes.app.popup.workspaceparameter.pages.your_apps_description',
- [],
- 'Créez et administrez vos applications et connecteurs.',
+ 'scenes.app.popup.appsparameters.pages.apps_connectors_small_text',
+ 'Gérer vos applications et connecteurs.',
)}
>
diff --git a/twake/frontend/src/app/scenes/App/Popup/WorkspaceParameter/Pages/WorkspaceAppsSearch.js b/twake/frontend/src/app/scenes/App/Popup/WorkspaceParameter/Pages/WorkspaceAppsSearch.js
index fcf0219c34..40352e52b0 100755
--- a/twake/frontend/src/app/scenes/App/Popup/WorkspaceParameter/Pages/WorkspaceAppsSearch.js
+++ b/twake/frontend/src/app/scenes/App/Popup/WorkspaceParameter/Pages/WorkspaceAppsSearch.js
@@ -10,6 +10,7 @@ import InputIcon from 'components/Inputs/InputIcon.js';
import PseudoMarkdownCompiler from 'services/Twacode/pseudoMarkdownCompiler.js';
import TagPicker from 'components/TagPicker/TagPicker.js';
import WorkspacesApps from 'services/workspaces/workspaces_apps.js';
+import Icon from 'components/Icon/Icon.js';
import './Pages.scss';
@@ -63,11 +64,10 @@ export default class WorkspaceAppsSearch extends Component {
return list.map(item => {
return (
-
diff --git a/twake/frontend/src/app/scenes/App/Popup/WorkspaceParameter/Pages/WorkspaceIdentity.js b/twake/frontend/src/app/scenes/App/Popup/WorkspaceParameter/Pages/WorkspaceIdentity.js
index 4bbcbdbc51..337de83f94 100755
--- a/twake/frontend/src/app/scenes/App/Popup/WorkspaceParameter/Pages/WorkspaceIdentity.js
+++ b/twake/frontend/src/app/scenes/App/Popup/WorkspaceParameter/Pages/WorkspaceIdentity.js
@@ -178,7 +178,7 @@ export default class WorkspaceIdentity extends Component {
}}
>
{Languages.t(
- 'scenes.app.popup.workspaceparameter.pages.remove_button',
+ 'general.delete',
[],
'Supprimer'
)}
diff --git a/twake/frontend/src/app/scenes/App/WorkspacesBar/Components/Group.js b/twake/frontend/src/app/scenes/App/WorkspacesBar/Components/Group.js
index 7851a55529..a704a952f9 100755
--- a/twake/frontend/src/app/scenes/App/WorkspacesBar/Components/Group.js
+++ b/twake/frontend/src/app/scenes/App/WorkspacesBar/Components/Group.js
@@ -71,7 +71,7 @@ export default class Group extends Component {
text: Languages.t(
'scenes.app.workspacesbar.components.change_company_title',
[],
- 'Changer de company'
+ 'Change company',
),
});
Groups.getOrderedGroups().map(item => {
@@ -82,7 +82,7 @@ export default class Group extends Component {
text: Languages.t(
'scenes.app.workspacesbar.components.create_company_menu',
[],
- 'Créer une entreprise'
+ 'Créer une entreprise',
),
icon: 'plus',
onClick: () => {
@@ -96,7 +96,7 @@ export default class Group extends Component {
text: Languages.t(
'scenes.app.workspacesbar.components.grp_parameters',
[group.name],
- 'Paramètres de $1'
+ 'Paramètres de $1',
),
onClick: () => {
popupManager.open(
, true, 'workspace_parameters');
diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/Calendar.js b/twake/frontend/src/app/scenes/Apps/Calendar/Calendar.js
index 5de74812ae..4946620d01 100755
--- a/twake/frontend/src/app/scenes/Apps/Calendar/Calendar.js
+++ b/twake/frontend/src/app/scenes/Apps/Calendar/Calendar.js
@@ -271,7 +271,7 @@ export default class Calendar extends Component {
{
type: 'menu',
className: 'error',
- text: Languages.t('scenes.apps.calendar.remove_calendar_menu', [], 'Supprimer'),
+ text: Languages.t('general.delete', [], 'Supprimer'),
onClick: () => {
AlertManager.confirm(
() => {
diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/CalendarEditor.js b/twake/frontend/src/app/scenes/Apps/Calendar/Modals/CalendarEditor.js
index 5ede5474b6..41eb9aa742 100755
--- a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/CalendarEditor.js
+++ b/twake/frontend/src/app/scenes/Apps/Calendar/Modals/CalendarEditor.js
@@ -47,8 +47,8 @@ export default class CalendarEditor extends Component {
type="button"
value={
this.state.calendar.id
- ? Languages.t('scenes.apps.calendar.modals.save_button', [], 'Enregistrer')
- : Languages.t('scenes.apps.calendar.modals.add_button', [], 'Ajouter')
+ ? Languages.t('general.save', [], 'Enregistrer')
+ : Languages.t('general.add', [], 'Ajouter')
}
onClick={() => this.save()}
/>
diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventCreation.js b/twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventCreation.js
index 6f0dfca395..1bbd2241a1 100755
--- a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventCreation.js
+++ b/twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventCreation.js
@@ -183,7 +183,7 @@ export default class EventCreation extends Component {
this.save();
}}
>
- {Languages.t('scenes.apps.calendar.modals.save_button', [], 'Enregistrer')}
+ {Languages.t('general.save', [], 'Enregistrer')}
);
diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventModification.js b/twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventModification.js
index 933f9611d2..5cfaa2bab5 100755
--- a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventModification.js
+++ b/twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventModification.js
@@ -227,7 +227,7 @@ export default class EventModification extends Component {
this.save();
}}
>
- {Languages.t('scenes.apps.calendar.modals.save_event_button', [], 'Enregistrer')}
+ {Languages.t('general.save', [], 'Enregistrer')}
diff --git a/twake/frontend/src/app/scenes/Apps/Drive/PathElement.js b/twake/frontend/src/app/scenes/Apps/Drive/PathElement.js
index 8776dc98bc..2236613c65 100755
--- a/twake/frontend/src/app/scenes/Apps/Drive/PathElement.js
+++ b/twake/frontend/src/app/scenes/Apps/Drive/PathElement.js
@@ -7,6 +7,7 @@ import DriveService from 'services/Apps/Drive/Drive.js';
import SelectionsManager from 'services/SelectionsManager/SelectionsManager.js';
import Collections from 'services/Collections/Collections.js';
import Emojione from 'components/Emojione/Emojione.js';
+import Languages from 'services/languages/languages.js';
export default class PathElement extends DriveElement {
dropFile(data, directory) {
@@ -86,7 +87,7 @@ export default class PathElement extends DriveElement {
{directory.parent_id && directory.parent_id != 'trash'
? directory.name
: this.props.inTrash
- ? 'Trash'
+ ? Languages.t('scenes.apps.drive.trash', [], 'Trash')
: workspace.name}
{directory.application_id && app.name && ({app.name}) }
diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Message.js b/twake/frontend/src/app/scenes/Apps/Messages/Message/Message.js
index 7ad7cbc074..136eece80f 100755
--- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Message.js
+++ b/twake/frontend/src/app/scenes/Apps/Messages/Message/Message.js
@@ -169,13 +169,15 @@ export default class Message extends Component {
var isFirstNewMessage = this.props.message.creation_date > this.props.unreadAfter;
+ const creation_date = Math.min(new Date().getTime(), this.props.message.creation_date * 1000);
+
var show_user =
isFirstNewMessage ||
this.props.previousMessage.sender != this.props.message.sender ||
this.props.previousMessage.sender == null ||
this.props.message.responses_count > 0 ||
this.props.previousMessage.responses_count > 0 ||
- this.props.message.creation_date - this.props.previousMessage.creation_date > 60 * 5 || //5 minutes
+ creation_date / 1000 - this.props.previousMessage.creation_date > 60 * 5 || //5 minutes
this.props.message.pinned;
var canDropIn = !this.props.isResponse;
var canDrag = true;
@@ -299,8 +301,16 @@ export default class Message extends Component {
)}
{!this.props.message._user_ephemeral && (
-
- {this.props.message.creation_date * 1000}
+ new Date().getTime() - 1000 * 60 * 60 * 12
+ ? 'h:mm a'
+ : 'h:mm a, MMM D'
+ }
+ style={{ marginLeft: 5 }}
+ >
+ {creation_date}
)}
@@ -385,7 +395,7 @@ export default class Message extends Component {
/>
60 * 60 * 2
+ creation_date / 1000 - this.props.previousMessage.creation_date > 60 * 60 * 2
) && (
- {(new Date().getTime() / 1000 - this.props.message.creation_date > 24 * 60 * 60
+ {(new Date().getTime() - creation_date > 24 * 60 * 60
? moment(this.props.message.creation_date * 1000).format('LL')
: moment(this.props.message.creation_date * 1000).fromNow()) || '-'}
diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Responses.js b/twake/frontend/src/app/scenes/Apps/Messages/Message/Responses.js
index a22b87bff5..051c11e5c6 100755
--- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Responses.js
+++ b/twake/frontend/src/app/scenes/Apps/Messages/Message/Responses.js
@@ -145,7 +145,7 @@ export default class Responses extends Component {
triggerApp={app => this.triggerApp(app)}
/>
{
if (this.state.response_message_raw) {
diff --git a/twake/frontend/src/app/scenes/Apps/Messages/MessagesList/MessagesList.js b/twake/frontend/src/app/scenes/Apps/Messages/MessagesList/MessagesList.js
index 9ee2c53b01..7ddbf84956 100755
--- a/twake/frontend/src/app/scenes/Apps/Messages/MessagesList/MessagesList.js
+++ b/twake/frontend/src/app/scenes/Apps/Messages/MessagesList/MessagesList.js
@@ -78,9 +78,9 @@ export default class MessagesList extends Component {
this.setVisibleWindow(
(tmp[0] || {}).id,
(tmp[tmp.length - 1] || {}).id,
- (tmp[tmp.length - 1] || {}).id
+ (tmp[tmp.length - 1] || {}).id,
);
- }
+ },
);
}
componentDidMount() {
@@ -162,11 +162,11 @@ export default class MessagesList extends Component {
}
Mlist.states[this.key].window_min_id = Numbers.minTimeuuid(
Mlist.states[this.key].window_min_id,
- id
+ id,
);
Mlist.states[this.key].window_max_id = Numbers.maxTimeuuid(
Mlist.states[this.key].window_max_id,
- id
+ id,
);
}
clearIdInWindow() {
@@ -277,7 +277,7 @@ export default class MessagesList extends Component {
Mlist.states[this.key].visible_min_id = min;
}
}
- }
+ },
);
}
showMessage(id) {
@@ -306,7 +306,7 @@ export default class MessagesList extends Component {
text: Languages.t(
'scenes.apps.messages.messageslist.no_message_alert',
[],
- 'Impossible de trouver ce message.'
+ 'Impossible de trouver ce message.',
),
});
this.scrollToBottom();
@@ -348,7 +348,7 @@ export default class MessagesList extends Component {
{Languages.t(
'scenes.apps.messages.messageslist.load_before_button',
[],
- 'Charger avant'
+ 'Charger avant',
)}
@@ -366,14 +366,14 @@ export default class MessagesList extends Component {
{Languages.t(
'scenes.apps.messages.messageslist.min_window_id',
[],
- 'Identifiant de fenêtre minimum : '
+ 'Identifiant de fenêtre minimum : ',
)}
{Mlist.states[this.key].window_min_id}
{Languages.t(
'scenes.apps.messages.messageslist.max_windoq_id',
[],
- 'Identifiant de fenêtre maximum : '
+ 'Identifiant de fenêtre maximum : ',
)}
{Mlist.states[this.key].window_max_id}
@@ -381,21 +381,21 @@ export default class MessagesList extends Component {
{Languages.t(
'scenes.apps.messages.messageslist.min_visible_id',
[],
- 'Identifiant minimum visible : '
+ 'Identifiant minimum visible : ',
)}
{Mlist.states[this.key].visible_min_id}
{Languages.t(
'scenes.apps.messages.messageslist.current_visible_id',
[],
- 'Identifiant actuel visible : '
+ 'Identifiant actuel visible : ',
)}
{Mlist.states[this.key].visible_current_id}
{Languages.t(
'scenes.apps.messages.messageslist.max_visible_id',
[],
- 'Identifiant maximum visible : '
+ 'Identifiant maximum visible : ',
)}
{Mlist.states[this.key].visible_max_id}
@@ -403,7 +403,7 @@ export default class MessagesList extends Component {
{Languages.t(
'scenes.apps.messages.messageslist.number_visibled_messages',
[],
- 'Nombre de messages visibles : '
+ 'Nombre de messages visibles : ',
)}
{
Collections.get('messages')
@@ -419,7 +419,7 @@ export default class MessagesList extends Component {
Mlist.states[this.key].visible_max_id == Mlist.states[this.key].max_id) ||
(m.id &&
Numbers.compareTimeuuid(m.id, Mlist.states[this.key].visible_min_id) >= 0 &&
- Numbers.compareTimeuuid(m.id, Mlist.states[this.key].visible_max_id) <= 0))
+ Numbers.compareTimeuuid(m.id, Mlist.states[this.key].visible_max_id) <= 0)),
).length
}
@@ -433,7 +433,7 @@ export default class MessagesList extends Component {
{Languages.t(
'scenes.apps.messages.messageslist.load_after_button',
[],
- 'Charger après'
+ 'Charger après',
)}
@@ -455,25 +455,11 @@ export default class MessagesList extends Component {
(!m.id && Mlist.states[this.key].visible_max_id == Mlist.states[this.key].max_id) ||
(m.id &&
Numbers.compareTimeuuid(m.id, Mlist.states[this.key].visible_min_id) >= 0 &&
- Numbers.compareTimeuuid(m.id, Mlist.states[this.key].visible_max_id) <= 0)
+ Numbers.compareTimeuuid(m.id, Mlist.states[this.key].visible_max_id) <= 0),
)
.filter(message => !message._user_ephemeral)
.sort((a, b) => a.creation_date - b.creation_date);
- /*
- if (this.props.parentMessageId) {
- console.log('rerender list ' + this.props.parentMessageId);
- console.log(
- Collections.get('messages').findBy({
- channel_id: this.props.channel.id,
- parent_message_id: this.props.parentMessageId,
- _user_ephemeral: undefined,
- }),
- );
- console.log(messages);
- console.log(Mlist.states[this.key]);
- }*/
-
//Auto scroll to searched or requested message
var scroll_to_key = this.props.channel.id + '_' + (this.props.parentMessageId || '');
if (
@@ -521,9 +507,9 @@ export default class MessagesList extends Component {
}}
>
{Languages.t(
- 'scenes.apps.messages.messageslist.load_before—button',
+ 'scenes.apps.messages.messageslist.load_before_button',
[],
- 'Charger avant'
+ 'Charger avant',
)}
)}
@@ -564,7 +550,7 @@ export default class MessagesList extends Component {
{Languages.t(
'scenes.apps.messages.messageslist.load_after_button',
[],
- 'Charger après'
+ 'Charger après',
)}
,
,
]}
@@ -603,7 +589,7 @@ export default class MessagesList extends Component {
backgroundImage:
"url('" +
UserService.getThumbnail(
- Collections.get('users').find(this.state.last_message.sender)
+ Collections.get('users').find(this.state.last_message.sender),
) +
"')",
}}
@@ -612,8 +598,8 @@ export default class MessagesList extends Component {
{PseudoMarkdownCompiler.compileToSimpleHTML(
MessagesService.prepareContent(
this.state.last_message.content,
- this.state.last_message.user_specific_content
- )
+ this.state.last_message.user_specific_content,
+ ),
)}
)}
diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Board/List/AddTask.js b/twake/frontend/src/app/scenes/Apps/Tasks/Board/List/AddTask.js
index 53f2e0625e..b69b3b9336 100755
--- a/twake/frontend/src/app/scenes/Apps/Tasks/Board/List/AddTask.js
+++ b/twake/frontend/src/app/scenes/Apps/Tasks/Board/List/AddTask.js
@@ -53,7 +53,7 @@ export default class AddTask extends React.Component {
{
this.setState({ new_task_title: evt.target.value });
@@ -64,7 +64,7 @@ export default class AddTask extends React.Component {
/>
{
this.newTask();
}}
diff --git a/twake/frontend/src/app/services/Apps/Messages/Messages.js b/twake/frontend/src/app/services/Apps/Messages/Messages.js
index 95bab40a58..45ae38ef76 100755
--- a/twake/frontend/src/app/services/Apps/Messages/Messages.js
+++ b/twake/frontend/src/app/services/Apps/Messages/Messages.js
@@ -107,12 +107,12 @@ class Messages extends Observable {
text: Languages.t(
'services.apps.messages.no_command_possible',
[value, app_name],
- "Nous ne pouvons pas executer la commande '$1' car '$2' n'existe pas ou ne permet pas de créer des commandes."
+ "Nous ne pouvons pas executer la commande '$1' car '$2' n'existe pas ou ne permet pas de créer des commandes.",
),
title: Languages.t(
'services.apps.messages.no_app',
[],
- "Cette application n'existe pas."
+ "Cette application n'existe pas.",
),
});
return;
@@ -142,7 +142,7 @@ class Messages extends Observable {
var parent = Collections.get('messages').find(message.parent_message_id);
Collections.get('messages').completeObject(
{ responses_count: parent.responses_count + 1 },
- parent.front_id
+ parent.front_id,
);
Collections.get('messages').share(parent);
}
@@ -156,7 +156,7 @@ class Messages extends Observable {
.findBy({ channel_id: options.channel_id })
.map(i => i.creation_date)
.reduce((a, b) => a + b, 0);
- message.creation_date = Math.max(max_message_time + 1, new Date().getTime() / 1000); //To be on the bottom
+ message.creation_date = new Date().getTime() / 1000 + 1000; //To be on the bottom
message.content = val;
ChannelsService.markFrontAsRead(channel.id, message.creation_date);
@@ -238,7 +238,7 @@ class Messages extends Observable {
.forEach(message => {
Collections.get('messages').completeObject(
{ parent_message_id: message_container.id },
- message.front_id
+ message.front_id,
);
moved.push(message);
});
@@ -252,7 +252,7 @@ class Messages extends Observable {
if (old_parent) {
Collections.get('messages').completeObject(
{ responses_count: old_parent.responses_count - 1 },
- old_parent.front_id
+ old_parent.front_id,
);
}
}
@@ -262,7 +262,7 @@ class Messages extends Observable {
new_parent = Collections.get('messages').find(message_container.id);
Collections.get('messages').completeObject(
{ responses_count: new_parent.responses_count + 1 + Math.max(old_count, moved.length) },
- new_parent.front_id
+ new_parent.front_id,
);
}
@@ -277,7 +277,7 @@ class Messages extends Observable {
if (parent.parent_message_id != '') {
Collections.get('messages').updateObject(
{ parent_message_id: parent.parent_message_id },
- message.front_id
+ message.front_id,
);
}
@@ -320,7 +320,7 @@ class Messages extends Observable {
var parent = Collections.get('messages').find(message.parent_message_id);
Collections.get('messages').completeObject(
{ responses_count: parent.responses_count - 1 },
- parent.front_id
+ parent.front_id,
);
Collections.get('messages').share(parent);
}
diff --git a/twake/frontend/src/app/services/Twacode/pseudoMarkdownCompiler.js b/twake/frontend/src/app/services/Twacode/pseudoMarkdownCompiler.js
index 7e18d6898d..efdf464093 100755
--- a/twake/frontend/src/app/services/Twacode/pseudoMarkdownCompiler.js
+++ b/twake/frontend/src/app/services/Twacode/pseudoMarkdownCompiler.js
@@ -49,7 +49,7 @@ class PseudoMarkdownCompiler {
':': {
name: 'emoji',
allowed_char_before: '', //"(^| )",
- allowed_chars: '[a-z_]',
+ allowed_chars: '[a-z_]+',
disable_recursion: true,
end: ':',
object: PseudoMarkdownDictionary.render_block.emoji.object,
@@ -57,7 +57,7 @@ class PseudoMarkdownCompiler {
'@': {
name: 'user',
allowed_char_before: '(^|\\B)',
- allowed_chars: '[a-z_.-A-Z0-9:]',
+ allowed_chars: '[a-z_.-A-Z0-9:]+',
disable_recursion: true,
end: '( |$)',
object: PseudoMarkdownDictionary.render_block.user.object,
@@ -67,7 +67,7 @@ class PseudoMarkdownCompiler {
'#': {
name: 'channel',
allowed_char_before: '(^|\\B)',
- allowed_chars: '[a-z_.-A-Z0-9\u00C0-\u017F:]',
+ allowed_chars: '[a-z_.-A-Z0-9\u00C0-\u017F:]+',
disable_recursion: true,
end: '( |$)',
object: PseudoMarkdownDictionary.render_block.channel.object,
@@ -371,43 +371,31 @@ class PseudoMarkdownCompiler {
return;
}
- var all_ch = this.pseudo_markdown[starting_value].allowed_char_before;
-
- var io = str.indexOf(starting_value);
- while (
- io > 0 &&
- (original_str[io - 1] == '\\' ||
- null === original_str.slice(0, io).match(new RegExp(all_ch ? all_ch + '$' : '$', 'g')))
- ) {
- //Ignore antislashed
- if (original_str[io - 1] == '\\') {
- str = str.slice(0, io - 1) + str.slice(io); //Ignore first char
- var indexOf = str.slice(io).indexOf(starting_value);
- if (indexOf == -1) {
- io = -1;
- } else {
- io = indexOf + io;
- }
- } else {
- var indexOf = str.slice(io).indexOf(starting_value);
- if (indexOf == -1) {
- io = -1;
- } else {
- io = indexOf + io + starting_value.length;
- }
+ const allowed_char_before = this.pseudo_markdown[starting_value].allowed_char_before;
+ let tmp = str;
+ let offset = 0;
+ let indexes = [];
+ let did_match = -1;
+ do {
+ did_match = tmp.indexOf(starting_value);
+
+ let match_char_before =
+ !allowed_char_before ||
+ null !== tmp.slice(0, did_match).match(new RegExp(allowed_char_before + '$', 'gmi'));
+ match_char_before = match_char_before && tmp[did_match - 1] !== '\\';
+
+ tmp = tmp.slice(did_match + 1);
+ if (did_match >= 0 && match_char_before) indexes.push(did_match + offset);
+ offset = offset + did_match + 1;
+ } while (did_match >= 0);
+
+ if (indexes.length > 0) {
+ const mini = Math.min(...indexes);
+ if (min_index_of < 0 || mini < min_index_of) {
+ min_index_of = mini;
+ min_index_of_key = starting_value;
}
}
-
- if (
- io >= 0 &&
- (min_index_of < 0 || io < min_index_of) &&
- !(original_str[io - 1] == '\\') &&
- (!all_ch ||
- !(null === original_str.slice(0, io).match(new RegExp(all_ch ? all_ch + '$' : '$', 'g'))))
- ) {
- min_index_of = io;
- min_index_of_key = starting_value;
- }
});
str = original_str;
@@ -425,13 +413,16 @@ class PseudoMarkdownCompiler {
//It mean we found an antislashed element
add_to_value += match[0];
}
+ const countManaged =
+ (this.pseudo_markdown[char].allowed_chars || '').slice(-1) === '+' ||
+ (this.pseudo_markdown[char].allowed_chars || '').slice(-1) === '}';
match = str_right
.substr(add_to_value.length)
.match(
new RegExp(
'^(' +
(this.pseudo_markdown[char].allowed_chars || '.') +
- '*' +
+ (countManaged ? '' : '*') +
(this.pseudo_markdown[char].end ? '?' : '') +
')' +
(this.pseudo_markdown[char].end ? '(' + this.pseudo_markdown[char].end + ')' : ''),
diff --git a/twake/frontend/src/app/services/languages/locale/de.js b/twake/frontend/src/app/services/languages/locale/de.js
index a749dcba81..a74ce89c96 100755
--- a/twake/frontend/src/app/services/languages/locale/de.js
+++ b/twake/frontend/src/app/services/languages/locale/de.js
@@ -16,6 +16,9 @@ export default {
'general.confirm': 'Bestätigen',
'general.delete': 'Löschen',
'general.links': 'Links',
+ 'general.update': 'Aktualisierung',
+ 'general.remove': 'Löschen',
+ 'general.add': 'Hinzufügen',
'general.from_other_workspace': 'Von Arbeitsbereich $1',
'ads.workspace_is_free_version':
'Benötigen Sie mehr Funktionalitäten? Wechseln Sie zur Vollversion, um weitere Mitglieder, Arbeitsbereiche, unbegrenzten Speicherplatz usw. hinzuzufügen.',
@@ -969,7 +972,7 @@ export default {
'scenes.apps.tasks.filter': 'Nach @Benutzername label:name oder Titel filtern',
'scenes.apps.tasks.members': 'Mitglieder',
'scenes.apps.tasks.task': 'Aufgabe',
- 'scenes.apps.tasks.task.add': 'Add',
+ 'scenes.apps.tasks.task.add': 'Hinzufügen',
'scenes.apps.tasks.no_tasks': 'Keine Aufgabe',
'scenes.apps.tasks.task_status.todo': 'Zu erledigen',
'scenes.apps.tasks.task_status.current': 'In Bearbeitung',
@@ -1127,8 +1130,6 @@ export default {
'Wir haben Ihnen einen Verifizierungscode über $1 geschickt',
'scenes.app.workspaces.welcome_page.done': 'Ich bin fertig',
'scenes.login.forgot_password.finished': 'Ihr Passwort wurde erfolgreich aktualisiert.',
- 'general.update': 'Aktualisierung',
- 'general.remove': 'Löschen',
'scenes.apps.account.account.description_main':
'Ihre Hauptadresse ist diejenige, an die Twake Ihre Benachrichtigungen sendet. Ihre sekundären Adressen ermöglichen es Ihnen, automatisch zu den Arbeitsbereichen eingeladen zu werden, die sie verwenden.',
'scenes.apps.account.account.emails.description':
@@ -1236,7 +1237,7 @@ export default {
'scenes.app.channelsbar.private_channel_label': 'Privater Kanal',
'scenes.app.channelsbar.read_sign': 'als gelesen markieren',
'scenes.app.channelsbar.remove_mute': 'Entfernen Sie die Stummschaltung',
- 'scenes.app.channelsbar.save_channel_button': 'sparen',
+ 'scenes.app.channelsbar.save_channel_button': 'Speichern',
'scenes.app.channelsbar.sending_message_instruction':
'Senden Sie eine erste Nachricht in einer Diskussion',
'scenes.app.channelsbar.tutorial_alert': 'Diesen Rahmen nie wieder anzeigen?',
@@ -1258,7 +1259,7 @@ export default {
'scenes.app.mainview.tabs.placeholder_name_tab': 'Name der Registerkarte',
'scenes.app.mainview.tabs.remove_tab': 'Lasche entfernen',
'scenes.app.mainview.tabs.rename': 'Umbenennen',
- 'scenes.app.mainview.tabs.save_tab': 'sparen',
+ 'scenes.app.mainview.tabs.save_tab': 'Speichern',
'scenes.app.mainview.tabs.searching_connectors': 'Konnektoren suchen ...',
'scenes.app.popup.adduser.adding_several_people': 'Fügen Sie mehrere Personen gleichzeitig hinzu',
'scenes.app.popup.adduser.adresses_message':
@@ -1547,8 +1548,8 @@ export default {
'scenes.apps.calendar.modals.remove_button': 'Löschen',
'scenes.apps.calendar.modals.remove_event_button': 'Ereignis löschen',
'scenes.apps.calendar.modals.remove_event_text': 'Ereignis löschen ?',
- 'scenes.apps.calendar.modals.save_button': 'sparen',
- 'scenes.apps.calendar.modals.save_event_button': 'sparen',
+ 'scenes.apps.calendar.modals.save_button': 'Speichern',
+ 'scenes.apps.calendar.modals.save_event_button': 'Speichern',
'scenes.apps.calendar.modals.title_placeholder': 'Titel',
'scenes.apps.calendar.modals.untitled': 'Ohne Titel',
'scenes.apps.calendar.modify_calendar_menu': 'Bearbeiten Sie den Kalender',
@@ -1608,7 +1609,7 @@ export default {
'scenes.apps.messages.message.remove_button': 'Delete',
'scenes.apps.messages.message.reply_button': 'Antworten',
'scenes.apps.messages.message.show_on_right': 'Rechts zeigen',
- 'scenes.apps.messages.message.save_button': 'sparen',
+ 'scenes.apps.messages.message.save_button': 'Speichern',
'scenes.apps.messages.message.show_button': 'Anzeige',
'scenes.apps.messages.message.show_responses_button': 'Alle Antworten anzeigen',
'scenes.apps.messages.message.starred': 'Markiert',
@@ -1622,7 +1623,6 @@ export default {
'scenes.apps.messages.messageslist.go_last_message_button': 'Gehe zum letzten Beitrag',
'scenes.apps.messages.messageslist.load_after_button': 'Laden nach',
'scenes.apps.messages.messageslist.load_before_button': 'Vorher laden',
- 'scenes.apps.messages.messageslist.load_after_button': 'Laden nach',
'scenes.apps.messages.messageslist.max_id': 'Maximale Kennung:',
'scenes.apps.messages.messageslist.max_visible_id': 'Maximal sichtbare Kennung:',
'scenes.apps.messages.messageslist.max_windoq_id': 'Maximale Fensteridentifikation:',
@@ -1655,4 +1655,5 @@ export default {
'services.user.update_password_alert': 'Dein Passwort wurde aktualisiert.',
'services.workspaces.not_added': 'Die folgenden Benutzer wurden nicht hinzugefügt :',
'client.app.services.languages.locale.fr._1561453218646': '',
+ 'scenes.app.popup.appsparameters.pages.icon': 'Symbol',
};
diff --git a/twake/frontend/src/app/services/languages/locale/en.js b/twake/frontend/src/app/services/languages/locale/en.js
index 5eb99b8c5b..28a2f89333 100755
--- a/twake/frontend/src/app/services/languages/locale/en.js
+++ b/twake/frontend/src/app/services/languages/locale/en.js
@@ -21,6 +21,9 @@ export default {
'general.from_other_workspace': 'From workspace $1',
'general.help': 'Help',
'general.send': 'Send message',
+ 'general.update': 'Update',
+ 'general.remove': 'Remove',
+ 'general.add': 'Add',
'general.connexion_status.disconnected': 'You are offline',
'general.connexion_status.connected': 'You are online',
'general.connexion_status.connecting': 'Reconnecting...',
@@ -520,6 +523,8 @@ export default {
'scenes.apps.messages.left_bar.stream_modal.remove': 'Remove',
'scenes.apps.messages.left_bar.stream_modal.message_before_deleting':
'This action is not reversible',
+ 'scenes.apps.messages.left_bar.stream.star': 'Star channel',
+ 'scenes.apps.messages.left_bar.stream.unstar': 'Unstar channel',
'scenes.apps.messages.left_bar.stream.mute': 'Mute channel',
'scenes.apps.messages.left_bar.stream.unmute': 'Unmute channel',
'scenes.apps.messages.left_bar.stream.mark_as_read': 'Mark as read',
@@ -1095,8 +1100,6 @@ export default {
'scenes.app.workspaces.welcome_page.we_sent_you_mail': 'We sent you a verification code via $1',
'scenes.app.workspaces.welcome_page.done': "I'm done",
'scenes.login.forgot_password.finished': 'Your password was successfully updated.',
- 'general.update': 'Update',
- 'general.remove': 'Remove',
'scenes.apps.account.account.description_main':
'Your main address is the one to which Twake sends your notifications. Your secondary addresses allow you to be automatically invited to the workspaces that use them.',
'scenes.apps.account.account.emails.description': 'Manage your different email addresses.',
@@ -1155,7 +1158,8 @@ export default {
'scenes.app.channelsbar.currentuser.update': 'Update',
'scenes.app.channelsbar.currentuser.desactivated_notifiations_information':
'Your notifications are disabled at night from $1 to $2.',
- 'scenes.app.channelsbar.currentuser.desactivated_notifiations_information_until': '',
+ 'scenes.app.channelsbar.currentuser.desactivated_notifiations_information_until':
+ 'Your notifications are disabled until $1:$2.',
'scenes.app.channelsbar.currentuser.desactivated_notifications_message':
'Your notifications are disabled.',
'scenes.app.channelsbar.currentuser.disable_notifications': 'Disable',
@@ -1250,10 +1254,9 @@ export default {
'Define what your application can edit and read.',
'scenes.app.popup.appsparameters.pages.app_privileges_label': 'Application privileges',
'scenes.app.popup.appsparameters.pages.app_surname': 'Simplified name of your application',
- 'scenes.app.popup.appsparameters.pages.app_update': '',
+ 'scenes.app.popup.appsparameters.pages.app_update':
+ 'Update the app $1 (the app is used $2 times.)',
'scenes.app.popup.appsparameters.pages.application_title': 'Application',
- 'scenes.app.popup.appsparameters.pages.apps_connectors_small_text':
- 'Create and administer your applications and connectors.',
'scenes.app.popup.appsparameters.pages.apps_title': 'Your applications and connectors',
'scenes.app.popup.appsparameters.pages.automatique_label': 'Automatic',
'scenes.app.popup.appsparameters.pages.automatique_option_information':
@@ -1262,7 +1265,8 @@ export default {
'scenes.app.popup.appsparameters.pages.available_publication_alert':
'The publication of your application is currently awaiting validation by the Twake teams.',
'scenes.app.popup.appsparameters.pages.button_force': 'Force throughout the company',
- 'scenes.app.popup.appsparameters.pages.call_event_handlers': '',
+ 'scenes.app.popup.appsparameters.pages.call_event_handlers':
+ "Event of type '$1' and id '$2' with passives '$3'",
'scenes.app.popup.appsparameters.pages.categories_label': 'Categories',
'scenes.app.popup.appsparameters.pages.company_label': 'Company owner',
'scenes.app.popup.appsparameters.pages.configuration_label': 'Configuration',
@@ -1308,7 +1312,7 @@ export default {
'scenes.app.popup.appsparameters.pages.modify_public_data':
'Edit the public data of your application.',
'scenes.app.popup.appsparameters.pages.new_app_title': 'New application',
- 'scenes.app.popup.appsparameters.pages.ok_user_code': '',
+ 'scenes.app.popup.appsparameters.pages.ok_user_code': 'ok',
'scenes.app.popup.appsparameters.pages.optimal_format': 'Optimal format : 48x48px.',
'scenes.app.popup.appsparameters.pages.parameters_form_small_text':
'The unpublished application will only work in your company, if you want to make it available to all Twake users, activate this option.',
@@ -1410,10 +1414,11 @@ export default {
'Applications developed by the company',
'scenes.app.popup.workspaceparameter.pages.displayed_preferencies_subtitle':
'Display preferences',
- 'scenes.app.popup.workspaceparameter.pages.edit_level_administrater_text': '',
+ 'scenes.app.popup.workspaceparameter.pages.edit_level_administrater_text':
+ 'An admin can configurate the workspace (name, apps, members of the workspace).',
'scenes.app.popup.workspaceparameter.pages.edit_level_user_text': '',
'scenes.app.popup.workspaceparameter.pages.extern': 'Extern',
- 'scenes.app.popup.workspaceparameter.pages.extern_guest': '',
+ 'scenes.app.popup.workspaceparameter.pages.extern_guest': 'Guest user',
'scenes.app.popup.workspaceparameter.pages.forced_apps_text': 'Force throughout the company',
'scenes.app.popup.workspaceparameter.pages.guest_status': 'Guest',
'scenes.app.popup.workspaceparameter.pages.install_button': 'Install',
@@ -1434,7 +1439,8 @@ export default {
'scenes.app.popup.workspaceparameter.pages.logo_modify_description':
'Edit the image of this workspace',
'scenes.app.popup.workspaceparameter.pages.logo_subtitle': 'Logo',
- 'scenes.app.popup.workspaceparameter.pages.modify_level': '',
+ 'scenes.app.popup.workspaceparameter.pages.modify_level':
+ 'Change your level of administration at the company? (this action is not reversible if you reduce your access rights)',
'scenes.app.popup.workspaceparameter.pages.name_description': 'Change the name of this workspace',
'scenes.app.popup.workspaceparameter.pages.name_label': 'Name of the workspace',
'scenes.app.popup.workspaceparameter.pages.no_access': 'No access.',
@@ -1460,8 +1466,6 @@ export default {
'scenes.app.popup.workspaceparameter.pages.worspace_notif': 'workspace',
'scenes.app.popup.workspaceparameter.pages.worspace_subtitle': 'Workspace',
'scenes.app.popup.workspaceparameter.pages.write_access_subtitle': 'Write access',
- 'scenes.app.popup.workspaceparameter.pages.your_apps_description':
- 'Create and administer your applications and connectors.',
'scenes.app.popup.workspaceparameter.pages.your_apps_label': 'Your applications',
'scenes.app.popup.workspaceparameter.payments_subscriptions_title': 'Payments and subscriptions',
'scenes.app.workspacesbar.components.change_company_title': 'Change of company',
@@ -1570,9 +1574,8 @@ export default {
'scenes.apps.messages.messageslist.get_writing_user': 'is writing...',
'scenes.apps.messages.messageslist.get_writing_users': 'are writing...',
'scenes.apps.messages.messageslist.go_last_message_button': 'Go to last message',
- 'scenes.apps.messages.messageslist.load_after_button': 'Load after',
- 'scenes.apps.messages.messageslist.load_before_button': 'Load before',
- 'scenes.apps.messages.messageslist.load_after_button': 'Load after',
+ 'scenes.apps.messages.messageslist.load_after_button': 'Load the following messages',
+ 'scenes.apps.messages.messageslist.load_before_button': 'Load previous messages',
'scenes.apps.messages.messageslist.max_id': 'Maximum identifier :',
'scenes.apps.messages.messageslist.max_visible_id': 'Maximum visible identifier :',
'scenes.apps.messages.messageslist.max_windoq_id': 'Maximum window identifier :',
@@ -1805,4 +1808,14 @@ export default {
'scenes.apps.messages.select_computer': 'Select from computer',
'scenes.apps.messages.select_twake': 'Select in Twake Documents',
'scenes.apps.tasks.active_tasks': 'active tasks',
+ 'scenes.apps.drive.right_preview.versions': 'Versions',
+ 'scenes.app.popup.appsparameters.pages.apps_connectors_small_text':
+ 'Manage your applications and connectors.',
+ 'scenes.app.popup.appsparameters.pages.icon': 'Icon',
+ 'scenes.app.popup.appsparameters.pages.title_informations': 'Basic informations',
+ 'scenes.app.popup.appsparameters.pages.subtitle_informations':
+ 'Informations related to applications management',
+ 'scenes.app.popup.appsparameters.pages.smalltext_user_id': 'Current user id',
+ 'scenes.app.popup.appsparameters.pages.smalltext_workspace_id': 'Current workspace id',
+ 'scenes.app.popup.appsparameters.pages.smalltext_group_id': 'Current group id',
};
diff --git a/twake/frontend/src/app/services/languages/locale/es.js b/twake/frontend/src/app/services/languages/locale/es.js
index 2f5fdb2283..42a66275ff 100755
--- a/twake/frontend/src/app/services/languages/locale/es.js
+++ b/twake/frontend/src/app/services/languages/locale/es.js
@@ -881,4 +881,5 @@ export default {
'Espere, estamos descargando la última versión de Twake ($1)',
//-End QuoteLoader
//End Login
+ 'scenes.app.popup.appsparameters.pages.icon': 'icono',
};
diff --git a/twake/frontend/src/app/services/languages/locale/fr.js b/twake/frontend/src/app/services/languages/locale/fr.js
index 8a55be10dd..63df75fe5f 100755
--- a/twake/frontend/src/app/services/languages/locale/fr.js
+++ b/twake/frontend/src/app/services/languages/locale/fr.js
@@ -3,7 +3,7 @@ export default {
'general.external': 'Externe',
'general.close': 'Fermer',
'general.closed': 'Fermé',
- 'general.save': 'Sauvegarder',
+ 'general.save': 'Enregistrer',
'general.copy': 'Copier',
'general.cancel': 'Annuler',
'general.yes': 'Oui',
@@ -20,6 +20,10 @@ export default {
'general.unarchive': 'Désarchiver',
'general.from_other_workspace': "Depuis l'espace $1",
'general.help': 'Aide',
+ 'general.send': 'Envoyer le message',
+ 'general.update': 'Mettre à jour',
+ 'general.remove': 'Supprimer',
+ 'general.add': 'Ajouter',
'general.connexion_status.disconnected': 'Vous êtes hors ligne',
'general.connexion_status.connected': 'Vous êtes connecté',
'general.connexion_status.connecting': 'Reconnexion en cours...',
@@ -534,6 +538,8 @@ export default {
'scenes.apps.messages.left_bar.stream_modal.remove': 'Supprimer',
'scenes.apps.messages.left_bar.stream_modal.message_before_deleting':
"Cette action n'est pas réversible",
+ 'scenes.apps.messages.left_bar.stream.star': 'Mettre en favori',
+ 'scenes.apps.messages.left_bar.stream.unstar': 'Retirer des favoris',
'scenes.apps.messages.left_bar.stream.mute': 'Désactiver les notifications',
'scenes.apps.messages.left_bar.stream.unmute': 'Réactiver les notifications',
'scenes.apps.messages.left_bar.stream.mark_as_read': 'Marquer comme lu',
@@ -743,6 +749,7 @@ export default {
'scenes.apps.parameters.group_sections.managers.invite_manager_placeholder':
"Nom d'utilisateur du manager",
'scenes.apps.parameters.group_sections.managers.invite_manager_button': 'Ajouter',
+ 'scenes.apps.parameters.group_sections.managers.invite_manager_button_skip': 'Пропустить',
'scenes.apps.parameters.group_sections.managers.invite_manager_message':
'Voulez-vous ajouter cette personne en tant que manager?',
'scenes.apps.parameters.group_sections.managers.only_reading': 'Seulement la lecture',
@@ -972,6 +979,11 @@ export default {
"Créer un espace de travail sur le modèle de l'espace courant.",
'scenes.apps.parameters.workspace_sections.workspace.duplicate_button': 'Dupliquer cet espace...',
'scenes.apps.tasks.boards': 'Tableaux',
+ 'scenes.apps.tasks.connectors_menu': 'Connecteurs...',
+ 'scenes.apps.tasks.connectors_search_menu': 'Chercher des connecteurs...',
+ 'scenes.apps.tasks.no_connectors_menu_text':
+ "Vous n'avez pas de connecteur qui peut se connecter à un calendrier",
+ 'scenes.apps.tasks.unconfigured_tab': "Cet onglet n'est pas encore configuré.",
'scenes.apps.tasks.left.team': 'Équipe',
'scenes.apps.tasks.new_board.title': 'Nouveau tableau',
'scenes.apps.tasks.choose_board_button': 'Choisir un tableau',
@@ -1144,8 +1156,6 @@ export default {
'Nous vous avons envoyé un code de vérification via l’adresse $1',
'scenes.app.workspaces.welcome_page.done': "J'ai fini",
'scenes.login.forgot_password.finished': 'Votre mot de passe a bien été mis à jour.',
- 'general.update': 'Mettre à jour',
- 'general.remove': 'Supprimer',
'scenes.apps.account.account.description_main':
"Votre adresse principale est celle à qui Twake envoie vos notifications. Vos adresses secondaires vous permettent d'être invité automatiquement dans les espaces de travail qui les utilisent.",
'scenes.apps.account.account.emails.description': 'Gérez vos différentes adresses email.',
@@ -1206,7 +1216,8 @@ export default {
'scenes.app.channelsbar.currentuser.update': 'Mettre à jour',
'scenes.app.channelsbar.currentuser.desactivated_notifiations_information':
"Vos notifications sont désactivées la nuit de $1 jusqu'à $2.",
- 'scenes.app.channelsbar.currentuser.desactivated_notifiations_information_until': '',
+ 'scenes.app.channelsbar.currentuser.desactivated_notifiations_information_until':
+ "Vos notifications sont désactivées jusqu'à $1:$2.",
'scenes.app.channelsbar.currentuser.desactivated_notifications_message':
'Vos notifications sont désactivées.',
'scenes.app.channelsbar.currentuser.disable_notifications': 'Désactiver',
@@ -1256,7 +1267,10 @@ export default {
'scenes.app.channelsbar.installation_desktop_tutorial': "Installer l'application desktop",
'scenes.app.channelsbar.invitation_collaboraors_tutorial':
'Invitez vos collaborateurs dans votre espace de travail.',
+ 'scenes.app.channelsbar.public_channel_label': 'Chaîne publique',
'scenes.app.channelsbar.private_channel_label': 'Chaîne privée',
+ 'scenes.app.channelsbar.private_channel_message':
+ "C'est une chaîne publique, toue l'espace de travail sera invité",
'scenes.app.channelsbar.save_channel_button': 'Enregistrer',
'scenes.app.channelsbar.sending_message_instruction':
'Envoyer un premier message dans une discussion',
@@ -1303,10 +1317,9 @@ export default {
'Permet de définir ce que votre application peut modifier et lire.',
'scenes.app.popup.appsparameters.pages.app_privileges_label': "Privilèges de l'application",
'scenes.app.popup.appsparameters.pages.app_surname': 'Nom simplifié de votre application',
- 'scenes.app.popup.appsparameters.pages.app_update': '',
+ 'scenes.app.popup.appsparameters.pages.app_update':
+ "Mettre à jour l'application $1 (l'application est utilisée $2 fois.)",
'scenes.app.popup.appsparameters.pages.application_title': 'Application',
- 'scenes.app.popup.appsparameters.pages.apps_connectors_small_text':
- 'Créez et administrez vos applications et connecteurs.',
'scenes.app.popup.appsparameters.pages.apps_title': 'Vos applications et connecteurs',
'scenes.app.popup.appsparameters.pages.automatique_label': 'Automatique',
'scenes.app.popup.appsparameters.pages.automatique_option_information':
@@ -1315,7 +1328,8 @@ export default {
'scenes.app.popup.appsparameters.pages.available_publication_alert':
'La publication de votre application est actuellement en attente de validation par les équipes de Twake.',
'scenes.app.popup.appsparameters.pages.button_force': "Forcer dans toute l'entreprise",
- 'scenes.app.popup.appsparameters.pages.call_event_handlers': '',
+ 'scenes.app.popup.appsparameters.pages.call_event_handlers':
+ "Evènement de type '$1' et d'identifiant '$2', avec les passifs '$3'",
'scenes.app.popup.appsparameters.pages.categories_label': 'Catégories',
'scenes.app.popup.appsparameters.pages.company_label': 'Entreprise propriétaire',
'scenes.app.popup.appsparameters.pages.configuration_label': 'Configuration',
@@ -1361,7 +1375,7 @@ export default {
'scenes.app.popup.appsparameters.pages.modify_public_data':
'Modifier les données publiques de votre application.',
'scenes.app.popup.appsparameters.pages.new_app_title': 'Nouvelle application',
- 'scenes.app.popup.appsparameters.pages.ok_user_code': '',
+ 'scenes.app.popup.appsparameters.pages.ok_user_code': 'ok',
'scenes.app.popup.appsparameters.pages.optimal_format': 'Format optimal : 48x48px.',
'scenes.app.popup.appsparameters.pages.parameters_form_small_text':
"L'application non publiée ne fonctionnera que dans votre entreprise, si vous souhaitez la rendre disponible à tous les utilisateurs de Twake, activez cette option.",
@@ -1467,10 +1481,11 @@ export default {
'Applications développées par votre entreprise',
'scenes.app.popup.workspaceparameter.pages.displayed_preferencies_subtitle':
"Préférences d'affichage",
- 'scenes.app.popup.workspaceparameter.pages.edit_level_administrater_text': '',
+ 'scenes.app.popup.workspaceparameter.pages.edit_level_administrater_text':
+ "Un administrateur peut configurer l'espace de travail (identité de l'espace, applications, membres de l'espace).",
'scenes.app.popup.workspaceparameter.pages.edit_level_user_text': '',
'scenes.app.popup.workspaceparameter.pages.extern': 'Externe',
- 'scenes.app.popup.workspaceparameter.pages.extern_guest': '',
+ 'scenes.app.popup.workspaceparameter.pages.extern_guest': 'Utilisateur invité',
'scenes.app.popup.workspaceparameter.pages.forced_apps_text': "Forcer dans toute l'entreprise",
'scenes.app.popup.workspaceparameter.pages.guest_status': 'Invité',
'scenes.app.popup.workspaceparameter.pages.install_button': 'Installer',
@@ -1491,7 +1506,8 @@ export default {
'scenes.app.popup.workspaceparameter.pages.logo_modify_description':
"Modifiez l'image de cet espace de travail",
'scenes.app.popup.workspaceparameter.pages.logo_subtitle': 'Logo',
- 'scenes.app.popup.workspaceparameter.pages.modify_level': '',
+ 'scenes.app.popup.workspaceparameter.pages.modify_level':
+ "Modifier votre niveau d'accès à l'entreprise ? (cette action n'est pas réversible si vous réduisez vos droits d'accès)",
'scenes.app.popup.workspaceparameter.pages.name_description':
'Modifiez le nom de cet espace de travail',
'scenes.app.popup.workspaceparameter.pages.name_label': "Nom de l'espace",
@@ -1523,7 +1539,7 @@ export default {
'Créez et administrez vos applications et connecteurs.',
'scenes.app.popup.workspaceparameter.pages.your_apps_label': 'Vos applications',
'scenes.app.popup.workspaceparameter.payments_subscriptions_title': 'Paiements et abonnements',
- 'scenes.app.workspacesbar.components.change_company_title': 'Changer de company',
+ 'scenes.app.workspacesbar.components.change_company_title': "Changer d'entreprise",
'scenes.app.workspacesbar.components.create_company_menu': 'Créer une entreprise',
'scenes.app.workspacesbar.components.grp_parameters': 'Paramètres de $1',
'scenes.apps.calendar.add_calendar_menu': 'Ajouter un calendrier...',
@@ -1631,9 +1647,8 @@ export default {
'scenes.apps.messages.messageslist.get_writing_user': "est en train d'écrire...",
'scenes.apps.messages.messageslist.get_writing_users': "sont en train d'écrire...",
'scenes.apps.messages.messageslist.go_last_message_button': 'Aller au dernier message',
- 'scenes.apps.messages.messageslist.load_after_button': 'Charger plus de messages',
- 'scenes.apps.messages.messageslist.load_before_button': 'Charger plus de messages',
- 'scenes.apps.messages.messageslist.load_after_button': 'Charger plus de messages',
+ 'scenes.apps.messages.messageslist.load_after_button': 'Charger les messages suivants',
+ 'scenes.apps.messages.messageslist.load_before_button': 'Charger les messages précédents',
'scenes.apps.messages.messageslist.max_id': 'Identifiant maximum : ',
'scenes.apps.messages.messageslist.max_visible_id': 'Identifiant maximum visible : ',
'scenes.apps.messages.messageslist.max_windoq_id': 'Identifiant de fenêtre maximum : ',
@@ -1702,6 +1717,7 @@ export default {
'scenes.app.workspaces.new_workspace': 'Nouvel espace de travail',
'scenes.apps.calendar.add_event': 'Ajouter un événement',
'scenes.apps.calendar.empty_date_information': "C'est une date libre !",
+ 'scenes.apps.calendar.unconfigured_tab': "Cet onglet n'est pas encore configuré",
'scenes.apps.drive.import_image': "Importer une image depuis l'appareil",
'scenes.apps.drive.import_document': "Importer un document depuis l'appareil",
'scenes.apps.drive.no_more': "Il n'y a plus rien à afficher.",
@@ -1866,4 +1882,15 @@ export default {
'scenes.apps.messages.select_computer': "Sélectionner à partir de l'ordinateur",
'scenes.apps.messages.select_twake': 'Sélectionner dans Twake Documents',
'scenes.apps.tasks.active_tasks': 'tâches actives',
+ 'scenes.apps.drive.right_preview.versions': 'Versions',
+ 'scenes.app.popup.appsparameters.pages.apps_connectors_small_text':
+ 'Gérer vos applications et connecteurs.',
+ 'scenes.app.popup.appsparameters.pages.icon': 'Icône',
+ 'scenes.app.popup.appsparameters.pages.title_informations': 'Informations de base',
+ 'scenes.app.popup.appsparameters.pages.subtitle_informations':
+ 'Informations liées à la gestion des applications',
+ 'scenes.app.popup.appsparameters.pages.smalltext_user_id': 'Identifiant utilisateur actuel',
+ 'scenes.app.popup.appsparameters.pages.smalltext_workspace_id':
+ 'Identifiant espace de travail actuel',
+ 'scenes.app.popup.appsparameters.pages.smalltext_group_id': 'Identifiant de groupe actuel',
};
diff --git a/twake/frontend/src/app/services/languages/locale/ja.js b/twake/frontend/src/app/services/languages/locale/ja.js
index 5662ca985c..e51aafa4d9 100755
--- a/twake/frontend/src/app/services/languages/locale/ja.js
+++ b/twake/frontend/src/app/services/languages/locale/ja.js
@@ -859,4 +859,5 @@ export default {
'しばらくお待ちください、最新版のTwake($1)をダウンロードしています。',
//-End QuoteLoader
//End Login
+ 'scenes.app.popup.appsparameters.pages.icon': 'アイコン',
};
diff --git a/twake/frontend/src/app/services/languages/locale/ru.js b/twake/frontend/src/app/services/languages/locale/ru.js
index f6d3eca6d0..39a535d470 100644
--- a/twake/frontend/src/app/services/languages/locale/ru.js
+++ b/twake/frontend/src/app/services/languages/locale/ru.js
@@ -3,7 +3,7 @@ export default {
'general.external': 'Гость',
'general.close': 'Закрыть',
'general.closed': 'Закрыто',
- 'general.save': 'Cохранить',
+ 'general.save': 'Сохранить',
'general.copy': 'Скопироать',
'general.cancel': 'Отмена',
'general.yes': 'Да',
@@ -20,6 +20,10 @@ export default {
'general.unarchive': 'Снять с архивы',
'general.from_other_workspace': 'От рабочей группы $1',
'general.help': 'Помощь',
+ 'general.send': 'Отправить сообщение',
+ 'general.update': 'Обновить',
+ 'general.remove': 'Удалить',
+ 'general.add': 'Добавить',
'general.connexion_status.disconnected': 'Вы не в сети',
'general.connexion_status.connected': 'Вы в сети',
'general.connexion_status.connecting': 'Переподключение...',
@@ -384,7 +388,7 @@ export default {
'Получите легко доступ к последней загрузке или удаленным файлам.',
'scenes.apps.drive.drive_tour.storage': 'Хранение',
'scenes.apps.drive.drive_tour.storage_limit':
- 'Проверьте оставшееся хранилище и подумайте о том, чтобы опорожнить мусор. Ограничением на хранение можно управлять в групповых параметрах.',
+ 'Проверьте оставшееся хранилище и подумайте о том, чтобы опорожнить корзину. Ограничением на хранение можно управлять в групповых параметрах.',
'scenes.apps.drive.drive_tour.congrats': 'Поздравляем!',
'scenes.apps.drive.drive_tour.bye': 'Вы управляете хранилищем Twake! До скорого!',
'scenes.apps.drive.drive_tour.preview': 'Предварительный просмотр',
@@ -408,10 +412,10 @@ export default {
'scenes.apps.drive.navigators.navigator_content.directories': 'Каталоги',
'scenes.apps.drive.navigators.navigator_content.files': 'Файлы',
'scenes.apps.drive.navigators.navigator_content.no_file': 'Здесь ничего нет.',
- 'scenes.apps.drive.navigators.navigator_deleted.title': 'Вы в мусоре',
- 'scenes.apps.drive.navigators.navigator_deleted.empty': 'Пустой мусор',
+ 'scenes.apps.drive.navigators.navigator_deleted.title': 'Вы в корзине',
+ 'scenes.apps.drive.navigators.navigator_deleted.empty': 'Пустая корзина',
'scenes.apps.drive.navigators.navigator_deleted.empty_message':
- 'Вы действительно собираетесь выкинуть мусор?',
+ 'Вы действительно собираетесь опустошить корзину?',
'scenes.apps.drive.navigators.navigator_labels.title': 'Ярлыки',
'scenes.apps.drive.navigators.navigator_labels.no_file_with_this_label':
'Нет файла с этим ярлыком.',
@@ -442,7 +446,7 @@ export default {
'scenes.apps.drive.navigators.new_file': 'Новый файл',
'scenes.apps.drive.navigators.directories': 'Удаленные каталоги',
'scenes.apps.drive.navigators.files': 'Удаленные файлы',
- 'scenes.apps.drive.navigators.no_file': 'Пустой мусор',
+ 'scenes.apps.drive.navigators.no_file': 'Пустая корзина',
'scenes.apps.drive.preview_bloc.added': 'добавил $1',
'scenes.apps.drive.preview_bloc.see_in_drive': 'Смотреть на диске',
'scenes.apps.drive.preview_bloc.other_workspace': 'Открыть другое рабочее пространство',
@@ -465,8 +469,8 @@ export default {
'scenes.apps.drive.right_preview.operations_download': 'Скачать',
'scenes.apps.drive.right_preview.operations_restore': 'Восстановить',
'scenes.apps.drive.right_preview.operations_restore_message': 'Восстановить этот файл?',
- 'scenes.apps.drive.right_preview.operations_delete': 'Переместить в мусор',
- 'scenes.apps.drive.right_preview.operations_delete_message': 'Переместить этот файл в мусор?',
+ 'scenes.apps.drive.right_preview.operations_delete': 'Переместить в корзину',
+ 'scenes.apps.drive.right_preview.operations_delete_message': 'Переместить этот файл в корзину?',
'scenes.apps.drive.right_preview.operations_message':
'Это каталог, вы действительно хотите загрузить его (он может быть тяжелым)?',
'scenes.apps.drive.right_preview.storage': 'Хранение',
@@ -490,7 +494,7 @@ export default {
'scenes.apps.messages.streams': 'Каналы',
'scenes.apps.messages.messages': 'Сообщения',
'scenes.apps.messages.stream': 'Канал',
- 'scenes.apps.messages.chatbox.chat.private_discussion_with': 'Приватная дискуссия с',
+ 'scenes.apps.messages.chatbox.chat.private_discussion_with': 'Личная дискуссия с',
'scenes.apps.messages.chatbox.chat.edit_message': 'Отредактировать сообщение',
'scenes.apps.messages.chatbox.chat.delete_message': 'Удалить данное сообщение',
'scenes.apps.messages.chatbox.chat.delete_message_btn': 'Удалить сообщение',
@@ -522,7 +526,7 @@ export default {
'scenes.apps.messages.chatbox.chat.input_zone.send_attachment': 'Отправить вложение',
'scenes.apps.messages.chatbox.chat.input_zone.classic_message': 'Обычное сообщение',
'scenes.apps.messages.chatbox.chat.input_zone.input.placeholder_message': 'Ваше сообщение',
- 'scenes.apps.messages.left_bar.private_messages': 'Прямые сообщения',
+ 'scenes.apps.messages.left_bar.private_messages': 'Личные сообщения',
'scenes.apps.messages.left_bar.channels': 'Тематические каналы',
'scenes.apps.messages.left_bar.stream_modal.new_channel': 'Новый канал',
'scenes.apps.messages.left_bar.stream_modal.modify_channel': 'Изменить канал',
@@ -536,6 +540,8 @@ export default {
'scenes.apps.messages.left_bar.stream_modal.private_btn': 'Private',
'scenes.apps.messages.left_bar.stream_modal.remove': 'Удалить',
'scenes.apps.messages.left_bar.stream_modal.message_before_deleting': 'Это действие не обратимо',
+ 'scenes.apps.messages.left_bar.stream.star': 'Закладка',
+ 'scenes.apps.messages.left_bar.stream.unstar': 'Удалить из Избранного',
'scenes.apps.messages.left_bar.stream.mute': 'Отключить канал',
'scenes.apps.messages.left_bar.stream.unmute': 'Включить канал',
'scenes.apps.messages.left_bar.stream.mark_as_read': 'Отметить как прочитанное',
@@ -606,7 +612,7 @@ export default {
'scenes.apps.account.account.logout_warning': 'Вы выйдете из аккаунта.',
'scenes.apps.account.contacts.title': 'Контакты',
'scenes.apps.account.contacts.text':
- 'Ваши контакты являются личными и связаны с вашим аккаунтом, вы можете отправлять им прямые сообщения, не делясь рабочим пространством.',
+ 'Ваши контакты являются личными и связаны с вашим аккаунтом, вы можете отправлять им личные сообщения, не делясь рабочим пространством.',
'scenes.apps.account.contacts.find_new': 'Найти новый контакт',
'scenes.apps.account.contacts.find_new_text':
'Введите имя пользователя контакта, который вы хотите найти.',
@@ -948,8 +954,7 @@ export default {
'scenes.apps.parameters.workspace_sections.workspace.duplicate.structure.calendars': 'Календари',
'scenes.apps.parameters.workspace_sections.workspace.duplicate.structure.drive_labels':
'Ярлыки диска',
- 'scenes.apps.parameters.workspace_sections.workspace.duplicate.structure.boards':
- 'Списки заданий',
+ 'scenes.apps.parameters.workspace_sections.workspace.duplicate.structure.boards': 'Списки задач',
'scenes.apps.parameters.workspace_sections.workspace.duplicate.structure.streams':
'Дискуссионные каналы',
'scenes.apps.parameters.workspace_sections.workspace.duplicate.structure.rights': 'Права',
@@ -987,8 +992,8 @@ export default {
'scenes.apps.tasks.members': 'участники',
'scenes.apps.tasks.task': 'Задача',
'scenes.apps.tasks.task.add': 'Добавить',
- 'scenes.apps.tasks.no_tasks': 'Нет задачи',
- 'scenes.apps.tasks.task_status.todo': 'Список заданий',
+ 'scenes.apps.tasks.no_tasks': 'У вас нет активных задач',
+ 'scenes.apps.tasks.task_status.todo': 'Список задач',
'scenes.apps.tasks.task_status.current': 'Текущий',
'scenes.apps.tasks.task_status.done': 'Сделано',
'scenes.apps.tasks.task_status.cancelled': 'Отложено',
@@ -1005,7 +1010,7 @@ export default {
'scenes.apps.tasks.task.edit.end_date': 'Дата окончания',
'scenes.apps.tasks.task.edit.do_not_create_event': 'Не создать событие',
'scenes.apps.tasks.task.edit.create_event_in_task_calendar': 'Календарь задач',
- 'scenes.apps.tasks.task.edit.checklist': 'Список заданий',
+ 'scenes.apps.tasks.task.edit.checklist': 'Список задач',
'scenes.apps.tasks.task.edit.weight': 'Примерная продолжительность',
'scenes.apps.tasks.task.edit.weight_unit': 'час(ов)',
'scenes.apps.tasks.list_done': 'Сделано',
@@ -1016,8 +1021,8 @@ export default {
'scenes.apps.tasks.list_modal.danger_zone': 'Зона опасности',
'scenes.apps.tasks.list_modal.remove': 'Удалить список и задачи',
'scenes.apps.tasks.list_modal.predefined_participants': 'Предопределенные участники',
- 'scenes.apps.tasks.list_modal.archive_all_tasks': 'Архивировать все задания',
- 'scenes.apps.tasks.list_modal.remove_archived_tasks': 'Удалить заархивированные задания ($1)',
+ 'scenes.apps.tasks.list_modal.archive_all_tasks': 'Архивировать все задачи',
+ 'scenes.apps.tasks.list_modal.remove_archived_tasks': 'Удалить заархивированные задачи ($1)',
'scenes.apps.tasks.no_task_selected': 'Выбрать задачу',
'scenes.apps.tasks.board_untitled': 'Проект',
'scenes.login.footer.go_to_twake': 'Перейти к twakeapp.com',
@@ -1140,8 +1145,6 @@ export default {
'scenes.app.workspaces.welcome_page.we_sent_you_mail': 'Мы отправили вам код проверки через $1',
'scenes.app.workspaces.welcome_page.done': 'Я закончил',
'scenes.login.forgot_password.finished': 'Ваш пароль был успешно обновлен.',
- 'general.update': 'Обновить',
- 'general.remove': 'Удалить',
'scenes.apps.account.account.description_main':
'Ваш главный адрес - это тот, на который Twake отправляет ваши уведомления. Ваши вторичные адреса позволяют автоматически приглашать вас на рабочие места, которые их используют.',
'scenes.apps.account.account.emails.description':
@@ -1157,7 +1160,7 @@ export default {
'scenes.apps.account.account.email_add_modal.confirm': 'Подтвердить эту электронную почту',
'app.name.twake_calendar': 'Календарь',
'app.name.twake_drive': 'Документы',
- 'app.name.twake_tasks': 'Заданий',
+ 'app.name.twake_tasks': 'Задачи',
'components.calendar.repetition.everyday': 'Ежедневно',
'components.calendar.repetition.does_not_repeat': 'Однократно',
'components.calendar.repetition.weekly_on': 'Еженедельно по $1',
@@ -1201,7 +1204,8 @@ export default {
'scenes.app.channelsbar.currentuser.update': 'Обновить',
'scenes.app.channelsbar.currentuser.desactivated_notifiations_information':
'Ваши уведомления отключены ночью от $1 до $2.',
- 'scenes.app.channelsbar.currentuser.desactivated_notifiations_information_until': '',
+ 'scenes.app.channelsbar.currentuser.desactivated_notifiations_information_until':
+ 'Ваши уведомления отключены до $1:$2.',
'scenes.app.channelsbar.currentuser.desactivated_notifications_message':
'Ваши уведомления отключены.',
'scenes.app.channelsbar.currentuser.disable_notifications': 'Отключить',
@@ -1215,10 +1219,10 @@ export default {
'scenes.app.channelsbar.channel_removing_confirmation': 'Удалить канал',
'scenes.app.channelsbar.channelsapps.apps': 'ПРИЛОЖЕНИЯ',
'scenes.app.channelsbar.channelsuser.invite_collaborators': 'Пригласите сотрудников',
- 'scenes.app.channelsbar.channelsuser.new_private_discussion': 'Новая приватная дискусси',
+ 'scenes.app.channelsbar.channelsuser.new_private_discussion': 'Новое личное сообщение',
'scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters':
'Никаких личных сообщений, приглашайте своих сотрудников!',
- 'scenes.app.channelsbar.channelsuser.private_messages': 'Прямые сообщения',
+ 'scenes.app.channelsbar.channelsuser.private_messages': 'Личные сообщения',
'scenes.app.channelsbar.channelsworkspace.channel_title': 'КАНАЛЫ',
'scenes.app.channelsbar.channelsworkspace.create_channel': 'Создать канал',
'scenes.app.channelsbar.channelsworkspace.group_name': 'Название группы',
@@ -1250,7 +1254,10 @@ export default {
'scenes.app.channelsbar.installation_desktop_tutorial': 'Установить настольное приложение',
'scenes.app.channelsbar.invitation_collaboraors_tutorial':
'Пригласите своих сотрудников в ваше рабочее пространство.',
+ 'scenes.app.channelsbar.public_channel_label': 'Открытый канал',
'scenes.app.channelsbar.private_channel_label': 'Частный канал',
+ 'scenes.app.channelsbar.private_channel_message':
+ 'Это открытый канал, все рабочее пространство будет приглашено!',
'scenes.app.channelsbar.save_channel_button': 'Сохранить',
'scenes.app.channelsbar.sending_message_instruction': 'Отправить первое сообщение в дискуссию',
'scenes.app.channelsbar.tutorial_alert': 'Никогда больше не показывать этот кадр?',
@@ -1288,13 +1295,15 @@ export default {
'scenes.app.popup.appsparameters.pages.app_grp_label': 'Группа приложений',
'scenes.app.popup.appsparameters.pages.app_informations':
'Эта строка идентифицирует ваше приложение и будет использоваться в командах сообщений.',
+ 'scenes.app.popup.appsparameters.pages.app_name_label': 'Название приложения',
'scenes.app.popup.appsparameters.pages.app_modification_right':
'Все менеджеры этой компании смогут редактировать это приложение.',
'scenes.app.popup.appsparameters.pages.app_privileges_information':
'Определите, что ваше приложение может редактировать и читать.',
'scenes.app.popup.appsparameters.pages.app_privileges_label': 'Привилегии приложени',
'scenes.app.popup.appsparameters.pages.app_surname': 'Упрощенное название вашего приложения',
- 'scenes.app.popup.appsparameters.pages.app_update': '',
+ 'scenes.app.popup.appsparameters.pages.app_update':
+ 'Обновить приложение $1 (это приложение использовано $2 раз(а).)',
'scenes.app.popup.appsparameters.pages.application_title': 'Приложение',
'scenes.app.popup.appsparameters.pages.apps_connectors_small_text':
'Создавайте и администрируйте свои приложения и разъёмы.',
@@ -1306,7 +1315,8 @@ export default {
'scenes.app.popup.appsparameters.pages.available_publication_alert':
'Публикация вашей заявки в настоящее время ожидает подтверждения командами Twake.',
'scenes.app.popup.appsparameters.pages.button_force': 'Применить принудительно по всей компании',
- 'scenes.app.popup.appsparameters.pages.call_event_handlers': '',
+ 'scenes.app.popup.appsparameters.pages.call_event_handlers':
+ "Событие типа '$1' и id '$2' с пассивами '$3'.",
'scenes.app.popup.appsparameters.pages.categories_label': 'Категории',
'scenes.app.popup.appsparameters.pages.company_label': 'Владелец компании',
'scenes.app.popup.appsparameters.pages.configuration_label': 'Конфигурация',
@@ -1352,7 +1362,7 @@ export default {
'scenes.app.popup.appsparameters.pages.modify_public_data':
'Редактируйте публичные данные вашего приложения.',
'scenes.app.popup.appsparameters.pages.new_app_title': 'Новое приложение',
- 'scenes.app.popup.appsparameters.pages.ok_user_code': '',
+ 'scenes.app.popup.appsparameters.pages.ok_user_code': 'ок',
'scenes.app.popup.appsparameters.pages.optimal_format': 'Оптимальный формат : 48x48пкс.',
'scenes.app.popup.appsparameters.pages.parameters_form_small_text':
'Неопубликованное приложение будет работать только в вашей компании, если вы хотите сделать его доступным для всех пользователей Twake, активируйте эту опцию.',
@@ -1436,7 +1446,7 @@ export default {
'Отменить приглашение по электронной почте.',
'scenes.app.popup.workspaceparameter.pages.collaboraters_adding_button': 'Добавить сотрудников',
'scenes.app.popup.workspaceparameter.pages.collaboraters_small_text':
- 'Сотрудники в этом рабочем пространстве $1',
+ 'Количество сотрудников в этом рабочем пространстве: $1',
'scenes.app.popup.workspaceparameter.pages.collaborateurs': 'Сотрудники',
'scenes.app.popup.workspaceparameter.pages.company_developped_apps_subtitle':
'Приложения, разработанные компанией',
@@ -1454,10 +1464,11 @@ export default {
'Приложения, разработанные компанией',
'scenes.app.popup.workspaceparameter.pages.displayed_preferencies_subtitle':
'Параметры отображения',
- 'scenes.app.popup.workspaceparameter.pages.edit_level_administrater_text': '',
+ 'scenes.app.popup.workspaceparameter.pages.edit_level_administrater_text':
+ 'Администратор может конфигурировать рабочее пространство (идентификация пространства, приложений, членов пространства).',
'scenes.app.popup.workspaceparameter.pages.edit_level_user_text': '',
'scenes.app.popup.workspaceparameter.pages.extern': 'Гость',
- 'scenes.app.popup.workspaceparameter.pages.extern_guest': '',
+ 'scenes.app.popup.workspaceparameter.pages.extern_guest': 'Гостевой пользователь',
'scenes.app.popup.workspaceparameter.pages.forced_apps_text':
'Применить принудительно по всей компании',
'scenes.app.popup.workspaceparameter.pages.guest_status': 'Гость',
@@ -1475,11 +1486,12 @@ export default {
'scenes.app.popup.workspaceparameter.pages.invited_collaboraters_by_mail':
'Сотрудники, приглашенные по электронной почте',
'scenes.app.popup.workspaceparameter.pages.invited_guest_check_message':
- 'бедитесь, что используемое имя пользователя или электронная почта действительны.',
+ 'Убедитесь, что используемое имя пользователя или электронная почта действительны.',
'scenes.app.popup.workspaceparameter.pages.logo_modify_description':
'Редактировать изображения этого рабочего пространства',
'scenes.app.popup.workspaceparameter.pages.logo_subtitle': 'Логотип',
- 'scenes.app.popup.workspaceparameter.pages.modify_level': '',
+ 'scenes.app.popup.workspaceparameter.pages.modify_level':
+ 'Изменить уровень управления в компании? (это действие не является обратимым, если вы уменьшите свои права доступа)',
'scenes.app.popup.workspaceparameter.pages.name_description':
'Изменить название этого рабочего пространства',
'scenes.app.popup.workspaceparameter.pages.name_label': 'Название рабочего пространства',
@@ -1487,7 +1499,7 @@ export default {
'scenes.app.popup.workspaceparameter.pages.no_app_information':
'У вас нет приложений в этом рабочем пространстве',
'scenes.app.popup.workspaceparameter.pages.other_collaboraters-small_text':
- 'Другие сотрудники этой компании ($1)',
+ 'Остальные сотрудники компании ($1)',
'scenes.app.popup.workspaceparameter.pages.quit_workspace_menu':
'Покинуть это рабочее пространство',
'scenes.app.popup.workspaceparameter.pages.read_access_subtitle': 'Доступ с правом чтения',
@@ -1572,8 +1584,8 @@ export default {
'scenes.apps.drive.open_link': 'Открыть ссылку',
'scenes.apps.drive.files_subtitle': 'Файлы',
'scenes.apps.drive.folder_subtitle': 'Папки',
- 'scenes.apps.drive.go_out_trash_menu': 'Выйти из мусора',
- 'scenes.apps.drive.go_trash_menu': 'Перейти в мусор',
+ 'scenes.apps.drive.go_out_trash_menu': 'Выйти из корзины',
+ 'scenes.apps.drive.go_trash_menu': 'Перейти в корзину',
'scenes.apps.drive.import_from_computer_menu': 'Загрузить с компьютера',
'scenes.apps.drive.move_text': 'Переместить',
'scenes.apps.drive.new_file_menu': 'Новый файл',
@@ -1586,15 +1598,15 @@ export default {
'У вас нет приложения, позволяющего добавлять внешнее хранилище.',
'scenes.apps.drive.remove_definitely_menu': 'Удалить навсегда',
'scenes.apps.drive.restore_menu': 'Восстановить',
- 'scenes.apps.drive.throw_menu': 'Выкидывать в мусор',
- 'scenes.apps.drive.trash_empty_menu': 'Опорожнять мусор',
+ 'scenes.apps.drive.throw_menu': 'Выкидывать в корзину',
+ 'scenes.apps.drive.trash_empty_menu': 'Опорожнять корзину',
'scenes.apps.drive.unconfigured_tab': 'Эта вкладка еще не настроена.',
'scenes.apps.drive.viewer.edit_with_button': 'Отредактировать с помощью $1',
'scenes.apps.drive.viewer.loading_preview_message': 'Загрузка...',
'scenes.apps.drive.viewer.no_preview_message': 'Не могу показать такой тип файла.',
'scenes.apps.drive.viewer.open_with_button': 'Открыть с...',
'scenes.apps.messages.input.autocompletes_placeholder':
- 'Написать сообщение, использовать @ для цитирования пользователя.',
+ 'Написать сообщение. Используйте @ для упоминания определенного пользователя.',
'scenes.apps.messages.input.no_email_module_menu_text': 'У вас нет почтового модуля.',
'scenes.apps.messages.input.search_module_text': 'Поиск модулей...',
'scenes.apps.messages.input.send_button': 'Отправить',
@@ -1603,7 +1615,7 @@ export default {
'scenes.apps.messages.message.cancel_button': 'Отменить',
'scenes.apps.messages.message.modify_button': 'Редактировать',
'scenes.apps.messages.message.personal_message': 'Только вы можете увидеть это сообщение.',
- 'scenes.apps.messages.message.pinned': 'Прикреплённый',
+ 'scenes.apps.messages.message.pinned': 'Закрепленное сообщение',
'scenes.apps.messages.message.remove_button': 'Удалить',
'scenes.apps.messages.message.reply_button': 'Ответить',
'scenes.apps.messages.message.show_on_right': 'Показать справа',
@@ -1670,7 +1682,7 @@ export default {
'login.welcome': '',
'login.welcome_sub': '',
'scenes.app.sidemenu.channels.private': 'Частный',
- 'scenes.app.sidemenu.channels.private_messages': 'ПРЯМЫЕ СООБЩЕНИЯ',
+ 'scenes.app.sidemenu.channels.private_messages': 'ЛИЧНЫЕ СООБЩЕНИЯ',
'scenes.app.sidemenu.channels.public': 'публичный',
'scenes.app.sidemenu.user.account.manage_emails': 'Управление электронной почтой',
'scenes.app.sidemenu.user.current_user_information': 'Вы зарегистрированы под аккаунтом @$1.',
@@ -1692,7 +1704,7 @@ export default {
'scenes.apps.drive.import_image': 'Загрузить изображение с устройства',
'scenes.apps.drive.import_document': 'Загрузить файл с устройства',
'scenes.apps.drive.no_more': 'Нечего больше показывать.',
- 'scenes.apps.drive.trash': 'Мусор',
+ 'scenes.apps.drive.trash': 'Корзина',
'scenes.apps.drive.top_menu_more': 'Больше',
'scenes.apps.drive.top_menu_no_items': '$1 элементы',
'scenes.apps.messages.from_camera': 'С камеры',
@@ -1745,7 +1757,7 @@ export default {
'scenes.apps.drive.open_link': 'Открыть ссылку в новом окне',
'scenes.apps.drive.viewer.download_desktop':
'Скачать Twake Desktop для предварительного просмотра в приложении',
- 'scenes.apps.tasks.my_tasks': 'Мои задания',
+ 'scenes.apps.tasks.my_tasks': 'Мои задачи',
'scenes.apps.tasks.board.place_holder': 'Название доски',
'scenes.apps.tasks.board.tasks.subtask': 'Подзадача',
'scenes.apps.tasks.board.tasks.add_subtask': 'Добавить подзадачу',
@@ -1810,7 +1822,7 @@ export default {
'components.searchpopup.last_modif': 'Последняя модификация',
'components.searchpopup.sender': 'Отправитель',
'components.searchpopup.mentions': 'Упоминания',
- 'components.searchpopup.only_pinned': 'Только прикрепленные сообщения',
+ 'components.searchpopup.only_pinned': 'Только закрепленные сообщения',
'components.alert.confirm': 'Подтвердите ваше действие',
'components.alert.confirm_click': 'Подтвердите ваше действие, нажав на кнопку Подтвердить.',
'components.searchpopup.tasks': 'Задачи',
@@ -1819,14 +1831,14 @@ export default {
'components.searchpopup.show_filters': 'фильтры',
'components.searchpopup.load_more': 'Загрузить больше результатов',
'general.more': 'Больше',
- 'scenes.apps.board.archived_tasks': 'Архивные задания ($1)',
- 'scenes.apps.board.active_tasks': 'Активные задания',
+ 'scenes.apps.board.archived_tasks': 'Архивные задачи ($1)',
+ 'scenes.apps.board.active_tasks': 'Активные задачи',
'scenes.apps.board.kanban': 'Канбан',
'scenes.apps.board.display_as': 'Показать как',
'scenes.apps.board.new_task': '+ Новая задача',
'scenes.apps.board.all_boards': 'Все доски',
'components.userlistmanager.no_users': 'Нет пользователей.',
- 'scenes.apps.drive.used': 'используемый в этой папке',
+ 'scenes.apps.drive.used': 'использовано в этой папке',
'components.reminder.notification': 'Уведомления',
'components.reminder.minutes_bef': 'минут(ы) до',
'components.reminder.hours_bef': 'часа(ов) до',
@@ -1847,7 +1859,7 @@ export default {
'scenes.apps.drive.remove_attachs': 'Снять вложения',
'components.drive.elements.see': 'Посмотреть',
'components.drive.elements.current_name': 'Текущее название : ',
- 'scenes.apps.drive.right_preview.public': 'Открытый доступ',
+ 'scenes.apps.drive.right_preview.public': 'Открыть доступ',
'components.drive.elements.configurate_mod': 'Настройка модуля...',
'components.drive.elements.manage_version': 'Управление версиями',
'scenes.app.popup.createcompany.try_again': 'Пожалуйста повторите.',
@@ -1855,5 +1867,7 @@ export default {
'scenes.app.popup.workspace.create_temp': 'Создать временный аккаунт',
'scenes.apps.messages.select_computer': 'Выбрать из компьютера',
'scenes.apps.messages.select_twake': 'Выбрать в Twake Документы',
- 'scenes.apps.tasks.active_tasks': 'активные(х) задания(й)',
+ 'scenes.apps.tasks.active_tasks': 'активные(х) задачи(ь)',
+ 'scenes.apps.drive.right_preview.versions': 'Версии',
+ 'scenes.app.popup.appsparameters.pages.icon': '',
};
diff --git a/twake/frontend/src/app/services/search/search.js b/twake/frontend/src/app/services/search/search.js
index 1c863f57b8..21715a8b35 100755
--- a/twake/frontend/src/app/services/search/search.js
+++ b/twake/frontend/src/app/services/search/search.js
@@ -121,7 +121,7 @@ class search extends Observable {
}
setTimeout(() => {
var app_id = Collections.get('applications').findBy({
- name: Languages.t('services.search.records', [], 'Documents'),
+ name: Languages.t('app.name.twake_drive', [], 'Documents'),
})[0];
if (app_id) {
app_id = app_id.id;
diff --git a/twake/frontend/src/app/services/user/notifications.js b/twake/frontend/src/app/services/user/notifications.js
index 4a8f7b2ceb..1712381983 100755
--- a/twake/frontend/src/app/services/user/notifications.js
+++ b/twake/frontend/src/app/services/user/notifications.js
@@ -70,7 +70,7 @@ class Notifications extends Observable {
{ uri: 'notifications/' + User.getCurrentUserId(), options: { type: 'notifications' } },
],
},
- this.notifications_collection_key
+ this.notifications_collection_key,
);
//This one receive notification badge updates
@@ -84,7 +84,7 @@ class Notifications extends Observable {
this.updateBadge(
'workspace',
data.notification.workspace_id,
- data.notification.hasnotifications ? 1 : 0
+ data.notification.hasnotifications ? 1 : 0,
);
}
@@ -92,7 +92,7 @@ class Notifications extends Observable {
this.updateBadge(
'group',
data.notification.group_id,
- data.notification.hasnotifications ? 1 : 0
+ data.notification.hasnotifications ? 1 : 0,
);
}
}
@@ -112,7 +112,7 @@ class Notifications extends Observable {
if (type == 'channel') {
var old_count = (this.notification_by_channel[id] || {}).count;
var channel = Collections.get('channels').findByFrontId(
- ChannelsService.currentChannelFrontId
+ ChannelsService.currentChannelFrontId,
) || { id: ChannelsService.currentChannelFrontId };
if (
Globals.window.document.hasFocus() &&
@@ -147,7 +147,7 @@ class Notifications extends Observable {
this.checkWorkspaceAndGroupBadge();
if (shouldNotify) this.notify();
},
- count > (this.notification_by_group[id] || {}).count ? delay : 10
+ count > (this.notification_by_group[id] || {}).count ? delay : 10,
);
}
@@ -168,7 +168,7 @@ class Notifications extends Observable {
this.checkWorkspaceAndGroupBadge();
if (shouldNotify) this.notify();
},
- count > (this.notification_by_workspace[id] || {}).count ? delay : 10
+ count > (this.notification_by_workspace[id] || {}).count ? delay : 10,
);
}
@@ -193,7 +193,7 @@ class Notifications extends Observable {
this.checkWorkspaceAndGroupBadge();
if (shouldNotify) this.notify();
},
- count > (this.notification_by_channel[id] || {}).count ? delay : 10
+ count > (this.notification_by_channel[id] || {}).count ? delay : 10,
);
}
@@ -257,7 +257,7 @@ class Notifications extends Observable {
var channel = Collections.get('channels').find(id);
Collections.get('channels').completeObject(
{ _user_last_message_increment: channel.messages_increment },
- channel.front_id
+ channel.front_id,
);
});
this.notification_by_channel = {};
diff --git a/twake/frontend/src/app/services/user/user.js b/twake/frontend/src/app/services/user/user.js
index 3476735be7..728da8002c 100755
--- a/twake/frontend/src/app/services/user/user.js
+++ b/twake/frontend/src/app/services/user/user.js
@@ -84,7 +84,16 @@ class User {
.toLocaleLowerCase()
.indexOf(query.toLocaleLowerCase()) >= 0
) {
- res.push(user);
+ let in_scope = true;
+ if (scope === 'workspace') {
+ in_scope = (user.workspaces_id || []).indexOf(options.workspace_id) >= 0;
+ }
+ if (scope === 'group') {
+ in_scope = (user.groups_id || []).indexOf(options.group_id) >= 0;
+ }
+ if (in_scope) {
+ res.push(user);
+ }
}
if (res.length > 30) {
return false;
diff --git a/twake/frontend/src/app/services/utils/datetime.js b/twake/frontend/src/app/services/utils/datetime.js
index c09ec04a0b..25af157381 100755
--- a/twake/frontend/src/app/services/utils/datetime.js
+++ b/twake/frontend/src/app/services/utils/datetime.js
@@ -1,4 +1,9 @@
import moment from 'moment';
+import 'moment/locale/ru';
+import 'moment/locale/fr';
+import 'moment/locale/de';
+import 'moment/locale/ja';
+import 'moment/locale/es';
import Observable from 'services/observable.js';
import UserService from 'services/user/user.js';
diff --git a/twake/frontend/src/app/services/workspaces/workspaces_apps.js b/twake/frontend/src/app/services/workspaces/workspaces_apps.js
index e41d8572bf..3c6c1c1cda 100755
--- a/twake/frontend/src/app/services/workspaces/workspaces_apps.js
+++ b/twake/frontend/src/app/services/workspaces/workspaces_apps.js
@@ -33,7 +33,7 @@ class WorkspacesApps extends Observable {
getApps() {
return (
Object.keys(this.apps_by_workspace[Workspaces.currentWorkspaceId] || {}).map(
- id => this.apps_by_workspace[Workspaces.currentWorkspaceId][id]
+ id => this.apps_by_workspace[Workspaces.currentWorkspaceId][id],
) || []
);
}
@@ -164,7 +164,7 @@ class WorkspacesApps extends Observable {
this.apps_by_group[res.workspace_app.group_id][res.workspace_app.app.id] = app_link;
Collections.get('applications').completeObject(
res.workspace_app.app,
- res.workspace_app.app.front_id
+ res.workspace_app.app.front_id,
);
} else if (res.type == 'remove') {
delete this.apps_by_workspace[res.workspace_app.workspace_id][res.workspace_app.app.id];
@@ -301,7 +301,7 @@ class WorkspacesApps extends Observable {
if (app.simple_name.toLocaleLowerCase() == 'twake_tasks') {
return 'check-square';
}
- return app.icon_url;
+ return app.icon_url || 'puzzle-piece';
}
}