Merge branch 'feature/virtual-rooms-1.2' of github.com:ONLYOFFICE/AppServer into feature/virtual-rooms-1.2

This commit is contained in:
Timofey Boyko 2022-03-02 11:57:20 +03:00
commit 48ad201583
7 changed files with 296 additions and 9 deletions

View File

@ -54,3 +54,11 @@ export function getInvitationLinks() {
} }
); );
} }
export function setPortalRename(alias) {
return request({
method: "put",
url: "/portal/portalrename.json",
data: { alias },
});
}

View File

@ -25,6 +25,67 @@ export function getPortalPasswordSettings(confirmKey = null) {
return request(options); return request(options);
} }
export function setPortalPasswordSettings(
minLength,
upperCase,
digits,
specSymbols
) {
return request({
method: "put",
url: "/settings/security/password.json",
data: { minLength, upperCase, digits, specSymbols },
});
}
export function setMailDomainSettings(type, domains, inviteUsersAsVisitors) {
return request({
method: "post",
url: "/settings/maildomainsettings.json",
data: { type, domains, inviteUsersAsVisitors },
});
}
export function setIpRestrictions(data) {
return request({
method: "put",
url: "/settings/iprestrictions.json",
data,
});
}
export function setIpRestrictionsEnable(data) {
return request({
method: "put",
url: "/settings/iprestrictions/settings.json",
data,
});
}
export function setMessageSettings(turnOn) {
return request({
method: "post",
url: "/settings/messagesettings.json",
data: { turnOn },
});
}
export function setCookieSettings(lifeTime) {
return request({
method: "put",
url: "/settings/cookiesettings.json",
data: { lifeTime },
});
}
export function setLifetimeAuditSettings(loginHistoryLifeTime) {
return request({
method: "post",
url: "/audit/settings/lifetime.json",
data: { loginHistoryLifeTime },
});
}
export function getPortalTimezones(confirmKey = null) { export function getPortalTimezones(confirmKey = null) {
const options = { const options = {
method: "get", method: "get",
@ -79,6 +140,24 @@ export function getLogoUrls() {
}); });
} }
export function setWhiteLabelSettings(data) {
const options = {
method: "post",
url: "/settings/whitelabel/save.json",
data,
};
return request(options);
}
export function restoreWhiteLabelSettings(isDefault) {
return request({
method: "put",
url: "/settings/whitelabel/restore.json",
data: { isDefault },
});
}
export function getCustomSchemaList() { export function getCustomSchemaList() {
return request({ return request({
method: "get", method: "get",

View File

@ -324,6 +324,20 @@ class SettingsStore {
this.setPasswordSettings(settings); this.setPasswordSettings(settings);
}; };
setPortalPasswordSettings = async (
minLength,
upperCase,
digits,
specSymbols
) => {
const settings = await api.settings.setPortalPasswordSettings(
minLength,
upperCase,
digits,
specSymbols
);
};
setTimezones = (timezones) => { setTimezones = (timezones) => {
this.timezones = timezones; this.timezones = timezones;
}; };

View File

@ -15,6 +15,7 @@ import withCultureNames from "@appserver/common/hoc/withCultureNames";
import LanguageAndTimeZone from "./language-and-time-zone"; import LanguageAndTimeZone from "./language-and-time-zone";
import CustomTitles from "./custom-titles"; import CustomTitles from "./custom-titles";
import PortalRenaming from "./portal-renaming"; import PortalRenaming from "./portal-renaming";
import WhiteLabel from "./whitelabel";
import { Base } from "@appserver/components/themes"; import { Base } from "@appserver/components/themes";
import { Consumer } from "@appserver/components/utils/context"; import { Consumer } from "@appserver/components/utils/context";
@ -221,6 +222,7 @@ class Customization extends React.Component {
<div className="category-item-wrapper"> <div className="category-item-wrapper">
<PortalRenaming sectionWidth={context.sectionWidth} /> <PortalRenaming sectionWidth={context.sectionWidth} />
</div> </div>
<WhiteLabel />
</StyledComponent> </StyledComponent>
)} )}
</Consumer> </Consumer>

View File

@ -1,7 +1,103 @@
import React from "react"; import React, { useState } from "react";
import { withTranslation } from "react-i18next";
import styled from "styled-components";
import Loader from "@appserver/components/loader";
import HelpButton from "@appserver/components/help-button";
import FieldContainer from "@appserver/components/field-container";
import TextInput from "@appserver/components/text-input";
import SaveCancelButtons from "@appserver/components/save-cancel-buttons";
import { inject, observer } from "mobx-react";
const PortalRenaming = () => { const StyledComponent = styled.div`
return <div></div>; .margin-top {
margin-top: 20px;
}
.margin-left {
margin-left: 20px;
}
.settings-block {
margin-bottom: 70px;
}
.settings-block {
max-width: 350px;
}
.combo-button-label {
max-width: 100%;
}
.category-item-heading {
display: flex;
align-items: center;
margin-bottom: 16px;
}
.category-item-title {
font-weight: bold;
font-size: 16px;
line-height: 22px;
margin-right: 4px;
}
`;
const PortalRenaming = ({ t, theme, sectionWidth }) => {
// todo: Изменить на false
const [isLoadedData, setIsLoadedData] = useState(true);
const onSavePortalRename = () => {
// setPortalRename("waw");
};
return !isLoadedData ? (
<Loader className="pageLoader" type="rombs" size="40px" />
) : (
<>
<StyledComponent>
<div className="category-item-heading">
<div className="category-item-title">{t("Portal Renaming")}</div>
<HelpButton
iconName="static/images/combined.shape.svg"
size={12}
// tooltipContent={tooltipCustomTitlesTooltip}
/>
</div>
<div className="settings-block">
<FieldContainer
id="fieldContainerWelcomePage"
className="field-container-width"
labelText={`${t("New portal name")}:`}
isVertical={true}
>
<TextInput
scale={true}
// value={greetingTitle}
//onChange={this.onChangeGreetingTitle}
// isDisabled={isLoadingGreetingSave || isLoadingGreetingRestore}
placeholder={`${t("room")}`}
/>
</FieldContainer>
</div>
<SaveCancelButtons
onSaveClick={onSavePortalRename}
saveButtonLabel={t("Common:SaveButton")}
cancelButtonLabel={t("Common:CancelButton")}
displaySettings={true}
sectionWidth={sectionWidth}
/>
</StyledComponent>
</>
);
}; };
export default PortalRenaming; export default inject(({ auth, setup }) => {
const { theme } = auth.settingsStore;
const { setPortalRename } = setup;
return {
theme,
setPortalRename,
};
})(withTranslation(["Settings", "Common"])(observer(PortalRenaming)));

View File

@ -219,10 +219,30 @@ class WhiteLabel extends React.Component {
}; };
onRestoreLogo = () => { onRestoreLogo = () => {
const { restoreWhiteLabelSettings } = this.props;
console.log("restore button action"); console.log("restore button action");
restoreWhiteLabelSettings(true);
this.setState({ isCanvasProcessing: false }); this.setState({ isCanvasProcessing: false });
}; };
onSave = () => {
const { setWhiteLabelSettings } = this.props;
const { logoText, logoUrls } = this.state;
let fd = new FormData();
fd.append("logoText", logoText);
// TODO: Переделать с for
for (let i = 0; i < logoUrls.length; i++) {
fd.append(`logo[${i}][key]`, i);
fd.append(`logo[${i}][value]`, logoUrls[i]);
}
const data = new URLSearchParams(fd);
setWhiteLabelSettings(data);
};
render() { render() {
const { t, theme } = this.props; const { t, theme } = this.props;
const { const {
@ -308,7 +328,12 @@ class WhiteLabel extends React.Component {
)} )}
</div> </div>
{isPortalPaid && ( {isPortalPaid && (
<Link type="action" isHovered onClick={this.onChangeLogo}> <Link
type="action"
color={theme.studio.settings.common.linkColorHelp}
isHovered
onClick={this.onChangeLogo}
>
{t("ChangeLogoButton")} {t("ChangeLogoButton")}
</Link> </Link>
)} )}
@ -343,7 +368,12 @@ class WhiteLabel extends React.Component {
)} )}
</div> </div>
{isPortalPaid && ( {isPortalPaid && (
<Link type="action" isHovered onClick={this.onChangeLogo}> <Link
type="action"
color={theme.studio.settings.common.linkColorHelp}
isHovered
onClick={this.onChangeLogo}
>
{t("ChangeLogoButton")} {t("ChangeLogoButton")}
</Link> </Link>
)} )}
@ -377,7 +407,12 @@ class WhiteLabel extends React.Component {
)} )}
</div> </div>
{isPortalPaid && ( {isPortalPaid && (
<Link type="action" isHovered onClick={this.onChangeLogo}> <Link
type="action"
color={theme.studio.settings.common.linkColorHelp}
isHovered
onClick={this.onChangeLogo}
>
{t("ChangeLogoButton")} {t("ChangeLogoButton")}
</Link> </Link>
)} )}
@ -451,7 +486,12 @@ class WhiteLabel extends React.Component {
</div> </div>
{isPortalPaid && ( {isPortalPaid && (
<Link type="action" isHovered onClick={this.onChangeLogo}> <Link
type="action"
color={theme.studio.settings.common.linkColorHelp}
isHovered
onClick={this.onChangeLogo}
>
{t("ChangeLogoButton")} {t("ChangeLogoButton")}
</Link> </Link>
)} )}
@ -465,7 +505,8 @@ class WhiteLabel extends React.Component {
label={t("Common:SaveButton")} label={t("Common:SaveButton")}
isLoading={false} isLoading={false}
isDisabled={false} isDisabled={false}
onClick={() => console.log("Save button action")} //onClick={() => console.log("Save button action")}
onClick={this.onSave}
/> />
<Button <Button
@ -490,6 +531,8 @@ export default inject(({ setup, auth }) => {
getWhiteLabelLogoText, getWhiteLabelLogoText,
getWhiteLabelLogoSizes, getWhiteLabelLogoSizes,
getWhiteLabelLogoUrls, getWhiteLabelLogoUrls,
setWhiteLabelSettings,
restoreWhiteLabelSettings,
} = setup; } = setup;
const { logoText, logoSizes: rawSizes, logoUrls } = common.whiteLabel; const { logoText, logoSizes: rawSizes, logoUrls } = common.whiteLabel;
@ -502,5 +545,7 @@ export default inject(({ setup, auth }) => {
getWhiteLabelLogoText, getWhiteLabelLogoText,
getWhiteLabelLogoSizes, getWhiteLabelLogoSizes,
getWhiteLabelLogoUrls, getWhiteLabelLogoUrls,
setWhiteLabelSettings,
restoreWhiteLabelSettings,
}; };
})(withTranslation(["Settings", "Common"])(observer(WhiteLabel))); })(withTranslation(["Settings", "Common"])(observer(WhiteLabel)));

