This commit is contained in:
Mike Cao 2023-04-13 23:37:50 -07:00
commit 54b018f7ba
78 changed files with 3920 additions and 3579 deletions

View File

@ -32,9 +32,13 @@ export default function HamburgerButton() {
label: formatMessage(labels.users),
url: '/settings/users',
},
{
label: formatMessage(labels.profile),
url: '/settings/profile',
},
],
},
{
cloudMode && {
label: formatMessage(labels.profile),
url: '/settings/profile',
},

View File

@ -9,7 +9,8 @@ import styles from './WorldMap.module.css';
import useCountryNames from 'hooks/useCountryNames';
import useLocale from 'hooks/useLocale';
import HoverTooltip from './HoverTooltip';
import { formatLongNumber } from '../../lib/format';
import { formatLongNumber } from 'lib/format';
import { percentFilter } from 'lib/filters';
function WorldMap({ data, className }) {
const { basePath } = useRouter();
@ -26,10 +27,11 @@ function WorldMap({ data, className }) {
);
const { locale } = useLocale();
const countryNames = useCountryNames(locale);
const metrics = useMemo(() => (data ? percentFilter(data) : []), [data]);
function getFillColor(code) {
if (code === 'AQ') return;
const country = data?.find(({ x }) => x === code);
const country = metrics?.find(({ x }) => x === code);
if (!country) {
return colors.fillColor;
@ -46,7 +48,7 @@ function WorldMap({ data, className }) {
function handleHover(code) {
if (code === 'AQ') return;
const country = data?.find(({ x }) => x === code);
const country = metrics?.find(({ x }) => x === code);
setTooltip(`${countryNames[code]}: ${formatLongNumber(country?.y || 0)} visitors`);
}

View File

@ -10,6 +10,7 @@ export const labels = defineMessages({
leave: { id: 'label.leave', defaultMessage: 'Leave' },
users: { id: 'label.users', defaultMessage: 'Users' },
createUser: { id: 'label.create-user', defaultMessage: 'Create user' },
deleteUser: { id: 'label.delete-users', defaultMessage: 'Delete user' },
username: { id: 'label.username', defaultMessage: 'Username' },
password: { id: 'label.password', defaultMessage: 'Password' },
role: { id: 'label.role', defaultMessage: 'Role' },
@ -113,6 +114,8 @@ export const labels = defineMessages({
editDashboard: { id: 'label.edit-dashboard', defaultMessage: 'Edit dashboard' },
title: { id: 'label.title', defaultMessage: 'Title' },
view: { id: 'label.view', defaultMessage: 'View' },
cities: { id: 'label.cities', defaultMessage: 'Cities' },
regions: { id: 'label.regions', defaultMessage: 'Regions' },
});
export const messages = defineMessages({

View File

@ -0,0 +1,30 @@
import MetricsTable from './MetricsTable';
import { emptyFilter } from 'lib/filters';
import FilterLink from 'components/common/FilterLink';
import useLocale from 'hooks/useLocale';
import useMessages from 'hooks/useMessages';
export default function CitiesTable({ websiteId, ...props }) {
const { locale } = useLocale();
const { formatMessage, labels } = useMessages();
function renderLink({ x }) {
return (
<div className={locale}>
<FilterLink id="city" value={x} />
</div>
);
}
return (
<MetricsTable
{...props}
title={formatMessage(labels.cities)}
type="city"
metric={formatMessage(labels.visitors)}
websiteId={websiteId}
dataFilter={emptyFilter}
renderLabel={renderLink}
/>
);
}

View File

@ -1,11 +1,10 @@
import MetricsTable from './MetricsTable';
import { percentFilter } from 'lib/filters';
import FilterLink from 'components/common/FilterLink';
import useCountryNames from 'hooks/useCountryNames';
import useLocale from 'hooks/useLocale';
import useMessages from 'hooks/useMessages';
export default function CountriesTable({ websiteId, onDataLoad, ...props }) {
export default function CountriesTable({ websiteId, ...props }) {
const { locale } = useLocale();
const countryNames = useCountryNames(locale);
const { formatMessage, labels } = useMessages();
@ -25,7 +24,6 @@ export default function CountriesTable({ websiteId, onDataLoad, ...props }) {
type="country"
metric={formatMessage(labels.visitors)}
websiteId={websiteId}
onDataLoad={data => onDataLoad?.(percentFilter(data))}
renderLabel={renderLink}
/>
);

View File

@ -29,7 +29,7 @@ export default function MetricsTable({
const {
resolveUrl,
router,
query: { url, referrer, os, browser, device, country },
query: { url, referrer, os, browser, device, country, region, city },
} = usePageQuery();
const { formatMessage, labels } = useMessages();
const { get, useQuery } = useApi();
@ -37,7 +37,7 @@ export default function MetricsTable({
const { data, isLoading, isFetched, error } = useQuery(
[
'websites:metrics',
{ websiteId, type, modified, url, referrer, os, browser, device, country },
{ websiteId, type, modified, url, referrer, os, browser, device, country, region, city },
],
() =>
get(`/websites/${websiteId}/metrics`, {
@ -50,6 +50,8 @@ export default function MetricsTable({
browser,
device,
country,
region,
city,
}),
{ onSuccess: onDataLoad, retryDelay: delay || DEFAULT_ANIMATION_DURATION },
);

View File

@ -0,0 +1,31 @@
import MetricsTable from './MetricsTable';
import { emptyFilter } from 'lib/filters';
import FilterLink from 'components/common/FilterLink';
import useLocale from 'hooks/useLocale';
import useMessages from 'hooks/useMessages';
import regions from 'public/iso-3166-2.json';
export default function RegionsTable({ websiteId, ...props }) {
const { locale } = useLocale();
const { formatMessage, labels } = useMessages();
function renderLink({ x }) {
return (
<div className={locale}>
<FilterLink id="region" value={x} label={regions[x] || x} />
</div>
);
}
return (
<MetricsTable
{...props}
title={formatMessage(labels.regions)}
type="region"
metric={formatMessage(labels.visitors)}
websiteId={websiteId}
dataFilter={emptyFilter}
renderLabel={renderLink}
/>
);
}

View File

@ -33,13 +33,16 @@ export default function WebsiteChart({
const { startDate, endDate, unit, value, modified } = dateRange;
const [timezone] = useTimezone();
const {
query: { url, referrer, os, browser, device, country, title },
query: { url, referrer, os, browser, device, country, region, city, title },
} = usePageQuery();
const { get, useQuery } = useApi();
const { ref, isSticky } = useSticky({ enabled: stickyHeader });
const { data, isLoading, error } = useQuery(
['websites:pageviews', { websiteId, modified, url, referrer, os, browser, device, country }],
[
'websites:pageviews',
{ websiteId, modified, url, referrer, os, browser, device, country, region, city, title },
],
() =>
get(`/websites/${websiteId}/pageviews`, {
startAt: +startDate,
@ -52,6 +55,9 @@ export default function WebsiteChart({
browser,
device,
country,
region,
city,
title,
}),
{ onSuccess: onDataLoad },
);
@ -82,7 +88,7 @@ export default function WebsiteChart({
</WebsiteHeader>
<FilterTags
websiteId={websiteId}
params={{ url, referrer, os, browser, device, country, title }}
params={{ url, referrer, os, browser, device, country, region, city, title }}
/>
<Row
ref={ref}

View File

@ -19,7 +19,7 @@ export default function TeamDeleteForm({ teamId, teamName, onSave, onClose }) {
return (
<Form onSubmit={handleSubmit} error={error}>
<p>
<FormattedMessage {...messages.confirmDelete} values={{ name: <b>{teamName}</b> }} />
<FormattedMessage {...messages.confirmDelete} values={{ target: <b>{teamName}</b> }} />
</p>
<FormButtons flex>
<SubmitButton variant="danger" disabled={isLoading}>

View File

@ -16,7 +16,9 @@ import useMessages from 'hooks/useMessages';
export default function UserEditForm({ userId, data, onSave }) {
const { formatMessage, labels, messages } = useMessages();
const { post, useMutation } = useApi();
const { mutate, error } = useMutation(({ username }) => post(`/users/${userId}`, { username }));
const { mutate, error } = useMutation(({ username, password, role }) =>
post(`/users/${userId}`, { username, password, role }),
);
const handleSubmit = async data => {
mutate(data, {

View File

@ -52,7 +52,7 @@ export default function UsersTable({ data = [], onDelete }) {
</Icon>
<Text>{formatMessage(labels.delete)}</Text>
</Button>
<Modal>
<Modal title={formatMessage(labels.deleteUser)}>
{close => (
<UserDeleteForm
userId={row.id}

View File

@ -13,7 +13,7 @@ import useMessages from 'hooks/useMessages';
const CONFIRM_VALUE = 'DELETE';
export default function WebsiteDeleteForm({ websiteId, onSave, onClose }) {
const { formatMessage, labels, messages } = useMessages();
const { formatMessage, labels, messages, FormattedMessage } = useMessages();
const { del, useMutation } = useApi();
const { mutate, error } = useMutation(data => del(`/websites/${websiteId}`, data));
@ -28,7 +28,12 @@ export default function WebsiteDeleteForm({ websiteId, onSave, onClose }) {
return (
<Form onSubmit={handleSubmit} error={error}>
<p>{formatMessage(messages.deleteWebsite, { confirmation: CONFIRM_VALUE })}</p>
<p>
<FormattedMessage
{...messages.deleteWebsite}
values={{ confirmation: <b>{CONFIRM_VALUE}</b> }}
/>
</p>
<FormRow label={formatMessage(labels.confirm)}>
<FormInput name="confirmation" rules={{ validate: value => value === CONFIRM_VALUE }}>
<TextField autoComplete="off" />

View File

@ -3,6 +3,8 @@ import Link from 'next/link';
import { GridRow, GridColumn } from 'components/layout/Grid';
import BrowsersTable from 'components/metrics/BrowsersTable';
import CountriesTable from 'components/metrics/CountriesTable';
import RegionsTable from 'components/metrics/RegionsTable';
import CitiesTable from 'components/metrics/CitiesTable';
import DevicesTable from 'components/metrics/DevicesTable';
import LanguagesTable from 'components/metrics/LanguagesTable';
import OSTable from 'components/metrics/OSTable';
@ -26,6 +28,8 @@ const views = {
device: DevicesTable,
screen: ScreenTable,
country: CountriesTable,
region: RegionsTable,
city: CitiesTable,
language: LanguagesTable,
event: EventsTable,
query: QueryParametersTable,
@ -69,6 +73,16 @@ export default function WebsiteMenuView({ websiteId, websiteDomain }) {
label: formatMessage(labels.countries),
url: resolveUrl({ view: 'country' }),
},
{
key: 'region',
label: formatMessage(labels.regions),
url: resolveUrl({ view: 'region' }),
},
{
key: 'city',
label: formatMessage(labels.cities),
url: resolveUrl({ view: 'city' }),
},
{
key: 'language',
label: formatMessage(labels.languages),

View File

@ -3,7 +3,7 @@
"label.actions": "اجراءات",
"label.activity-log": "Activity log",
"label.add-website": "إضافة موقع",
"label.administrator": "مدير عام؟",
"label.admin": "مدير عام؟",
"label.all": "الكل",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "المتصفحات",
"label.cancel": "إلغاء",
"label.change-password": "تغيير كلمة المرور",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "تأكيد كلمة المرور",
@ -70,6 +71,7 @@
"label.referrers": "التحويلات",
"label.refresh": "تحديث",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "اجباري",
"label.reset": "اعادة تعيين",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "اسم المستخدم",
"label.users": "Users",
"label.view": "View",
"label.view-details": "عرض التفاصيل",
"label.views": "مشاهدات",
"label.visitors": "زوار",

View File

@ -3,7 +3,7 @@
"label.actions": "Дзеянні",
"label.activity-log": "Activity log",
"label.add-website": "Дадаць сайт",
"label.administrator": "Адміністратар",
"label.admin": "Адміністратар",
"label.all": "Усё",
"label.all-time": "Увесь час",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Браўзеры",
"label.cancel": "Адмена",
"label.change-password": "Змяніць пароль",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Падцвердзіць пароль",
@ -70,6 +71,7 @@
"label.referrers": "Referrers",
"label.refresh": "Аднавіць",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Абавязкова",
"label.reset": "Скінуць",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Імя карыстальніка",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Пабачыць дэталі",
"label.views": "Прагляды",
"label.visitors": "Наведвальнікі",

View File

@ -3,7 +3,7 @@
"label.actions": "অ্যাকশনস",
"label.activity-log": "Activity log",
"label.add-website": "ওয়েবসাইট যুক্ত করুন",
"label.administrator": "অ্যাডমিন",
"label.admin": "অ্যাডমিন",
"label.all": "সবগুলো",
"label.all-time": "সব সময়",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "ব্রাউজার",
"label.cancel": "বাতিল",
"label.change-password": "পাসওয়ার্ড পরিবর্তন করুন",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "পাসওয়ার্ড নিশ্চিত করুন",
@ -70,6 +71,7 @@
"label.referrers": "রেফারার্স",
"label.refresh": "রিফ্রেশ",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "প্রয়োজনীয়",
"label.reset": "রিসেট",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "ব্যবহারকারীর নাম",
"label.users": "Users",
"label.view": "View",
"label.view-details": "বিস্তারিত দেখুন",
"label.views": "ভিউস",
"label.visitors": "পরিদর্শনার্থী",

View File

@ -3,7 +3,7 @@
"label.actions": "Accions",
"label.activity-log": "Activity log",
"label.add-website": "Afegeix lloc web",
"label.administrator": "Administrador",
"label.admin": "Administrador",
"label.all": "Tots",
"label.all-time": "Sempre",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Navegadors",
"label.cancel": "Cancel·la",
"label.change-password": "Canvia la contrasenya",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Confirma la contrasenya",
@ -70,6 +71,7 @@
"label.referrers": "Referents",
"label.refresh": "Refresca",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Obligatori",
"label.reset": "Restableix",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Nom d'usuari",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Veure els detalls",
"label.views": "Vistes",
"label.visitors": "Visitants",

View File

@ -3,7 +3,7 @@
"label.actions": "Akce",
"label.activity-log": "Activity log",
"label.add-website": "Přidat web",
"label.administrator": "Administrátor",
"label.admin": "Administrátor",
"label.all": "Vše",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Prohlížeč",
"label.cancel": "Zrušit",
"label.change-password": "Změnit heslo",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Potvrdit heslo",
@ -70,6 +71,7 @@
"label.referrers": "Odkazy",
"label.refresh": "Obnovit",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Vyžadováno",
"label.reset": "Reset",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Uživatelské jméno",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Zobrazit detaily",
"label.views": "Zobrazení",
"label.visitors": "Návštěvy",

View File

@ -3,7 +3,7 @@
"label.actions": "Handlinger",
"label.activity-log": "Activity log",
"label.add-website": "Tilføj hjemmeside",
"label.administrator": "Administrator",
"label.admin": "Administrator",
"label.all": "Alle",
"label.all-time": "Altid",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Browsere",
"label.cancel": "Afvis",
"label.change-password": "Skift adgangskode",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Godkendt adgangskode",
@ -70,6 +71,7 @@
"label.referrers": "Henvisninger",
"label.refresh": "Opdater",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Påkrævet",
"label.reset": "Nulstil",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Brugernavn",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Vis detajler",
"label.views": "Visninger",
"label.visitors": "Besøgende",

View File

@ -3,7 +3,7 @@
"label.actions": "Aktione",
"label.activity-log": "Activity log",
"label.add-website": "Websiite hinzuefüege",
"label.administrator": "Administrator",
"label.admin": "Administrator",
"label.all": "Alli",
"label.all-time": "Gesamte Zitruum",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Browser",
"label.cancel": "Abbreche",
"label.change-password": "Passwort ändere",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Passwort widerhole",
@ -70,6 +71,7 @@
"label.referrers": "Referrer",
"label.refresh": "Aktualisiere",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Erforderlich",
"label.reset": "Zruggsetze",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Benutzername",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Details azeige",
"label.views": "Ufrüef",
"label.visitors": "Bsuecher",

View File

@ -3,7 +3,7 @@
"label.actions": "Aktionen",
"label.activity-log": "Activity log",
"label.add-website": "Webseite hinzufügen",
"label.administrator": "Administrator",
"label.admin": "Administrator",
"label.all": "Alle",
"label.all-time": "Gesamter Zeitraum",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Browser",
"label.cancel": "Abbrechen",
"label.change-password": "Passwort ändern",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Passwort wiederholen",
@ -70,6 +71,7 @@
"label.referrers": "Referrer",
"label.refresh": "Aktualisieren",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Erforderlich",
"label.reset": "Zurücksetzen",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Benutzername",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Details anzeigen",
"label.views": "Aufrufe",
"label.visitors": "Besucher",

View File

@ -3,7 +3,7 @@
"label.actions": "Ενέργειες",
"label.activity-log": "Activity log",
"label.add-website": "Προσθήκη ιστότοπου",
"label.administrator": "Διαχειριστής",
"label.admin": "Διαχειριστής",
"label.all": "All",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Προγράμματα περιήγησης",
"label.cancel": "Ακύρωση",
"label.change-password": "Αλλαγή κωδικού",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Επιβεβαίωση κωδικού",
@ -70,6 +71,7 @@
"label.referrers": "Παραπομπές",
"label.refresh": "Ανανέωση",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Απαιτείται",
"label.reset": "Επαναφορά",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Όνομα χρήστη",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Λεπτομέρειες",
"label.views": "Προβολές",
"label.visitors": "Επισκέπτες",

View File

@ -3,7 +3,7 @@
"label.actions": "Actions",
"label.activity-log": "Activity log",
"label.add-website": "Add website",
"label.administrator": "Administrator",
"label.admin": "Administrator",
"label.all": "All",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Browsers",
"label.cancel": "Cancel",
"label.change-password": "Change password",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Confirm password",
@ -70,6 +71,7 @@
"label.referrers": "Referrers",
"label.refresh": "Refresh",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Required",
"label.reset": "Reset",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Username",
"label.users": "Users",
"label.view": "View",
"label.view-details": "View details",
"label.views": "Views",
"label.visitors": "Visitors",

View File

@ -3,7 +3,7 @@
"label.actions": "Actions",
"label.activity-log": "Activity log",
"label.add-website": "Add website",
"label.administrator": "Administrator",
"label.admin": "Administrator",
"label.all": "All",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Browsers",
"label.cancel": "Cancel",
"label.change-password": "Change password",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Confirm password",
@ -70,6 +71,7 @@
"label.referrers": "Referrers",
"label.refresh": "Refresh",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Required",
"label.reset": "Reset",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Username",
"label.users": "Users",
"label.view": "View",
"label.view-details": "View details",
"label.views": "Views",
"label.visitors": "Visitors",
@ -113,7 +116,7 @@
"message.confirm-delete": "Are you sure you want to delete {target}?",
"message.confirm-leave": "Are you sure you want to leave {target}?",
"message.confirm-reset": "Are you sure you want to reset {target}'s statistics?",
"message.delete-website": "Delete website",
"message.delete-website": "To delete this website, type {confirmation} in the box below to confirm.",
"message.delete-website-warning": "All associated data will be deleted as well.",
"message.error": "Something went wrong.",
"message.event-log": "{event} on {url}",

View File

@ -3,7 +3,7 @@
"label.actions": "Acciones",
"label.activity-log": "Activity log",
"label.add-website": "Agregar sitio",
"label.administrator": "Administrador",
"label.admin": "Administrador",
"label.all": "Todos",
"label.all-time": "Todos los tiempos",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Navegadores",
"label.cancel": "Cancelar",
"label.change-password": "Cambiar contraseña",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Confirmar contraseña",
@ -70,6 +71,7 @@
"label.referrers": "Referido desde",
"label.refresh": "Actualizar",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Obligatorio",
"label.reset": "Reiniciar",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Nombre de usuario",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Ver detalles",
"label.views": "Vistas",
"label.visitors": "Visitantes",

View File

@ -3,7 +3,7 @@
"label.actions": "اقدامات",
"label.activity-log": "Activity log",
"label.add-website": "افزودن وب‌سایت",
"label.administrator": "مدیر",
"label.admin": "مدیر",
"label.all": "همه",
"label.all-time": "همه زمان",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "مروگرها",
"label.cancel": "انصراف",
"label.change-password": "تغییر رمز",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "تایید رمز",
@ -70,6 +71,7 @@
"label.referrers": "ارجاع دهندگان",
"label.refresh": "به‌روزرسانی",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "ضروری",
"label.reset": "بازنشانی",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "نام کاربری",
"label.users": "Users",
"label.view": "View",
"label.view-details": "مشاهده‌ی جزئیات",
"label.views": "بازدید",
"label.visitors": "بازدیدکننده",

View File

@ -3,7 +3,7 @@
"label.actions": "Toiminnat",
"label.activity-log": "Activity log",
"label.add-website": "Lisää verkkosivu",
"label.administrator": "Järjestelmänvalvoja",
"label.admin": "Järjestelmänvalvoja",
"label.all": "Kaikki",
"label.all-time": "Alusta lähtien",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Selaimet",
"label.cancel": "Peruuta",
"label.change-password": "Vaihda salasana",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Vahvista salasana",
@ -70,6 +71,7 @@
"label.referrers": "Viittaajat",
"label.refresh": "Päivitä",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Vaaditaan",
"label.reset": "Nollaa",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Käyttäjänimi",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Katso tiedot",
"label.views": "Näyttökerrat",
"label.visitors": "Vierailijat",

View File

@ -3,7 +3,7 @@
"label.actions": "Gerðir",
"label.activity-log": "Activity log",
"label.add-website": "Legg heimasíðu afturat",
"label.administrator": "Fyrisitari",
"label.admin": "Fyrisitari",
"label.all": "Alt",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Kagar",
"label.cancel": "Strika",
"label.change-password": "Skift loyniorð",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Vátta loyniorð",
@ -70,6 +71,7 @@
"label.referrers": "Framsendingar",
"label.refresh": "Endurskapa",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Kravt",
"label.reset": "Nulstilla",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Brúkaranavn",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Vís frágreiðing",
"label.views": "Sýningar",
"label.visitors": "Vitjandi",

View File

@ -3,7 +3,7 @@
"label.actions": "Actions",
"label.activity-log": "Activity log",
"label.add-website": "Ajouter un site",
"label.administrator": "Administrateur",
"label.admin": "Administrateur",
"label.all": "Tout",
"label.all-time": "Toutes les données",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Navigateurs",
"label.cancel": "Annuler",
"label.change-password": "Changer le mot de passe",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Confirmation du mot de passe",
@ -70,6 +71,7 @@
"label.referrers": "Sources",
"label.refresh": "Rafraîchir",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Requis",
"label.reset": "Réinitialiser",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Nom d'utilisateur",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Voir les details",
"label.views": "Vues",
"label.visitors": "Visiteurs",

View File

@ -3,7 +3,7 @@
"label.actions": "Accións",
"label.activity-log": "Activity log",
"label.add-website": "Engadir sitio web",
"label.administrator": "Administradora",
"label.admin": "Administradora",
"label.all": "Todo",
"label.all-time": "Sempre",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Navegadores",
"label.cancel": "Cancelar",
"label.change-password": "Mudar contrasinal",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Confirmar contrasinal",
@ -70,6 +71,7 @@
"label.referrers": "Orixes",
"label.refresh": "Actualizar",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Requerido",
"label.reset": "Restablecer",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Identificador",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Ver detalles",
"label.views": "Visualizacións",
"label.visitors": "Visitantes",

View File

@ -3,7 +3,7 @@
"label.actions": "פעולות",
"label.activity-log": "Activity log",
"label.add-website": "הוספת אתר",
"label.administrator": "מנהל",
"label.admin": "מנהל",
"label.all": "הכל",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "דפדפנים",
"label.cancel": "ביטול",
"label.change-password": "שינוי סיסמה",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "אישור סיסמה",
@ -70,6 +71,7 @@
"label.referrers": "מפנים",
"label.refresh": "רענון",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "נדרש",
"label.reset": "איפוס",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "שם משתמש",
"label.users": "Users",
"label.view": "View",
"label.view-details": "פרטים נוספים",
"label.views": "צפיות",
"label.visitors": "מבקרים",

View File

@ -3,7 +3,7 @@
"label.actions": "कार्य",
"label.activity-log": "Activity log",
"label.add-website": "वेबसाइट",
"label.administrator": "प्रशासक",
"label.admin": "प्रशासक",
"label.all": "सब",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "वेब ब्राउज़र",
"label.cancel": "रद्द करें",
"label.change-password": "पासवर्ड बदलें",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "पासवर्ड की पुष्टि कीजिये",
@ -70,6 +71,7 @@
"label.referrers": "सन्दर्भदाता",
"label.refresh": "रिफ्रेश",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "अपेक्षित",
"label.reset": "रीसेट",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "उपयोगकर्ता नाम",
"label.users": "Users",
"label.view": "View",
"label.view-details": "विवरण देखें",
"label.views": "दृश्य",
"label.visitors": "आगंतुकों",

View File

@ -3,7 +3,7 @@
"label.actions": "Műveletek",
"label.activity-log": "Activity log",
"label.add-website": "Weboldal hozzáadása",
"label.administrator": "Adminisztrátor",
"label.admin": "Adminisztrátor",
"label.all": "Összes",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Böngészők",
"label.cancel": "Mégsem",
"label.change-password": "Jelszó módosítása",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Jelszó megerősítése",
@ -70,6 +71,7 @@
"label.referrers": "Hivatkozók",
"label.refresh": "Frissítés",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Kötelező",
"label.reset": "Visszaállítás",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Felhasználónév",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Részletek",
"label.views": "Megtekintések",
"label.visitors": "Látogatók",

View File

@ -3,7 +3,7 @@
"label.actions": "Aksi",
"label.activity-log": "Activity log",
"label.add-website": "Tambah situs web",
"label.administrator": "Pengelola",
"label.admin": "Pengelola",
"label.all": "Semua",
"label.all-time": "Semua waktu",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Peramban",
"label.cancel": "Batal",
"label.change-password": "Ganti kata sandi",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Konfirmasi kata sandi",
@ -70,6 +71,7 @@
"label.referrers": "Perujuk",
"label.refresh": "Segarkan",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Wajib",
"label.reset": "Atur ulang",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Nama pengguna",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Lihat Detil",
"label.views": "Tampilan",
"label.visitors": "Pengunjung",

View File

@ -3,7 +3,7 @@
"label.actions": "Azioni",
"label.activity-log": "Activity log",
"label.add-website": "Aggiungi sito",
"label.administrator": "Amministratore",
"label.admin": "Amministratore",
"label.all": "Tutto",
"label.all-time": "Sempre",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Browser",
"label.cancel": "Annulla",
"label.change-password": "Modifica password",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Conferma password",
@ -70,6 +71,7 @@
"label.referrers": "Referrers",
"label.refresh": "Ricarica",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Obbligatorio",
"label.reset": "Reset",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Nome utente",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Vedi dettagli",
"label.views": "Visualizzazioni",
"label.visitors": "Visitatori",

View File

@ -3,7 +3,7 @@
"label.actions": "アクション",
"label.activity-log": "Activity log",
"label.add-website": "Webサイトの追加",
"label.administrator": "管理者",
"label.admin": "管理者",
"label.all": "すべて表示",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "ブラウザ",
"label.cancel": "キャンセル",
"label.change-password": "パスワード変更",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "パスワード(確認)",
@ -70,6 +71,7 @@
"label.referrers": "リファラー",
"label.refresh": "更新",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "必須",
"label.reset": "リセット",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "ユーザー名",
"label.users": "Users",
"label.view": "View",
"label.view-details": "詳細を見る",
"label.views": "閲覧数",
"label.visitors": "訪問者数",

View File

@ -3,7 +3,7 @@
"label.actions": "សកម្មភាព",
"label.activity-log": "Activity log",
"label.add-website": "បន្ថែមគេហទំព័រ",
"label.administrator": "អ្នកគ្រប់គ្រង",
"label.admin": "អ្នកគ្រប់គ្រង",
"label.all": "ទាំងអស់",
"label.all-time": "គ្រប់ពេល",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "កម្មវិធី",
"label.cancel": "បោះបង់",
"label.change-password": "ផ្លាស់ប្តូរពាក្យសម្ងាត់",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "បញ្ជាក់ពាក្យសម្ងាត់",
@ -70,6 +71,7 @@
"label.referrers": "អ្នកណែនាំ",
"label.refresh": "ផ្ទុកឡើងវិញ",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "ទាមទារ",
"label.reset": "កំណត់ឡើងវិញ",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "ឈ្មោះ​អ្នកប្រើប្រាស់",
"label.users": "Users",
"label.view": "View",
"label.view-details": "មើលព័ត៌មានលម្អិត",
"label.views": "អ្នកចូលមើល",
"label.visitors": "អ្នកទស្សនា",

View File

@ -3,7 +3,7 @@
"label.actions": "액션",
"label.activity-log": "Activity log",
"label.add-website": "웹사이트 추가",
"label.administrator": "관리자",
"label.admin": "관리자",
"label.all": "전체",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "브라우저",
"label.cancel": "취소",
"label.change-password": "비밀번호 변경",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "비밀번호 확인",
@ -70,6 +71,7 @@
"label.referrers": "리퍼러",
"label.refresh": "새로고침",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "필수",
"label.reset": "리셋",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "사용자명",
"label.users": "Users",
"label.view": "View",
"label.view-details": "상세보기",
"label.views": "조회수",
"label.visitors": "방문객",

View File

@ -3,7 +3,7 @@
"label.actions": "Veiksmai",
"label.activity-log": "Activity log",
"label.add-website": "Pridėti svetainę",
"label.administrator": "Administratorius",
"label.admin": "Administratorius",
"label.all": "Visi",
"label.all-time": "Visas laikotarpis",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Naršyklės",
"label.cancel": "Atšaukti",
"label.change-password": "Pakeisti slaptažodį",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Patvirtinti slaptažodį",
@ -70,6 +71,7 @@
"label.referrers": "Referrers",
"label.refresh": "Atnaujinti",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Reikalinga",
"label.reset": "Atstatyti",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Vartotojo vardas",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Peržiūrėti detaliau",
"label.views": "Peržiūros",
"label.visitors": "Lankytojai",

View File

@ -3,7 +3,7 @@
"label.actions": "Үйлдлүүд",
"label.activity-log": "Activity log",
"label.add-website": "Веб нэмэх",
"label.administrator": "Админ",
"label.admin": "Админ",
"label.all": "Бүх",
"label.all-time": "Бүх цаг үеийн",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Хөтөч",
"label.cancel": "Цуцлах",
"label.change-password": "Нууц үг солих",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Шинэ нууц үгээ давтах",
@ -70,6 +71,7 @@
"label.referrers": "Чиглүүлэгч",
"label.refresh": "Сэргээх",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Шаардлагатай",
"label.reset": "Хуучин хэвд нь оруулах",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Хэрэглэгчийн нэр",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Дэлгэрүүлж харах",
"label.views": "Үзсэн",
"label.visitors": "Зочин",

View File

@ -3,7 +3,7 @@
"label.actions": "Aksi",
"label.activity-log": "Activity log",
"label.add-website": "Tambah laman web",
"label.administrator": "Pentadbir",
"label.admin": "Pentadbir",
"label.all": "Semua",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Pelayar web",
"label.cancel": "Batal",
"label.change-password": "Tukar kata laluan",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Sahkan kata laluan",
@ -70,6 +71,7 @@
"label.referrers": "Perujuk",
"label.refresh": "Muat semula",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Diperlukan",
"label.reset": "Tetapkan semula",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Nama pengguna",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Lihat butiran",
"label.views": "Lawatan",
"label.visitors": "Pelawat",

View File

@ -3,7 +3,7 @@
"label.actions": "Handlinger",
"label.activity-log": "Activity log",
"label.add-website": "Legg til nettsted",
"label.administrator": "Administrator",
"label.admin": "Administrator",
"label.all": "Alle",
"label.all-time": "Noensinne",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Nettlesere",
"label.cancel": "Avvis",
"label.change-password": "Bytt passord",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Godkjenn passord",
@ -70,6 +71,7 @@
"label.referrers": "Referanser",
"label.refresh": "Oppdater",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Påkrevd",
"label.reset": "Nullstill",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Brukernavn",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Vis detaljer",
"label.views": "Visninger",
"label.visitors": "Besøkende",

View File

@ -3,7 +3,7 @@
"label.actions": "Acties",
"label.activity-log": "Activity log",
"label.add-website": "Website toevoegen",
"label.administrator": "Administrator",
"label.admin": "Administrator",
"label.all": "Alles",
"label.all-time": "Onbeperkt",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Browsers",
"label.cancel": "Annuleren",
"label.change-password": "Wachtwoord wijzigen",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Wachtwoord bevestigen",
@ -70,6 +71,7 @@
"label.referrers": "Verwijzers",
"label.refresh": "Vernieuwen",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Verplicht",
"label.reset": "Resetten",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Gebruikersnaam",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Meer details",
"label.views": "Weergaven",
"label.visitors": "Bezoekers",

View File

@ -3,7 +3,7 @@
"label.actions": "Działania",
"label.activity-log": "Activity log",
"label.add-website": "Dodaj witrynę",
"label.administrator": "Administrator",
"label.admin": "Administrator",
"label.all": "Wszystkie",
"label.all-time": "Cały czas",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Przeglądarki",
"label.cancel": "Anuluj",
"label.change-password": "Zmień hasło",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Potwierdź hasło",
@ -70,6 +71,7 @@
"label.referrers": "Źródła odsyłające",
"label.refresh": "Odśwież",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Wymagany",
"label.reset": "Zresetuj",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Nazwa użytkownika",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Pokaż szczegóły",
"label.views": "Wyświetlenia",
"label.visitors": "Odwiedzający",

View File

@ -3,7 +3,7 @@
"label.actions": "Ações",
"label.activity-log": "Activity log",
"label.add-website": "Adicionar site",
"label.administrator": "Administrador",
"label.admin": "Administrador",
"label.all": "Todos",
"label.all-time": "Todo o período",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Navegadores",
"label.cancel": "Cancelar",
"label.change-password": "Alterar a senha",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Confirme a nova senha",
@ -70,6 +71,7 @@
"label.referrers": "Referências",
"label.refresh": "Atualizar",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Obrigatório",
"label.reset": "Redefinir",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Nome de usuário",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Ver detalhes",
"label.views": "Visualizações",
"label.visitors": "Visitantes",

View File

@ -3,7 +3,7 @@
"label.actions": "Ações",
"label.activity-log": "Activity log",
"label.add-website": "Adicionar website",
"label.administrator": "Administrador",
"label.admin": "Administrador",
"label.all": "Todos",
"label.all-time": "Todo o tempo",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Navegadores",
"label.cancel": "Cancelar",
"label.change-password": "Alterar senha",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Confirmar senha",
@ -70,6 +71,7 @@
"label.referrers": "Referenciadores",
"label.refresh": "Atualizar",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Obrigatório",
"label.reset": "Repor",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Nome de utilizador",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Ver detalhes",
"label.views": "Visualizações",
"label.visitors": "Visitantes",

View File

@ -3,7 +3,7 @@
"label.actions": "Acțiuni",
"label.activity-log": "Activity log",
"label.add-website": "Adăugare site web",
"label.administrator": "Administrator",
"label.admin": "Administrator",
"label.all": "Toate",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Browsere",
"label.cancel": "Anulează",
"label.change-password": "Schimbare parolă",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Confirmare parolă",
@ -70,6 +71,7 @@
"label.referrers": "Site-uri de proveniență",
"label.refresh": "Reîmprospătare",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Obligatoriu",
"label.reset": "Resetează",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Nume utilizator",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Vizualizare detalii",
"label.views": "Vizualizări",
"label.visitors": "Vizitatori",

View File

@ -3,7 +3,7 @@
"label.actions": "Действия",
"label.activity-log": "Activity log",
"label.add-website": "Добавить сайт",
"label.administrator": "Администратор",
"label.admin": "Администратор",
"label.all": "Все",
"label.all-time": "Все время",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Браузеры",
"label.cancel": "Отменить",
"label.change-password": "Изменить пароль",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Подтвердить пароль",
@ -70,6 +71,7 @@
"label.referrers": "Источники",
"label.refresh": "Обновить",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Обязательное",
"label.reset": "Сбросить",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Имя пользователя",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Посмотреть детали",
"label.views": "Просмотры",
"label.visitors": "Посетители",

View File

@ -3,7 +3,7 @@
"label.actions": "Akcie",
"label.activity-log": "Activity log",
"label.add-website": "Pridať web",
"label.administrator": "Administrátor",
"label.admin": "Administrátor",
"label.all": "Všetko",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Prehliadač",
"label.cancel": "Zrušiť",
"label.change-password": "Zmeniť heslo",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Potvrdiť heslo",
@ -70,6 +71,7 @@
"label.referrers": "Odkazy",
"label.refresh": "Obnoviť",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Povinné",
"label.reset": "Reset",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Užívateľské meno",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Zobraziť detaily",
"label.views": "Zobrazení",
"label.visitors": "Návštevy",

View File

@ -3,7 +3,7 @@
"label.actions": "Dejanja",
"label.activity-log": "Activity log",
"label.add-website": "Dodaj spletno mesto",
"label.administrator": "Administrator",
"label.admin": "Administrator",
"label.all": "Vse",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Brskalniki",
"label.cancel": "Prekliči",
"label.change-password": "Zamenjaj geslo",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Potrditev gesla",
@ -70,6 +71,7 @@
"label.referrers": "Viri",
"label.refresh": "Osveži",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Zahtevano",
"label.reset": "Ponastavi",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Uporabniško ime",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Prikaži podrobnosti",
"label.views": "Ogledi",
"label.visitors": "Obiskovalci",

View File

@ -3,7 +3,7 @@
"label.actions": "Händelser",
"label.activity-log": "Activity log",
"label.add-website": "Lägg till webbsajt",
"label.administrator": "Administratör",
"label.admin": "Administratör",
"label.all": "Alla",
"label.all-time": "Sedan början",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Webbläsare",
"label.cancel": "Avbryt",
"label.change-password": "Byt lösenord",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Bekräfta lösenord",
@ -70,6 +71,7 @@
"label.referrers": "Hänvisare",
"label.refresh": "Uppdatera",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Krävs",
"label.reset": "Återställ",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Användarnamn",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Visa detaljer",
"label.views": "Visningar",
"label.visitors": "Besökare",

View File

@ -3,7 +3,7 @@
"label.actions": "செயல்கள்",
"label.activity-log": "Activity log",
"label.add-website": "வலைத்தளத்தைச் சேர்க்க",
"label.administrator": "நிர்வாகியைச் சேர்க்க",
"label.admin": "நிர்வாகியைச் சேர்க்க",
"label.all": "எல்லாம்",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "உலாவிகள்",
"label.cancel": "ரத்துசெய்",
"label.change-password": "கடவுச்சொல்லை மாற்று",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "கடவுச்சொல்லை உறுதிப்படுத்தவும்",
@ -70,6 +71,7 @@
"label.referrers": "குறிப்பிடுவோர்",
"label.refresh": "புதுப்பிப்பு",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "தேவையானவை",
"label.reset": "மீட்டமை",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "பயனர்பெயர்",
"label.users": "Users",
"label.view": "View",
"label.view-details": "விபரங்களை பார்",
"label.views": "பார்வைகள்",
"label.visitors": "பார்வையாளர்கள்",

View File

@ -3,7 +3,7 @@
"label.actions": "การกระทำ",
"label.activity-log": "Activity log",
"label.add-website": "เพิ่มเว็บไซต์",
"label.administrator": "ผู้ดูแลระบบ",
"label.admin": "ผู้ดูแลระบบ",
"label.all": "ทั้งหมด",
"label.all-time": "ทุกช่วงเวลา",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "เบราว์เซอร์",
"label.cancel": "ยกเลิก",
"label.change-password": "เปลี่ยนรหัสผ่าน",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "ยืนยันรหัสผ่าน",
@ -70,6 +71,7 @@
"label.referrers": "แหล่งที่มา",
"label.refresh": "รีเฟรช",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "ต้องการ",
"label.reset": "รีเซต",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "ชื่อผู้ใช้",
"label.users": "Users",
"label.view": "View",
"label.view-details": "แสดงรายละเอียด",
"label.views": "การเข้าชม",
"label.visitors": "ผู้เข้าชม",

View File

@ -3,7 +3,7 @@
"label.actions": "Hareketler",
"label.activity-log": "Activity log",
"label.add-website": "Web sitesi ekle",
"label.administrator": "Yönetici",
"label.admin": "Yönetici",
"label.all": "Tümü",
"label.all-time": "All time",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Tarayıcılar",
"label.cancel": "İptal",
"label.change-password": "Şifre değiştir",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Parolayı onayla",
@ -70,6 +71,7 @@
"label.referrers": "Yönlendirenler",
"label.refresh": "Yenile",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Zorunlu alan",
"label.reset": "Sıfırla",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Kullanıcı adı",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Detayı incele",
"label.views": "Görüntüleme",
"label.visitors": "Ziyaretçi",

View File

@ -3,7 +3,7 @@
"label.actions": "Дії",
"label.activity-log": "Activity log",
"label.add-website": "Додати сайт",
"label.administrator": "Адміністратор",
"label.admin": "Адміністратор",
"label.all": "Всі",
"label.all-time": "Весь час",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Браузери",
"label.cancel": "Відмінити",
"label.change-password": "Змінити пароль",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Підтвердити пароль",
@ -70,6 +71,7 @@
"label.referrers": "Джерела",
"label.refresh": "Оновити",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Обов'язкове",
"label.reset": "Скинути",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Ім'я користувача",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Переглянути деталі",
"label.views": "Перегляди",
"label.visitors": "Відвідувачі",

View File

@ -3,7 +3,7 @@
"label.actions": "اعمال",
"label.activity-log": "Activity log",
"label.add-website": "ویب سائٹ کا اضافہ کریں",
"label.administrator": "منتظم",
"label.admin": "منتظم",
"label.all": "تمام",
"label.all-time": "تمام وقت",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "براؤزرز",
"label.cancel": "منسوخ",
"label.change-password": "پاس ورڈ تبدیل کریں",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "پاس ورڈ کی تصدیق کریں",
@ -70,6 +71,7 @@
"label.referrers": "بھیجنے والے",
"label.refresh": "تازہ دم کریں",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "درکار ہے",
"label.reset": "دوبارہ ترتیب دیں",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "صارف نام",
"label.users": "Users",
"label.view": "View",
"label.view-details": "تفصیلات دیکھیں",
"label.views": "مناظر",
"label.visitors": "زائرین",

View File

@ -3,7 +3,7 @@
"label.actions": "Hành động",
"label.activity-log": "Activity log",
"label.add-website": "Thêm website",
"label.administrator": "Quản trị",
"label.admin": "Quản trị",
"label.all": "Tất cả",
"label.all-time": "Toàn thời gian",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "Trình duyệt",
"label.cancel": "Huỷ bỏ",
"label.change-password": "Đổi mật khẩu",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "Xác nhận mật khẩu",
@ -70,6 +71,7 @@
"label.referrers": "Liên kết giới thiệu",
"label.refresh": "Làm mới",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "Yêu cầu",
"label.reset": "Tái thiết lập",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "Tên đăng nhập",
"label.users": "Users",
"label.view": "View",
"label.view-details": "Xem chi tiết",
"label.views": "Xem",
"label.visitors": "Khách",

View File

@ -3,7 +3,7 @@
"label.actions": "用户行为",
"label.activity-log": "Activity log",
"label.add-website": "添加网站",
"label.administrator": "管理员",
"label.admin": "管理员",
"label.all": "所有",
"label.all-time": "所有时间段",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "浏览器",
"label.cancel": "取消",
"label.change-password": "更新密码",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "确认密码",
@ -70,6 +71,7 @@
"label.referrers": "来源域名",
"label.refresh": "刷新",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "必填",
"label.reset": "重置",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "用户名",
"label.users": "Users",
"label.view": "View",
"label.view-details": "查看更多",
"label.views": "浏览量",
"label.visitors": "访客",

View File

@ -3,7 +3,7 @@
"label.actions": "用戶行為",
"label.activity-log": "Activity log",
"label.add-website": "增加網站",
"label.administrator": "管理員",
"label.admin": "管理員",
"label.all": "所有",
"label.all-time": "所有時間段",
"label.analytics": "Analytics",
@ -13,6 +13,7 @@
"label.browsers": "瀏覽器",
"label.cancel": "取消",
"label.change-password": "更新密碼",
"label.cities": "Cities",
"label.clear-all": "Clear all",
"label.confirm": "Confirm",
"label.confirm-password": "確認密碼",
@ -70,6 +71,7 @@
"label.referrers": "指入域名",
"label.refresh": "刷新",
"label.regenerate": "Regenerate",
"label.regions": "Regions",
"label.remove": "Remove",
"label.required": "必填",
"label.reset": "重置",
@ -103,6 +105,7 @@
"label.user": "User",
"label.username": "用户名",
"label.users": "Users",
"label.view": "View",
"label.view-details": "查看更多",
"label.views": "頁面流量",
"label.visitors": "獨立訪客",

View File

@ -95,17 +95,11 @@ export async function canViewWebsite({ user, shareToken }: Auth, websiteId: stri
return false;
}
export async function canCreateWebsite({ user }: Auth, teamId?: string) {
export async function canCreateWebsite({ user }: Auth) {
if (user.isAdmin) {
return true;
}
if (teamId) {
const teamUser = await getTeamUser(teamId, user.id);
return hasPermission(teamUser?.role, PERMISSIONS.websiteCreate);
}
return hasPermission(user.role, PERMISSIONS.websiteCreate);
}

View File

@ -37,10 +37,9 @@ export const SESSION_COLUMNS = [
'os',
'device',
'screen',
'country',
'language',
'subdivision1',
'subdivision2',
'country',
'region',
'city',
];
@ -50,6 +49,7 @@ export const FILTER_COLUMNS = {
title: 'page_title',
query: 'url_query',
event: 'event_name',
region: 'subdivision1',
};
export const EVENT_TYPE = {

View File

@ -43,6 +43,7 @@ export interface User {
id: string;
username: string;
password?: string;
role: string;
createdAt?: Date;
}

View File

@ -45,7 +45,10 @@ export default async (
const token = createSecureToken({ userId: user.id }, secret());
return ok(res, { token, user });
return ok(res, {
token,
user: { id: user.id, username: user.username, createdAt: user.createdAt },
});
}
return unauthorized(res, 'message.incorrect-username-password');

View File

@ -23,9 +23,9 @@ export default async (
return unauthorized(res);
}
const websites = await deleteTeamWebsite(teamId, websiteId);
await deleteTeamWebsite(teamId, websiteId);
return ok(res, websites);
return ok(res);
}
return methodNotAllowed(res);

View File

@ -10,7 +10,6 @@ export interface TeamWebsiteRequestQuery {
}
export interface TeamWebsiteRequestBody {
teamWebsiteId?: string;
websiteIds?: string[];
}
@ -21,9 +20,6 @@ export default async (
await useAuth(req, res);
const { id: teamId } = req.query;
const {
user: { id: userId },
} = req.auth;
if (req.method === 'GET') {
if (!(await canViewTeam(req.auth, teamId))) {

View File

@ -1,4 +1,4 @@
import { NextApiRequestQueryBody, User } from 'lib/types';
import { NextApiRequestQueryBody, Roles, User } from 'lib/types';
import { canDeleteUser, canUpdateUser, canViewUser } from 'lib/auth';
import { useAuth } from 'lib/middleware';
import { NextApiResponse } from 'next';
@ -12,6 +12,7 @@ export interface UserRequestQuery {
export interface UserRequestBody {
username: string;
password: string;
role: Roles;
}
export default async (
@ -40,17 +41,20 @@ export default async (
return unauthorized(res);
}
const { username, password } = req.body;
const { username, password, role } = req.body;
const user = await getUser({ id });
const data: any = {};
// Only admin can change these fields
if (password && isAdmin) {
if (password) {
data.password = hashPassword(password);
}
if (role && isAdmin) {
data.role = role;
}
// Only admin can change these fields
if (username && isAdmin) {
data.username = username;

View File

@ -41,15 +41,17 @@ export default async (
const { name, domain, shareId } = req.body;
let website;
try {
await updateWebsite(websiteId, { name, domain, shareId });
website = await updateWebsite(websiteId, { name, domain, shareId });
} catch (e: any) {
if (e.message.includes('Unique constraint') && e.message.includes('share_id')) {
return serverError(res, 'That share ID is already taken.');
}
}
return ok(res);
return ok(res, website);
}
if (req.method === 'DELETE') {

View File

@ -20,8 +20,7 @@ export interface WebsiteMetricsRequestQuery {
browser: string;
device: string;
country: string;
subdivision1: string;
subdivision2: string;
region: string;
city: string;
}
@ -46,8 +45,7 @@ export default async (
browser,
device,
country,
subdivision1,
subdivision2,
region,
city,
} = req.query;
@ -66,8 +64,7 @@ export default async (
browser,
device,
country,
subdivision1,
subdivision2,
region,
city,
};
@ -111,8 +108,7 @@ export default async (
browser,
device,
country,
subdivision1,
subdivision2,
region,
city,
};

View File

@ -10,7 +10,6 @@ const unitTypes = ['year', 'month', 'hour', 'day'];
export interface WebsitePageviewRequestQuery {
id: string;
websiteId: string;
startAt: number;
endAt: number;
unit: string;

View File

@ -7,7 +7,6 @@ import { getWebsiteStats } from 'queries';
export interface WebsiteStatsRequestQuery {
id: string;
type: string;
startAt: number;
endAt: number;
url: string;

View File

@ -10,7 +10,6 @@ export interface WebsitesRequestBody {
name: string;
domain: string;
shareId: string;
teamId?: string;
}
export default async (
@ -31,9 +30,9 @@ export default async (
}
if (req.method === 'POST') {
const { name, domain, shareId, teamId } = req.body;
const { name, domain, shareId } = req.body;
if (!(await canCreateWebsite(req.auth, teamId))) {
if (!(await canCreateWebsite(req.auth))) {
return unauthorized(res);
}
@ -44,11 +43,7 @@ export default async (
shareId,
};
if (teamId) {
data.teamId = teamId;
} else {
data.userId = userId;
}
data.userId = userId;
const website = await createWebsite(data);

View File

@ -10,7 +10,7 @@ export default function LogoutPage({ disabled }) {
useEffect(() => {
async function logout() {
await post('/logout');
await post('/auth/logout');
}
if (!disabled) {

View File

@ -758,7 +758,15 @@
"message.delete-website": [
{
"type": 0,
"value": "Delete website"
"value": "To delete this website, type "
},
{
"type": 1,
"value": "confirmation"
},
{
"type": 0,
"value": " in the box below to confirm."
}
],
"message.delete-website-warning": [

File diff suppressed because it is too large Load Diff

View File

@ -17,6 +17,7 @@ export async function getUser(
username: true,
password: includePassword,
role: true,
createdAt: true,
},
});
}

View File

@ -13,7 +13,6 @@ export async function getEventMetrics(
endDate: Date;
timezone: string;
unit: string;
column: string;
filters: {
url: string;
eventName: string;
@ -40,7 +39,6 @@ async function relationalQuery(
endDate: Date;
timezone: string;
unit: string;
column: string;
filters: {
url: string;
eventName: string;

View File

@ -137,7 +137,7 @@ async function clickhouseQuery(data: {
session_id: sessionId,
event_id: eventId,
country: country ? country : null,
subdivision1: subdivision1 ? subdivision1 : null,
subdivision1: country && subdivision1 ? `${country}-${subdivision1}` : null,
subdivision2: subdivision2 ? subdivision2 : null,
city: city ? city : null,
url_path: urlPath?.substring(0, URL_LENGTH),

View File

@ -18,7 +18,37 @@ export async function createSession(args: Prisma.SessionCreateInput) {
}
async function relationalQuery(data: Prisma.SessionCreateInput) {
return prisma.client.session.create({ data });
const {
id,
websiteId,
hostname,
browser,
os,
device,
screen,
language,
country,
subdivision1,
subdivision2,
city,
} = data;
return prisma.client.session.create({
data: {
id,
websiteId,
hostname,
browser,
os,
device,
screen,
language,
country,
subdivision1: country && subdivision1 ? `${country}-${subdivision1}` : null,
subdivision2,
city,
},
});
}
async function clickhouseQuery(data: {