diff --git a/.env.docker b/.env.docker index af3a54dea..399e91d7d 100644 --- a/.env.docker +++ b/.env.docker @@ -1,3 +1,5 @@ +TIMEZONE=PRC + APP_NAME=DooTask APP_ENV=local APP_KEY= diff --git a/.env.example b/.env.example index 3e36d2aeb..49c2212c5 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,5 @@ +TIMEZONE=PRC + APP_NAME=Laravel APP_ENV=local APP_KEY= diff --git a/app/Http/Controllers/Api/ApproveController.php b/app/Http/Controllers/Api/ApproveController.php index 35f871fd2..07936e9e6 100755 --- a/app/Http/Controllers/Api/ApproveController.php +++ b/app/Http/Controllers/Api/ApproveController.php @@ -29,7 +29,7 @@ class ApproveController extends AbstractController private $flow_url = ''; public function __construct() { - $this->flow_url = env('FLOW_URL') ?: 'http://dootask-approve-'.env('APP_ID'); + $this->flow_url = env('FLOW_URL') ?: 'http://approve'; } /** @@ -74,6 +74,7 @@ class ApproveController extends AbstractController $ret = Ihttp::ihttp_post($this->flow_url.'/api/v1/workflow/procdef/findAll', json_encode($data)); $procdef = json_decode($ret['ret'] == 1 ? $ret['data'] : '{}', true); if (!$procdef || $procdef['status'] != 200 || $ret['ret'] == 0) { + info($ret); return Base::retError($procdef['message'] ?? '查询失败'); } return Base::retSuccess('success', Base::arrayKeyToUnderline($procdef['data'])); diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 015613234..e2785e7e3 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -80,7 +80,7 @@ class DialogController extends AbstractController return Base::retError('请输入搜索关键词'); } // 搜索会话 - $dialogs = WebSocketDialog::select(['web_socket_dialogs.*', 'u.top_at', 'u.mark_unread', 'u.silence', 'u.updated_at as user_at']) + $dialogs = WebSocketDialog::select(['web_socket_dialogs.*', 'u.top_at', 'u.mark_unread', 'u.silence', 'u.color', 'u.updated_at as user_at']) ->join('web_socket_dialog_users as u', 'web_socket_dialogs.id', '=', 'u.dialog_id') ->where('web_socket_dialogs.name', 'LIKE', "%{$key}%") ->where('u.userid', $user->userid) @@ -117,7 +117,7 @@ class DialogController extends AbstractController } // 搜索消息会话 if (count($list) < 20) { - $msgs = WebSocketDialog::select(['web_socket_dialogs.*', 'u.top_at', 'u.mark_unread', 'u.silence', 'u.updated_at as user_at', 'm.id as search_msg_id']) + $msgs = WebSocketDialog::select(['web_socket_dialogs.*', 'u.top_at', 'u.mark_unread', 'u.silence', 'u.color', 'u.updated_at as user_at', 'm.id as search_msg_id']) ->join('web_socket_dialog_users as u', 'web_socket_dialogs.id', '=', 'u.dialog_id') ->join('web_socket_dialog_msgs as m', 'web_socket_dialogs.id', '=', 'm.dialog_id') ->where('u.userid', $user->userid) @@ -154,7 +154,7 @@ class DialogController extends AbstractController // $dialog_id = intval(Request::input('dialog_id')); // - $item = WebSocketDialog::select(['web_socket_dialogs.*', 'u.top_at', 'u.mark_unread', 'u.silence', 'u.updated_at as user_at']) + $item = WebSocketDialog::select(['web_socket_dialogs.*', 'u.top_at', 'u.mark_unread', 'u.silence', 'u.color', 'u.updated_at as user_at']) ->join('web_socket_dialog_users as u', 'web_socket_dialogs.id', '=', 'u.dialog_id') ->where('web_socket_dialogs.id', $dialog_id) ->where('u.userid', $user->userid) @@ -1542,6 +1542,47 @@ class DialogController extends AbstractController ]); } + /** + * @api {get} api/dialog/msg/color 30. 设置颜色 + * + * @apiDescription 需要token身份 + * @apiVersion 1.0.0 + * @apiGroup dialog + * @apiName msg__color + * + * @apiParam {Number} dialog_id 会话ID + * @apiParam {String} color 颜色 + * + * @apiSuccess {Number} ret 返回状态码(1正确、0错误) + * @apiSuccess {String} msg 返回信息(错误描述) + * @apiSuccess {Object} data 返回数据 + */ + public function msg__color() + { + $user = User::auth(); + + $dialogId = intval(Request::input('dialog_id')); + $color = Request::input('color',''); + $dialogUser = WebSocketDialogUser::whereUserid($user->userid)->whereDialogId($dialogId)->first(); + if (!$dialogUser) { + return Base::retError("会话不存在"); + } + // + $dialogData = WebSocketDialog::find($dialogId); + if (empty($dialogData)) { + return Base::retError("会话不存在"); + } + // + $dialogUser->color = $color; + $dialogUser->save(); + // + $data = [ + 'id' => $dialogId, + 'color' => $color + ]; + return Base::retSuccess("success", $data); + } + /** * @api {get} api/dialog/group/add 33. 新增群组 * diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 6feabef9c..4c507ed6d 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -995,10 +995,10 @@ class ProjectController extends AbstractController ->groupBy('task_id'); }, 'task_files', 'task_files.task_id', '=', 'project_tasks.id'); $builder->leftJoinSub(function ($query) { - $query->select('id', DB::raw('count(*) as msg_num')) - ->from('web_socket_dialogs') - ->groupBy('id'); - }, 'socket_dialogs', 'socket_dialogs.id', '=', 'project_tasks.id'); + $query->select('dialog_id', DB::raw('count(*) as msg_num')) + ->from('web_socket_dialog_msgs') + ->groupBy('dialog_id'); + }, 'socket_dialog_msgs', 'socket_dialog_msgs.dialog_id', '=', 'project_tasks.dialog_id'); $builder->leftJoinSub(function ($query) { $query->select('parent_id', DB::raw('count(*) as sub_num, sum(CASE WHEN complete_at IS NOT NULL THEN 1 ELSE 0 END) sub_complete') ) ->from('project_tasks') @@ -1007,7 +1007,7 @@ class ProjectController extends AbstractController // 给前缀“_”是为了不触发获取器 $prefix = DB::getTablePrefix(); $builder->selectRaw("{$prefix}task_files.file_num as _file_num"); - $builder->selectRaw("{$prefix}socket_dialogs.msg_num as _msg_num"); + $builder->selectRaw("{$prefix}socket_dialog_msgs.msg_num as _msg_num"); $builder->selectRaw("{$prefix}sub_task.sub_num as _sub_num"); $builder->selectRaw("{$prefix}sub_task.sub_complete as _sub_complete"); $builder->selectRaw(" diff --git a/app/Models/WebSocketDialog.php b/app/Models/WebSocketDialog.php index de263e044..37befd4be 100644 --- a/app/Models/WebSocketDialog.php +++ b/app/Models/WebSocketDialog.php @@ -76,7 +76,7 @@ class WebSocketDialog extends AbstractModel */ public function getDialogList($userid, $updated = "", $deleted = "") { - $builder = WebSocketDialog::select(['web_socket_dialogs.*', 'u.top_at', 'u.mark_unread', 'u.silence', 'u.updated_at as user_at']) + $builder = WebSocketDialog::select(['web_socket_dialogs.*', 'u.top_at', 'u.mark_unread', 'u.silence', 'u.color', 'u.updated_at as user_at']) ->join('web_socket_dialog_users as u', 'web_socket_dialogs.id', '=', 'u.dialog_id') ->where('u.userid', $userid); if ($updated) { diff --git a/app/Models/WebSocketDialogMsg.php b/app/Models/WebSocketDialogMsg.php index 0ee8dd69e..f31f21841 100644 --- a/app/Models/WebSocketDialogMsg.php +++ b/app/Models/WebSocketDialogMsg.php @@ -849,6 +849,8 @@ class WebSocketDialogMsg extends AbstractModel $dialogMsg->updateInstance($updateData); $dialogMsg->key = $dialogMsg->generateMsgKey(); $dialogMsg->save(); + // + $dialogMsg->msgJoinGroup($dialog, $dialogMsg); // $dialog->pushMsg('update', array_merge($updateData, [ 'id' => $dialogMsg->id @@ -896,4 +898,41 @@ class WebSocketDialogMsg extends AbstractModel return Base::retSuccess('发送成功', $dialogMsg); } } + + /** + * 将被@的人加入群 + * @param $dialogMsg 发送的消息 + * @param $dialog 对话 + * @return array + */ + public static function msgJoinGroup($dialog, $dialogMsg) + { + $updateds = []; + $silences = []; + foreach ($dialog->dialogUser as $dialogUser) { + $updateds[$dialogUser->userid] = $dialogUser->updated_at; + $silences[$dialogUser->userid] = $dialogUser->silence; + } + $userids = array_keys($silences); + // 提及会员 + $mentions = []; + if ($dialogMsg->type === 'text') { + preg_match_all("//", $dialogMsg->msg['text'], $matchs); + if ($matchs) { + $mentions = array_values(array_filter(array_unique($matchs[1]))); + } + } + // 将会话以外的成员加入会话内 + $diffids = array_values(array_diff($mentions, $userids)); + if ($diffids) { + // 仅(群聊)且(是群主或没有群主)才可以@成员以外的人 + if ($dialog->type === 'group' && in_array($dialog->owner_id, [0, $dialogMsg->userid])) { + $dialog->joinGroup($diffids, $dialogMsg->userid); + $dialog->pushMsg("groupJoin", null, $diffids); + $userids = array_values(array_unique(array_merge($mentions, $userids))); + } + } + + return compact('updateds', 'silences', 'userids', 'mentions'); + } } diff --git a/app/Tasks/WebSocketDialogMsgTask.php b/app/Tasks/WebSocketDialogMsgTask.php index 396825826..bb5509239 100644 --- a/app/Tasks/WebSocketDialogMsgTask.php +++ b/app/Tasks/WebSocketDialogMsgTask.php @@ -91,33 +91,13 @@ class WebSocketDialogMsgTask extends AbstractTask if (empty($dialog)) { return; } - $updateds = []; - $silences = []; - foreach ($dialog->dialogUser as $dialogUser) { - $updateds[$dialogUser->userid] = $dialogUser->updated_at; - $silences[$dialogUser->userid] = $dialogUser->silence; - } - $userids = array_keys($silences); - - // 提及会员 - $mentions = []; - if ($msg->type === 'text') { - preg_match_all("//", $msg->msg['text'], $matchs); - if ($matchs) { - $mentions = array_values(array_filter(array_unique($matchs[1]))); - } - } // 将会话以外的成员加入会话内 - $diffids = array_values(array_diff($mentions, $userids)); - if ($diffids) { - // 仅(群聊)且(是群主或没有群主)才可以@成员以外的人 - if ($dialog->type === 'group' && in_array($dialog->owner_id, [0, $msg->userid])) { - $dialog->joinGroup($diffids, $msg->userid); - $dialog->pushMsg("groupJoin", null, $diffids); - $userids = array_values(array_unique(array_merge($mentions, $userids))); - } - } + $msgJoinGroupResult = $msg->msgJoinGroup($dialog, $msg); + $updateds = $msgJoinGroupResult['updateds']; + $silences = $msgJoinGroupResult['silences']; + $userids = $msgJoinGroupResult['userids']; + $mentions = $msgJoinGroupResult['mentions']; // 推送目标①:会话成员/群成员 $array = []; diff --git a/config/app.php b/config/app.php index 987bbb270..484ade76c 100644 --- a/config/app.php +++ b/config/app.php @@ -67,7 +67,7 @@ return [ | */ - 'timezone' => 'PRC', + 'timezone' => env('TIMEZONE', 'PRC'), /* |-------------------------------------------------------------------------- diff --git a/database/migrations/2023_08_10_093619_add_web_socket_dialog_users_color.php b/database/migrations/2023_08_10_093619_add_web_socket_dialog_users_color.php new file mode 100644 index 000000000..b96e01c0d --- /dev/null +++ b/database/migrations/2023_08_10_093619_add_web_socket_dialog_users_color.php @@ -0,0 +1,36 @@ +string('color', 20)->nullable()->default('')->after('important')->comment('颜色'); + } + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + Schema::table('web_socket_dialog_users', function (Blueprint $table) { + $table->dropColumn("color"); + }); + } +} diff --git a/database/migrations/2023_08_10_233619_repair_project_tasks_is_all_visible.php b/database/migrations/2023_08_10_233619_repair_project_tasks_is_all_visible.php new file mode 100644 index 000000000..4b7ee6db2 --- /dev/null +++ b/database/migrations/2023_08_10_233619_repair_project_tasks_is_all_visible.php @@ -0,0 +1,42 @@ + 0; + "); + } + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + + } +} diff --git a/docker-compose.yml b/docker-compose.yml index 9d0a3e518..f16532e26 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -149,8 +149,9 @@ services: approve: container_name: "dootask-approve-${APP_ID}" - image: "hitosea2020/go-approve:0.1.3" + image: "hitosea2020/go-approve:0.1.4" environment: + TZ: "${TIMEZONE:-PRC}" MYSQL_HOST: "${DB_HOST}" MYSQL_PORT: "${DB_PORT}" MYSQL_DBNAME: "${DB_DATABASE}" diff --git a/public/js/emoticon.all.js b/public/js/emoticon.all.js index d75a801a8..ed308554b 100644 --- a/public/js/emoticon.all.js +++ b/public/js/emoticon.all.js @@ -5,40 +5,40 @@ "path": "18", "icon": "icon.png", "list": [ - {"name": "爱你", "key": "爱你 爱你哟 爱老虎油 爱你啦 亲亲 亲一个 啵啵 比心 笔芯 爱心", "path": "1.gif"}, - {"name": "搬砖", "key": "搬砖 工作 努力", "path": "2.gif"}, - {"name": "不愧是精英", "key": "不愧是精英 精英 大佬 厉害 真棒 你真棒 牛逼 6 666 不愧是你 还得是你", "path": "3.gif"}, - {"name": "不想理你", "key": "生气 不理 不开心 哼 不想理你", "path": "4.gif"}, - {"name": "不想面对", "key": "不想面对 瑟瑟发抖 体重 担忧 不想理你 又胖了", "path": "5.gif"}, - {"name": "沉迷工作", "key": "工作 认真 做事 干活 电脑 沉迷工作", "path": "6.gif"}, - {"name": "打卡了么", "key": "打卡 上班 报 记得打卡", "path": "7.gif"}, - {"name": "发生了啥", "key": "冒泡 浮出水面 发生了啥 八卦 露头 我看看 怎么个事 怎么了", "path": "8.gif"}, - {"name": "给你个眼神", "key": "眼神 真的 质疑 疑问 不确定 给你个眼神", "path": "9.gif"}, - {"name": "恭喜发财", "key": "恭喜发财 新年好 新年 拜年", "path": "10.gif"}, - {"name": "跪谢", "key": "谢谢 感动 跪 多谢 THANKS THANK YOU 谢了", "path": "11.gif"}, - {"name": "Hi", "key": "Hi 打招呼 欢迎 招呼 你好 哈喽 哈啰 hello 大家好", "path": "12.gif"}, + {"name": "爱你", "key": "爱你哟 爱老虎油 爱你啦 亲亲 亲一个 啵啵", "path": "1.gif"}, + {"name": "搬砖", "key": "工作 努力", "path": "2.gif"}, + {"name": "不愧是精英", "key": "精英 大佬 厉害 真棒 你真棒 牛逼", "path": "3.gif"}, + {"name": "不想理你", "key": "生气 不理 不开心", "path": "4.gif"}, + {"name": "不想面对", "key": "瑟瑟发抖 体重", "path": "5.gif"}, + {"name": "沉迷工作", "key": "工作 认真 做事 干活 电脑", "path": "6.gif"}, + {"name": "打卡了么", "key": "打卡 上班 报", "path": "7.gif"}, + {"name": "发生了啥", "key": "冒泡 浮出水面 八卦 露头", "path": "8.gif"}, + {"name": "给你个眼神", "key": "眼神 真的 质疑 疑问 不确定", "path": "9.gif"}, + {"name": "恭喜发财", "key": "新年好 新年 拜年", "path": "10.gif"}, + {"name": "跪谢", "key": "谢谢 感动 跪", "path": "11.gif"}, + {"name": "Hi", "key": "打招呼 欢迎 招呼 你好 好", "path": "12.gif"}, {"name": "欢迎欢迎", "key": "欢迎 新人 兴奋 开心 庆祝 喝彩 气氛组", "path": "13.gif"}, - {"name": "加油", "key": "加油 喝彩 气氛组", "path": "14.gif"}, - {"name": "静静看着你", "key": "静静 看着 不说话 沉默 静静看着你 无语 看你表演", "path": "15.gif"}, - {"name": "开会啦", "key": "开会 会 通知 敲锣 开会啦 开会了", "path": "16.gif"}, - {"name": "可以吗", "key": "可以吗 害羞 不好意思 脸红 可以 可以不", "path": "17.gif"}, - {"name": "迷之自信", "key": "自信 迷之自信 自我欣赏 自恋 我真帅", "path": "18.gif"}, - {"name": "明白", "key": "明白 收到 好的 收 OK", "path": "19.gif"}, - {"name": "摸摸", "key": "摸摸 摸头 你真乖 乖 棒", "path": "20.gif"}, - {"name": "你真棒", "key": "大拇指 你真棒 太棒了 太棒啦 棒棒棒 棒", "path": "21.gif"}, - {"name": "佩服", "key": "佩服 五体投地 崇拜 仰慕 牛逼 厉害", "path": "22.gif"}, - {"name": "撒花", "key": "撒花 欢迎 花 开心 耶 真好 真棒", "path": "23.gif"}, - {"name": "生日快乐", "key": "生日快乐 吃蛋糕 蛋糕 生日", "path": "24.gif"}, - {"name": "收到", "key": "明白 收到 好的 收 已阅 已读", "path": "25.gif"}, + {"name": "加油", "key": "喝彩 气氛组", "path": "14.gif"}, + {"name": "静静看着你", "key": "静静 看着 不说话 沉默", "path": "15.gif"}, + {"name": "开会啦", "key": "开会 会 通知 敲锣", "path": "16.gif"}, + {"name": "可以吗", "key": "害羞 不好意思", "path": "17.gif"}, + {"name": "迷之自信", "key": "自信 自我欣赏", "path": "18.gif"}, + {"name": "明白", "key": "收到 好的 收", "path": "19.gif"}, + {"name": "摸摸", "key": "摸头 你真乖 乖 棒", "path": "20.gif"}, + {"name": "你真棒", "key": "大拇指 太棒了 太棒啦 棒棒棒 棒", "path": "21.gif"}, + {"name": "佩服", "key": "五体投地 崇拜 仰慕 牛逼 厉害", "path": "22.gif"}, + {"name": "撒花", "key": "欢迎 花 开心", "path": "23.gif"}, + {"name": "生日快乐", "key": "吃蛋糕 蛋糕", "path": "24.gif"}, + {"name": "收到", "key": "明白 好的 收 已阅 已读", "path": "25.gif"}, {"name": "送你花花", "key": "送花 送你花 花 兴奋 开心 庆祝 喝彩 气氛组", "path": "26.gif"}, - {"name": "在线吃瓜", "key": "吃瓜 八卦 看戏 看热闹 在线吃瓜 凑热闹 吃瓜群众 围观", "path": "27.gif"}, - {"name": "我错了", "key": "认错 错了 哭 难过 悲伤 我错了 对不起 道歉", "path": "28.gif"}, - {"name": "我太难了", "key": "我太难了 太难了 难过 不开心 委屈", "path": "29.gif"}, - {"name": "笑而不语", "key": "笑 不说话 静静 不发表 沉默", "path": "30.gif"}, - {"name": "行行好吧", "key": "行行好 乞丐 乞求 请求 求助 给点吧", "path": "31.gif"}, - {"name": "幸福", "key": "幸福 满足 洗澡 泡澡 开心", "path": "32.gif"}, - {"name": "赞", "key": "大拇指 赞 点赞 厉害 你真棒 太棒了 太棒啦 棒棒棒 棒 6 666 牛", "path": "33.gif"}, - {"name": "走人了", "key": "下班 闪人 走人 溜人 走了 关机", "path": "34.gif"} + {"name": "在线吃瓜", "key": "吃瓜 八卦", "path": "27.gif"}, + {"name": "我错了", "key": "认错 错了 哭 难过", "path": "28.gif"}, + {"name": "我太难了", "key": "太难了 难过 不开心 委屈", "path": "29.gif"}, + {"name": "笑而不语", "key": "笑 不说话 静静 不发表", "path": "30.gif"}, + {"name": "行行好吧", "key": "行行好 乞丐 乞求 请求 求助", "path": "31.gif"}, + {"name": "幸福", "key": "满足 洗澡 泡澡", "path": "32.gif"}, + {"name": "赞", "key": "大拇指 点赞 厉害 你真棒 太棒了 太棒啦 棒棒棒 棒", "path": "33.gif"}, + {"name": "走人了", "key": "下班 闪人 走人 溜人", "path": "34.gif"} ] }, { diff --git a/public/site/en/cookie.html b/public/site/en/cookie.html new file mode 100644 index 000000000..fee903f3a --- /dev/null +++ b/public/site/en/cookie.html @@ -0,0 +1,39 @@ + + + + + Cookie Policy + + + + + + + + + +
+ + + + + diff --git a/public/site/en/cookie.md b/public/site/en/cookie.md new file mode 100644 index 000000000..d86817f98 --- /dev/null +++ b/public/site/en/cookie.md @@ -0,0 +1,80 @@ +# Cookies Policy + +Last updated: August 10, 2023 + +This Cookies Policy explains what Cookies are and how We use them. You should read this policy so You can understand what type of cookies We use, or the information We collect using Cookies and how that information is used. This Cookies Policy has been created with the help of the [Cookies Policy Generator](https://www.termsfeed.com/cookies-policy-generator/). + +Cookies do not typically contain any information that personally identifies a user, but personal information that we store about You may be linked to the information stored in and obtained from Cookies. For further information on how We use, store and keep your personal data secure, see our Privacy Policy. + +We do not store sensitive personal information, such as mailing addresses, account passwords, etc. in the Cookies We use. + +# Interpretation and Definitions + +## Interpretation + +The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural. + +## Definitions + +For the purposes of this Cookies Policy: + +- __Company__ (referred to as either "the Company", "We", "Us" or "Our" in this Cookies Policy) refers to Guangxi Hitosea Information Technology Co, No. 1411, 14/F, Building 1, Wuxiang Hangyang City, Liangqing District, Nanning City, Guangxi Zhuang Autonomous Region, China. +- __Cookies__ means small files that are placed on Your computer, mobile device or any other device by a website, containing details of your browsing history on that website among its many uses. +- __Website__ refers to DooTask, accessible from [ https://www.dootask.com/]( https://www.dootask.com/) +- __You__ means the individual accessing or using the Website, or a company, or any legal entity on behalf of which such individual is accessing or using the Website, as applicable. + +# The use of the Cookies + +## Type of Cookies We Use + +Cookies can be "Persistent" or "Session" Cookies. Persistent Cookies remain on your personal computer or mobile device when You go offline, while Session Cookies are deleted as soon as You close your web browser. + +We use both session and persistent Cookies for the purposes set out below: + +- __Necessary / Essential Cookies__ + + Type: Session Cookies + + Administered by: Us + + Purpose: These Cookies are essential to provide You with services available through the Website and to enable You to use some of its features. They help to authenticate users and prevent fraudulent use of user accounts. Without these Cookies, the services that You have asked for cannot be provided, and We only use these Cookies to provide You with those services. + +- __Functionality Cookies__ + + Type: Persistent Cookies + + Administered by: Us + + Purpose: These Cookies allow us to remember choices You make when You use the Website, such as remembering your login details or language preference. The purpose of these Cookies is to provide You with a more personal experience and to avoid You having to re-enter your preferences every time You use the Website. + + + + +## Your Choices Regarding Cookies + +If You prefer to avoid the use of Cookies on the Website, first You must disable the use of Cookies in your browser and then delete the Cookies saved in your browser associated with this website. You may use this option for preventing the use of Cookies at any time. + +If You do not accept Our Cookies, You may experience some inconvenience in your use of the Website and some features may not function properly. + +If You'd like to delete Cookies or instruct your web browser to delete or refuse Cookies, please visit the help pages of your web browser. + +- For the Chrome web browser, please visit this page from Google: [https://support.google.com/accounts/answer/32050](https://support.google.com/accounts/answer/32050) + +- For the Internet Explorer web browser, please visit this page from Microsoft: [http://support.microsoft.com/kb/278835](http://support.microsoft.com/kb/278835) + +- For the Firefox web browser, please visit this page from Mozilla: [https://support.mozilla.org/en-US/kb/delete-cookies-remove-info-websites-stored](https://support.mozilla.org/en-US/kb/delete-cookies-remove-info-websites-stored) + +- For the Safari web browser, please visit this page from Apple: [https://support.apple.com/guide/safari/manage-cookies-and-website-data-sfri11471/mac](https://support.apple.com/guide/safari/manage-cookies-and-website-data-sfri11471/mac) + +For any other web browser, please visit your web browser's official web pages. + +## More Information about Cookies + +You can learn more about cookies here: [All About Cookies by TermsFeed](https://www.termsfeed.com/blog/cookies/). + +## Contact Us + +If you have any questions about this Cookies Policy, You can contact us: + + +- By email: service@hitosea.com \ No newline at end of file diff --git a/public/site/en/index.html b/public/site/en/index.html index f13406e1d..aa8189292 100644 --- a/public/site/en/index.html +++ b/public/site/en/index.html @@ -14,6 +14,16 @@
+ +
+
+ We use first party cookies to improve your browsing experience on our website, to analyze our website traffic and to understand where our visitors are coming from. If you choose to opt-out, only strictly necessary cookies will be used.Our cookie policy +
+
+ + +
+