View File

@ -197,12 +197,55 @@ class SettingsSetupStore {
this.setLogoUrls(Object.values(res)); this.setLogoUrls(Object.values(res));
}; };
setWhiteLabelSettings = async (data) => {
const response = await api.settings.setWhiteLabelSettings(data);
return Promise.resolve(response);
};
restoreWhiteLabelSettings = async (isDefault) => {
const res = await api.settings.restoreWhiteLabelSettings(isDefault);
};
setLanguageAndTime = async (lng, timeZoneID) => { setLanguageAndTime = async (lng, timeZoneID) => {
const res = await api.settings.setLanguageAndTime(lng, timeZoneID); const res = await api.settings.setLanguageAndTime(lng, timeZoneID);
//console.log("setLanguageAndTime", res); //console.log("setLanguageAndTime", res);
//if (res) this.setPortalLanguageAndTime({ lng, timeZoneID }); //if (res) this.setPortalLanguageAndTime({ lng, timeZoneID });
}; };
setPortalRename = async (alias) => {
const res = await api.portal.setPortalRename(alias);
};
setMailDomainSettings = async (type, domains, inviteUsersAsVisitors) => {
const res = await api.settings.setMailDomainSettings(
type,
domains,
inviteUsersAsVisitors
);
};
setIpRestrictions = async (data) => {
const res = await api.settings.setIpRestrictions(data);
};
setIpRestrictionsEnable = async (data) => {
const res = await api.settings.setIpRestrictionsEnable(data);
};
setMessageSettings = async (turnOn) => {
const res = await api.settings.setMessageSettings(turnOn);
};
setCookieSettings = async (lifeTime) => {
const res = await api.settings.setCookieSettings(lifeTime);
};
setLifetimeAuditSettings = async (loginHistoryLifeTime) => {
const res = await api.settings.setLifetimeAuditSettings(
loginHistoryLifeTime
);
};
setGreetingTitle = async (greetingTitle) => { setGreetingTitle = async (greetingTitle) => {
const res = await api.settings.setGreetingSettings(greetingTitle); const res = await api.settings.setGreetingSettings(greetingTitle);