mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-11-28 09:24:24 +01:00
[ongoing] refactoring i18n keys
This commit is contained in:
parent
be9f6988e6
commit
d21f616283
@ -5,6 +5,7 @@ FabManager is the Fab Lab management solution. It provides a comprehensive, web-
|
||||
[![Coverage Status](https://coveralls.io/repos/github/sleede/fab-manager/badge.svg)](https://coveralls.io/github/sleede/fab-manager)
|
||||
[![Docker pulls](https://img.shields.io/docker/pulls/sleede/fab-manager.svg)](https://hub.docker.com/r/sleede/fab-manager/)
|
||||
[![Docker Build Status](https://img.shields.io/docker/build/sleede/fab-manager.svg)](https://hub.docker.com/r/sleede/fab-manager/builds)
|
||||
[![Crowdin](https://badges.crowdin.net/fab-manager/localized.svg)](https://crowdin.com/project/fab-manager)
|
||||
|
||||
##### Table of Contents
|
||||
1. [Software stack](#software-stack)
|
||||
|
@ -85,8 +85,8 @@ Application.Controllers.controller('AdminCalendarController', ['$scope', '$state
|
||||
resolve: {
|
||||
object () {
|
||||
return {
|
||||
title: _t('admin_calendar.confirmation_required'),
|
||||
msg: _t('admin_calendar.do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION'
|
||||
title: _t('app.admin.calendar.confirmation_required'),
|
||||
msg: _t('app.admin.calendar.do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION'
|
||||
, { GENDER: getGender($scope.currentUser), USER: slot.user.name, DATE: moment(slot.start_at).format('L'), TIME: moment(slot.start_at).format('LT'), RESERVATION: slot.reservable.name })
|
||||
};
|
||||
}
|
||||
@ -105,10 +105,10 @@ Application.Controllers.controller('AdminCalendarController', ['$scope', '$state
|
||||
}
|
||||
}
|
||||
// notify the admin
|
||||
return growl.success(_t('admin_calendar.reservation_was_successfully_cancelled'));
|
||||
return growl.success(_t('app.admin.calendar.reservation_was_successfully_cancelled'));
|
||||
},
|
||||
function (data, status) { // failed
|
||||
growl.error(_t('admin_calendar.reservation_cancellation_failed'));
|
||||
growl.error(_t('app.admin.calendar.reservation_cancellation_failed'));
|
||||
}
|
||||
);
|
||||
}
|
||||
@ -122,17 +122,17 @@ Application.Controllers.controller('AdminCalendarController', ['$scope', '$state
|
||||
*/
|
||||
$scope.removeMachine = function (machine) {
|
||||
if ($scope.availability.machine_ids.length === 1) {
|
||||
return growl.error(_t('admin_calendar.unable_to_remove_the_last_machine_of_the_slot_delete_the_slot_rather'));
|
||||
return growl.error(_t('app.admin.calendar.unable_to_remove_the_last_machine_of_the_slot_delete_the_slot_rather'));
|
||||
} else {
|
||||
// open a confirmation dialog
|
||||
return dialogs.confirm({
|
||||
resolve: {
|
||||
object () {
|
||||
return {
|
||||
title: _t('admin_calendar.confirmation_required'),
|
||||
msg: _t('admin_calendar.do_you_really_want_to_remove_MACHINE_from_this_slot', { GENDER: getGender($scope.currentUser), MACHINE: machine.name }) + ' ' +
|
||||
_t('admin_calendar.this_will_prevent_any_new_reservation_on_this_slot_but_wont_cancel_those_existing') + ' ' +
|
||||
_t('admin_calendar.beware_this_cannot_be_reverted')
|
||||
title: _t('app.admin.calendar.confirmation_required'),
|
||||
msg: _t('app.admin.calendar.do_you_really_want_to_remove_MACHINE_from_this_slot', { GENDER: getGender($scope.currentUser), MACHINE: machine.name }) + ' ' +
|
||||
_t('app.admin.calendar.this_will_prevent_any_new_reservation_on_this_slot_but_wont_cancel_those_existing') + '<br><strong>' +
|
||||
_t('app.admin.calendar.beware_this_cannot_be_reverted') + '</strong>'
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -154,10 +154,10 @@ Application.Controllers.controller('AdminCalendarController', ['$scope', '$state
|
||||
$scope.availability.title = data.title;
|
||||
uiCalendarConfig.calendars.calendar.fullCalendar('rerenderEvents');
|
||||
// notify the admin
|
||||
return growl.success(_t('admin_calendar.the_machine_was_successfully_removed_from_the_slot'));
|
||||
return growl.success(_t('app.admin.calendar.the_machine_was_successfully_removed_from_the_slot'));
|
||||
}
|
||||
, function (data, status) { // failed
|
||||
growl.error(_t('admin_calendar.deletion_failed'));
|
||||
growl.error(_t('app.admin.calendar.deletion_failed'));
|
||||
}
|
||||
);
|
||||
});
|
||||
@ -171,7 +171,7 @@ Application.Controllers.controller('AdminCalendarController', ['$scope', '$state
|
||||
$scope.alertExport = function (type) {
|
||||
Export.status({ category: 'availabilities', type }).then(function (res) {
|
||||
if (!res.data.exists) {
|
||||
return growl.success(_t('admin_calendar.export_is_running_you_ll_be_notified_when_its_ready'));
|
||||
return growl.success(_t('app.admin.calendar.export_is_running_you_ll_be_notified_when_its_ready'));
|
||||
}
|
||||
});
|
||||
};
|
||||
@ -199,8 +199,8 @@ Application.Controllers.controller('AdminCalendarController', ['$scope', '$state
|
||||
resolve: {
|
||||
object () {
|
||||
return {
|
||||
title: _t('admin_calendar.confirmation_required'),
|
||||
msg: locked ? _t('admin_calendar.do_you_really_want_to_allow_reservations') : _t('admin_calendar.do_you_really_want_to_block_this_slot')
|
||||
title: _t('app.admin.calendar.confirmation_required'),
|
||||
msg: locked ? _t('app.admin.calendar.do_you_really_want_to_allow_reservations') : _t('app.admin.calendar.do_you_really_want_to_block_this_slot')
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -212,18 +212,18 @@ Application.Controllers.controller('AdminCalendarController', ['$scope', '$state
|
||||
{ lock: !locked },
|
||||
function (data) { // success
|
||||
$scope.availability = data;
|
||||
growl.success(locked ? _t('admin_calendar.unlocking_success') : _t('admin_calendar.locking_success'));
|
||||
growl.success(locked ? _t('app.admin.calendar.unlocking_success') : _t('app.admin.calendar.locking_success'));
|
||||
uiCalendarConfig.calendars.calendar.fullCalendar('refetchEvents');
|
||||
},
|
||||
function (error) { // failed
|
||||
growl.error(locked ? _t('admin_calendar.unlocking_failed') : _t('admin_calendar.locking_failed'));
|
||||
growl.error(locked ? _t('app.admin.calendar.unlocking_failed') : _t('app.admin.calendar.locking_failed'));
|
||||
console.error(error);
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
} else {
|
||||
return growl.error(_t('admin_calendar.unlockable_because_reservations'));
|
||||
return growl.error(_t('app.admin.calendar.unlockable_because_reservations'));
|
||||
}
|
||||
};
|
||||
|
||||
@ -275,7 +275,7 @@ Application.Controllers.controller('AdminCalendarController', ['$scope', '$state
|
||||
// check if slot is not in the past
|
||||
const today = new Date();
|
||||
if (Math.trunc((start.valueOf() - today) / (60 * 1000)) < 0) {
|
||||
growl.warning(_t('admin_calendar.event_in_the_past'));
|
||||
growl.warning(_t('app.admin.calendar.event_in_the_past'));
|
||||
return uiCalendarConfig.calendars.calendar.fullCalendar('unselect');
|
||||
}
|
||||
|
||||
@ -483,7 +483,7 @@ Application.Controllers.controller('CreateEventModalController', ['$scope', '$ui
|
||||
if ($scope.selectedMachines.length > 0) {
|
||||
$scope.availability.machine_ids = $scope.selectedMachines.map(function (m) { return m.id; });
|
||||
} else {
|
||||
growl.error(_t('admin_calendar.you_should_select_at_least_a_machine'));
|
||||
growl.error(_t('app.admin.calendar.you_should_select_at_least_a_machine'));
|
||||
return;
|
||||
}
|
||||
} else if ($scope.availability.available_type === 'training') {
|
||||
@ -597,7 +597,7 @@ Application.Controllers.controller('CreateEventModalController', ['$scope', '$ui
|
||||
const validateSelection = function () {
|
||||
if ($scope.availability.available_type === 'machines') {
|
||||
if ($scope.selectedMachines.length === 0) {
|
||||
return growl.error(_t('admin_calendar.you_should_select_at_least_a_machine'));
|
||||
return growl.error(_t('app.admin.calendar.you_should_select_at_least_a_machine'));
|
||||
}
|
||||
}
|
||||
$scope.step++;
|
||||
@ -609,13 +609,13 @@ Application.Controllers.controller('CreateEventModalController', ['$scope', '$ui
|
||||
const validateRecurrence = function () {
|
||||
if ($scope.availability.is_recurrent) {
|
||||
if (!$scope.availability.period) {
|
||||
return growl.error(_t('admin_calendar.select_period'));
|
||||
return growl.error(_t('app.admin.calendar.select_period'));
|
||||
}
|
||||
if (!$scope.availability.nb_periods) {
|
||||
return growl.error(_t('admin_calendar.select_nb_period'));
|
||||
return growl.error(_t('app.admin.calendar.select_nb_period'));
|
||||
}
|
||||
if (!$scope.availability.end_date) {
|
||||
return growl.error(_t('admin_calendar.select_end_date'));
|
||||
return growl.error(_t('app.admin.calendar.select_end_date'));
|
||||
}
|
||||
}
|
||||
// settings are ok
|
||||
@ -663,7 +663,7 @@ Application.Controllers.controller('CreateEventModalController', ['$scope', '$ui
|
||||
$scope.reservableName = `<strong>${$scope.selectedSpace.name}</strong>`;
|
||||
break;
|
||||
default:
|
||||
$scope.reservableName = `<span class="warning">${_t("admin_calendar.none")}</span>`;
|
||||
$scope.reservableName = `<span class="warning">${_t("app.admin.calendar.none")}</span>`;
|
||||
}
|
||||
const tags = $scope.tags.filter(function (t) {
|
||||
return $scope.availability.tag_ids.indexOf(t.id) > -1;
|
||||
@ -672,7 +672,7 @@ Application.Controllers.controller('CreateEventModalController', ['$scope', '$ui
|
||||
}
|
||||
|
||||
const localizedList = function (items) {
|
||||
if (items.length === 0) return `<span class="text-gray text-italic">${_t("admin_calendar.none")}</span>`;
|
||||
if (items.length === 0) return `<span class="text-gray text-italic">${_t("app.admin.calendar.none")}</span>`;
|
||||
|
||||
const names = items.map(function (i) { return $sce.trustAsHtml(`<strong>${i.name}</strong>`); });
|
||||
if (items.length > 1) return names.slice(0, -1).join(', ') + ` ${_t('and')} ` + names[names.length - 1];
|
||||
@ -709,12 +709,12 @@ Application.Controllers.controller('DeleteRecurrentAvailabilityController', ['$s
|
||||
// delete success
|
||||
if (res.deleted > 1) {
|
||||
growl.success(_t(
|
||||
'admin_calendar.slots_deleted',
|
||||
'app.admin.calendar.slots_deleted',
|
||||
{START: moment(start_at).format('LL LT'), COUNT: res.deleted - 1}
|
||||
));
|
||||
} else {
|
||||
growl.success(_t(
|
||||
'admin_calendar.slot_successfully_deleted',
|
||||
'app.admin.calendar.slot_successfully_deleted',
|
||||
{START: moment(start_at).format('LL LT'), END: moment(end_at).format('LT')}
|
||||
));
|
||||
}
|
||||
@ -728,12 +728,12 @@ Application.Controllers.controller('DeleteRecurrentAvailabilityController', ['$s
|
||||
const { data } = res;
|
||||
if (data.total > 1) {
|
||||
growl.warning(_t(
|
||||
'admin_calendar.slots_not_deleted',
|
||||
'app.admin.calendar.slots_not_deleted',
|
||||
{TOTAL: data.total, COUNT: data.total - data.deleted}
|
||||
));
|
||||
} else {
|
||||
growl.error(_t(
|
||||
'admin_calendar.unable_to_delete_the_slot',
|
||||
'app.admin.calendar.unable_to_delete_the_slot',
|
||||
{START: moment(start_at).format('LL LT'), END: moment(end_at).format('LT')}
|
||||
));
|
||||
}
|
||||
@ -787,7 +787,7 @@ Application.Controllers.controller('AdminICalendarController', ['$scope', 'iCale
|
||||
$scope.newCalendar.text_hidden = false;
|
||||
}, function (error) {
|
||||
// failed
|
||||
growl.error(_t('icalendar.create_error'));
|
||||
growl.error(_t('app.admin.icalendar.create_error'));
|
||||
console.error(error);
|
||||
})
|
||||
}
|
||||
@ -815,8 +815,8 @@ Application.Controllers.controller('AdminICalendarController', ['$scope', 'iCale
|
||||
resolve: {
|
||||
object () {
|
||||
return {
|
||||
title: _t('icalendar.confirmation_required'),
|
||||
msg: _t('icalendar.confirm_delete_import')
|
||||
title: _t('app.admin.icalendar.confirmation_required'),
|
||||
msg: _t('app.admin.icalendar.confirm_delete_import')
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -828,10 +828,10 @@ Application.Controllers.controller('AdminICalendarController', ['$scope', 'iCale
|
||||
// success
|
||||
const idx = $scope.calendars.indexOf(calendar);
|
||||
$scope.calendars.splice(idx, 1);
|
||||
growl.info(_t('icalendar.delete_success'));
|
||||
growl.info(_t('app.admin.icalendar.delete_success'));
|
||||
}, function (error) {
|
||||
// failed
|
||||
growl.error(_t('icalendar.delete_failed'));
|
||||
growl.error(_t('app.admin.icalendar.delete_failed'));
|
||||
console.error(error);
|
||||
}
|
||||
);
|
||||
@ -848,10 +848,10 @@ Application.Controllers.controller('AdminICalendarController', ['$scope', 'iCale
|
||||
{ id: calendar.id },
|
||||
function () {
|
||||
// success
|
||||
growl.info(_t('icalendar.refresh'));
|
||||
growl.info(_t('app.admin.icalendar.refresh'));
|
||||
}, function (error) {
|
||||
// failed
|
||||
growl.error(_t('icalendar.sync_failed'));
|
||||
growl.error(_t('app.admin.icalendar.sync_failed'));
|
||||
console.error(error);
|
||||
}
|
||||
)
|
||||
|
@ -196,7 +196,7 @@ Application.Controllers.controller('TrainingsAdminController', ['$scope', '$stat
|
||||
return selected.push(m.name);
|
||||
}
|
||||
});
|
||||
if (selected.length) { return selected.join(', '); } else { return _t('none'); }
|
||||
if (selected.length) { return selected.join(', '); } else { return _t('app.admin.trainings.none'); }
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -325,7 +325,7 @@ Application.Controllers.controller('ApplicationController', ['$rootScope', '$sco
|
||||
angular.forEach(notifications.notifications, function (n) { toDisplay.push(n); });
|
||||
|
||||
if (toDisplay.length < notifications.totals.unread) {
|
||||
toDisplay.push({ message: { description: _t('and_NUMBER_other_notifications', { NUMBER: notifications.totals.unread - toDisplay.length }) } });
|
||||
toDisplay.push({ message: { description: _t('app.public.common.and_NUMBER_other_notifications', { NUMBER: notifications.totals.unread - toDisplay.length }) } });
|
||||
}
|
||||
|
||||
angular.forEach(toDisplay, function (notification) { growl.info(notification.message.description); });
|
||||
|
@ -18,33 +18,33 @@ Application.Controllers.controller('MainNavController', ['$scope', function ($sc
|
||||
$scope.navLinks = [
|
||||
{
|
||||
state: 'app.public.home',
|
||||
linkText: 'home',
|
||||
linkText: 'app.public.common.home',
|
||||
linkIcon: 'home'
|
||||
},
|
||||
|
||||
{
|
||||
state: 'app.public.machines_list',
|
||||
linkText: 'reserve_a_machine',
|
||||
linkText: 'app.public.common.reserve_a_machine',
|
||||
linkIcon: 'cogs'
|
||||
},
|
||||
{
|
||||
state: 'app.public.trainings_list',
|
||||
linkText: 'trainings_registrations',
|
||||
linkText: 'app.public.common.trainings_registrations',
|
||||
linkIcon: 'graduation-cap'
|
||||
},
|
||||
{
|
||||
state: 'app.public.events_list',
|
||||
linkText: 'events_registrations',
|
||||
linkText: 'app.public.common.events_registrations',
|
||||
linkIcon: 'tags'
|
||||
},
|
||||
{
|
||||
state: 'app.public.calendar',
|
||||
linkText: 'public_calendar',
|
||||
linkText: 'app.public.common.public_calendar',
|
||||
linkIcon: 'calendar'
|
||||
},
|
||||
{
|
||||
state: 'app.public.projects_list',
|
||||
linkText: 'projects_gallery',
|
||||
linkText: 'app.public.common.projects_gallery',
|
||||
linkIcon: 'th'
|
||||
}
|
||||
|
||||
@ -53,7 +53,7 @@ Application.Controllers.controller('MainNavController', ['$scope', function ($sc
|
||||
if (!Fablab.withoutPlans) {
|
||||
$scope.navLinks.push({
|
||||
state: 'app.public.plans',
|
||||
linkText: 'subscriptions',
|
||||
linkText: 'app.public.common.subscriptions',
|
||||
linkIcon: 'credit-card'
|
||||
});
|
||||
}
|
||||
@ -61,7 +61,7 @@ Application.Controllers.controller('MainNavController', ['$scope', function ($sc
|
||||
if (!Fablab.withoutSpaces) {
|
||||
$scope.navLinks.splice(3, 0, {
|
||||
state: 'app.public.spaces_list',
|
||||
linkText: 'reserve_a_space',
|
||||
linkText: 'app.public.common.reserve_a_space',
|
||||
linkIcon: 'rocket'
|
||||
});
|
||||
}
|
||||
@ -70,57 +70,57 @@ Application.Controllers.controller('MainNavController', ['$scope', function ($sc
|
||||
const adminNavLinks = [
|
||||
{
|
||||
state: 'app.admin.trainings',
|
||||
linkText: 'trainings_monitoring',
|
||||
linkText: 'app.public.common.trainings_monitoring',
|
||||
linkIcon: 'graduation-cap'
|
||||
},
|
||||
{
|
||||
state: 'app.admin.calendar',
|
||||
linkText: 'manage_the_calendar',
|
||||
linkText: 'app.public.common.manage_the_calendar',
|
||||
linkIcon: 'calendar'
|
||||
},
|
||||
{
|
||||
state: 'app.admin.members',
|
||||
linkText: 'manage_the_users',
|
||||
linkText: 'app.public.common.manage_the_users',
|
||||
linkIcon: 'users'
|
||||
},
|
||||
{
|
||||
state: 'app.admin.invoices',
|
||||
linkText: 'manage_the_invoices',
|
||||
linkText: 'app.public.common.manage_the_invoices',
|
||||
linkIcon: 'file-pdf-o'
|
||||
},
|
||||
{
|
||||
state: 'app.admin.pricing',
|
||||
linkText: 'subscriptions_and_prices',
|
||||
linkText: 'app.public.common.subscriptions_and_prices',
|
||||
linkIcon: 'money'
|
||||
},
|
||||
{
|
||||
state: 'app.admin.events',
|
||||
linkText: 'manage_the_events',
|
||||
linkText: 'app.public.common.manage_the_events',
|
||||
linkIcon: 'tags'
|
||||
},
|
||||
{
|
||||
state: 'app.public.machines_list',
|
||||
linkText: 'manage_the_machines',
|
||||
linkText: 'app.public.common.manage_the_machines',
|
||||
linkIcon: 'cogs'
|
||||
},
|
||||
{
|
||||
state: 'app.admin.project_elements',
|
||||
linkText: 'manage_the_projects_elements',
|
||||
linkText: 'app.public.common.manage_the_projects_elements',
|
||||
linkIcon: 'tasks'
|
||||
},
|
||||
{
|
||||
state: 'app.admin.statistics',
|
||||
linkText: 'statistics',
|
||||
linkText: 'app.public.common.statistics',
|
||||
linkIcon: 'bar-chart-o'
|
||||
},
|
||||
{
|
||||
state: 'app.admin.settings',
|
||||
linkText: 'customization',
|
||||
linkText: 'app.public.common.customization',
|
||||
linkIcon: 'gear'
|
||||
},
|
||||
{
|
||||
state: 'app.admin.open_api_clients',
|
||||
linkText: 'open_api_clients',
|
||||
linkText: 'app.public.common.open_api_clients',
|
||||
linkIcon: 'cloud'
|
||||
}
|
||||
].concat(Fablab.adminNavLinks);
|
||||
@ -130,7 +130,7 @@ Application.Controllers.controller('MainNavController', ['$scope', function ($sc
|
||||
if (!Fablab.withoutSpaces) {
|
||||
return $scope.adminNavLinks.splice(7, 0, {
|
||||
state: 'app.public.spaces_list',
|
||||
linkText: 'manage_the_spaces',
|
||||
linkText: 'app.public.common.manage_the_spaces',
|
||||
linkIcon: 'rocket'
|
||||
});
|
||||
}
|
||||
|
@ -133,16 +133,16 @@ Application.Controllers.controller('PlansIndexController', ['$scope', '$rootScop
|
||||
if ($scope.currentUser.role !== 'admin') {
|
||||
$rootScope.currentUser = user;
|
||||
Auth._currentUser.group_id = user.group_id;
|
||||
growl.success(_t('your_group_was_successfully_changed'));
|
||||
growl.success(_t('app.public.plans.your_group_was_successfully_changed'));
|
||||
} else {
|
||||
growl.success(_t('the_user_s_group_was_successfully_changed'));
|
||||
growl.success(_t('app.public.plans.the_user_s_group_was_successfully_changed'));
|
||||
}
|
||||
}
|
||||
, function (err) {
|
||||
if ($scope.currentUser.role !== 'admin') {
|
||||
growl.error(_t('an_error_prevented_your_group_from_being_changed'));
|
||||
growl.error(_t('app.public.plans.an_error_prevented_your_group_from_being_changed'));
|
||||
} else {
|
||||
growl.error(_t('an_error_prevented_to_change_the_user_s_group'));
|
||||
growl.error(_t('app.public.plans.an_error_prevented_to_change_the_user_s_group'));
|
||||
}
|
||||
console.error(err);
|
||||
});
|
||||
@ -318,10 +318,10 @@ Application.Controllers.controller('PlansIndexController', ['$scope', '$rootScop
|
||||
|
||||
// Button label
|
||||
if ($scope.amount > 0) {
|
||||
$scope.validButtonName = _t('confirm_payment_of_html', { ROLE: $scope.currentUser.role, AMOUNT: $filter('currency')($scope.amount) });
|
||||
$scope.validButtonName = _t('app.public.plans.confirm_payment_of_html', { ROLE: $scope.currentUser.role, AMOUNT: $filter('currency')($scope.amount) });
|
||||
} else {
|
||||
if ((price.price > 0) && ($scope.walletAmount === 0)) {
|
||||
$scope.validButtonName = _t('confirm_payment_of_html', { ROLE: $scope.currentUser.role, AMOUNT: $filter('currency')(price.price) });
|
||||
$scope.validButtonName = _t('app.public.plans.confirm_payment_of_html', { ROLE: $scope.currentUser.role, AMOUNT: $filter('currency')(price.price) });
|
||||
} else {
|
||||
$scope.validButtonName = _t('confirm');
|
||||
}
|
||||
@ -345,7 +345,7 @@ Application.Controllers.controller('PlansIndexController', ['$scope', '$rootScop
|
||||
}
|
||||
, function (data, status) { // failed
|
||||
$scope.alerts = [];
|
||||
$scope.alerts.push({ msg: _t('an_error_occured_during_the_payment_process_please_try_again_later'), type: 'danger' });
|
||||
$scope.alerts.push({ msg: _t('app.public.plans.an_error_occured_during_the_payment_process_please_try_again_later'), type: 'danger' });
|
||||
$scope.attempting = false;
|
||||
}
|
||||
);
|
||||
|
@ -191,8 +191,8 @@ Application.Controllers.controller('ShowSpaceController', ['$scope', '$state', '
|
||||
resolve: {
|
||||
object () {
|
||||
return {
|
||||
title: _t('space_show.confirmation_required'),
|
||||
msg: _t('space_show.do_you_really_want_to_delete_this_space')
|
||||
title: _t('app.public.space_show.confirmation_required'),
|
||||
msg: _t('app.public.space_show.do_you_really_want_to_delete_this_space')
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -204,7 +204,7 @@ Application.Controllers.controller('ShowSpaceController', ['$scope', '$state', '
|
||||
$state.go('app.public.spaces_list');
|
||||
},
|
||||
function (error) {
|
||||
growl.warning(_t('space_show.the_space_cant_be_deleted_because_it_is_already_reserved_by_some_users'));
|
||||
growl.warning(_t('app.public.space_show.the_space_cant_be_deleted_because_it_is_already_reserved_by_some_users'));
|
||||
console.error(error);
|
||||
}
|
||||
);
|
||||
|
@ -1,14 +1,3 @@
|
||||
/* eslint-disable
|
||||
no-return-assign,
|
||||
no-undef,
|
||||
*/
|
||||
// TODO: This file was created by bulk-decaffeinate.
|
||||
// Fix any style issues and re-enable lint.
|
||||
/*
|
||||
* decaffeinate suggestions:
|
||||
* DS102: Remove unnecessary code created because of implicit returns
|
||||
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
@ -36,9 +25,9 @@ Application.Directives.directive('selectMember', [ 'Diacritics', 'Member', funct
|
||||
q['subscription'] = attributes.subscription;
|
||||
}
|
||||
|
||||
return Member.search(q, function (users) {
|
||||
Member.search(q, function (users) {
|
||||
scope.matchingMembers = users;
|
||||
return scope.isLoadingMembers = false;
|
||||
scope.isLoadingMembers = false;
|
||||
}
|
||||
, function (error) { console.error(error); });
|
||||
};
|
||||
|
@ -36,7 +36,7 @@ angular.module('application.router', ['ui.router'])
|
||||
resolve: {
|
||||
logoFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'logo-file' }).$promise; }],
|
||||
logoBlackFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'logo-black-file' }).$promise; }],
|
||||
commonTranslations: ['Translations', function (Translations) { return Translations.query(['app.public.common', 'app.shared.buttons', 'app.shared.elements']).$promise; }]
|
||||
sharedTranslations: ['Translations', function (Translations) { return Translations.query(['app.shared', 'app.public.common']).$promise; }]
|
||||
},
|
||||
onEnter: ['$rootScope', 'logoFile', 'logoBlackFile', 'CSRF', function ($rootScope, logoFile, logoBlackFile, CSRF) {
|
||||
// Retrieve Anti-CSRF tokens from cookies
|
||||
@ -47,7 +47,10 @@ angular.module('application.router', ['ui.router'])
|
||||
}]
|
||||
})
|
||||
.state('app.public', {
|
||||
abstract: true
|
||||
abstract: true,
|
||||
resolve: {
|
||||
publicTranslations: ['Translations', function (Translations) { return Translations.query(['app.public']).$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.logged', {
|
||||
abstract: true,
|
||||
@ -55,7 +58,8 @@ angular.module('application.router', ['ui.router'])
|
||||
authorizedRoles: ['member', 'admin']
|
||||
},
|
||||
resolve: {
|
||||
currentUser: ['Auth', function (Auth) { return Auth.currentUser(); }]
|
||||
currentUser: ['Auth', function (Auth) { return Auth.currentUser(); }],
|
||||
loggedTranslations: ['Translations', function (Translations) { return Translations.query(['app.logged']).$promise; }]
|
||||
},
|
||||
onEnter: ['$state', '$timeout', 'currentUser', '$rootScope', function ($state, $timeout, currentUser, $rootScope) {
|
||||
$rootScope.currentUser = currentUser;
|
||||
@ -67,7 +71,8 @@ angular.module('application.router', ['ui.router'])
|
||||
authorizedRoles: ['admin']
|
||||
},
|
||||
resolve: {
|
||||
currentUser: ['Auth', function (Auth) { return Auth.currentUser(); }]
|
||||
currentUser: ['Auth', function (Auth) { return Auth.currentUser(); }],
|
||||
adminTranslations: ['Translations', function (Translations) { return Translations.query(['app.admin']).$promise; }]
|
||||
},
|
||||
onEnter: ['$state', '$timeout', 'currentUser', '$rootScope', function ($state, $timeout, currentUser, $rootScope) {
|
||||
$rootScope.currentUser = currentUser;
|
||||
@ -82,9 +87,6 @@ angular.module('application.router', ['ui.router'])
|
||||
templateUrl: '<%= asset_path "shared/about.html" %>',
|
||||
controller: 'AboutController'
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.public.about').$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.public.home', {
|
||||
@ -101,7 +103,6 @@ angular.module('application.router', ['ui.router'])
|
||||
upcomingEventsPromise: ['Event', function (Event) { return Event.upcoming({ limit: 3 }).$promise; }],
|
||||
homeBlogpostPromise: ['Setting', function (Setting) { return Setting.get({ name: 'home_blogpost' }).$promise; }],
|
||||
twitterNamePromise: ['Setting', function (Setting) { return Setting.get({ name: 'twitter_name' }).$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.public.home').$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.public.privacy', {
|
||||
@ -111,9 +112,6 @@ angular.module('application.router', ['ui.router'])
|
||||
templateUrl: '<%= asset_path "shared/privacy.html" %>',
|
||||
controller: 'PrivacyController'
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.public.privacy').$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -132,7 +130,6 @@ angular.module('application.router', ['ui.router'])
|
||||
groupsPromise: ['Group', function (Group) { return Group.query().$promise; }],
|
||||
cguFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'cgu-file' }).$promise; }],
|
||||
memberPromise: ['Member', 'currentUser', function (Member, currentUser) { return Member.get({ id: currentUser.id }).$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.logged.profileCompletion', 'app.shared.user']).$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -151,9 +148,6 @@ angular.module('application.router', ['ui.router'])
|
||||
templateUrl: '<%= asset_path "dashboard/profile.html" %>',
|
||||
controller: 'DashboardController'
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.logged.dashboard.profile', 'app.shared.public_profile']).$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.logged.dashboard.settings', {
|
||||
@ -167,7 +161,6 @@ angular.module('application.router', ['ui.router'])
|
||||
resolve: {
|
||||
groups: ['Group', function (Group) { return Group.query().$promise; }],
|
||||
activeProviderPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.active().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.logged.dashboard.settings', 'app.shared.user']).$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.logged.dashboard.projects', {
|
||||
@ -177,9 +170,6 @@ angular.module('application.router', ['ui.router'])
|
||||
templateUrl: '<%= asset_path "dashboard/projects.html" %>',
|
||||
controller: 'DashboardController'
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.logged.dashboard.projects').$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.logged.dashboard.trainings', {
|
||||
@ -189,9 +179,6 @@ angular.module('application.router', ['ui.router'])
|
||||
templateUrl: '<%= asset_path "dashboard/trainings.html" %>',
|
||||
controller: 'DashboardController'
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.logged.dashboard.trainings').$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.logged.dashboard.events', {
|
||||
@ -201,9 +188,6 @@ angular.module('application.router', ['ui.router'])
|
||||
templateUrl: '<%= asset_path "dashboard/events.html" %>',
|
||||
controller: 'DashboardController'
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.logged.dashboard.events').$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.logged.dashboard.invoices', {
|
||||
@ -213,9 +197,6 @@ angular.module('application.router', ['ui.router'])
|
||||
templateUrl: '<%= asset_path "dashboard/invoices.html" %>',
|
||||
controller: 'DashboardController'
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.logged.dashboard.invoices').$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.logged.dashboard.wallet', {
|
||||
@ -228,8 +209,7 @@ angular.module('application.router', ['ui.router'])
|
||||
},
|
||||
resolve: {
|
||||
walletPromise: ['Wallet', 'currentUser', function (Wallet, currentUser) { return Wallet.getWalletByUser({ user_id: currentUser.id }).$promise; }],
|
||||
transactionsPromise: ['Wallet', 'walletPromise', function (Wallet, walletPromise) { return Wallet.transactions({ id: walletPromise.id }).$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.shared.wallet']).$promise; }]
|
||||
transactionsPromise: ['Wallet', 'walletPromise', function (Wallet, walletPromise) { return Wallet.transactions({ id: walletPromise.id }).$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -243,8 +223,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
memberPromise: ['$stateParams', 'Member', function ($stateParams, Member) { return Member.get({ id: $stateParams.id }).$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.logged.members_show', 'app.shared.public_profile']).$promise; }]
|
||||
memberPromise: ['$stateParams', 'Member', function ($stateParams, Member) { return Member.get({ id: $stateParams.id }).$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.logged.members', {
|
||||
@ -256,8 +235,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
membersPromise: ['Member', function (Member) { return Member.query({ requested_attributes: '[profile]', page: 1, size: 10 }).$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.logged.members').$promise; }]
|
||||
membersPromise: ['Member', function (Member) { return Member.query({ requested_attributes: '[profile]', page: 1, size: 10 }).$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -273,8 +251,7 @@ angular.module('application.router', ['ui.router'])
|
||||
resolve: {
|
||||
themesPromise: ['Theme', function (Theme) { return Theme.query().$promise; }],
|
||||
componentsPromise: ['Component', function (Component) { return Component.query().$promise; }],
|
||||
machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.public.projects_list').$promise; }]
|
||||
machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.logged.projects_new', {
|
||||
@ -286,8 +263,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
allowedExtensions: ['Project', function (Project) { return Project.allowedExtensions().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.logged.projects_new', 'app.shared.project']).$promise; }]
|
||||
allowedExtensions: ['Project', function (Project) { return Project.allowedExtensions().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.public.projects_show', {
|
||||
@ -299,8 +275,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
projectPromise: ['$stateParams', 'Project', function ($stateParams, Project) { return Project.get({ id: $stateParams.id }).$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.public.projects_show').$promise; }]
|
||||
projectPromise: ['$stateParams', 'Project', function ($stateParams, Project) { return Project.get({ id: $stateParams.id }).$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.logged.projects_edit', {
|
||||
@ -313,8 +288,7 @@ angular.module('application.router', ['ui.router'])
|
||||
},
|
||||
resolve: {
|
||||
projectPromise: ['$stateParams', 'Project', function ($stateParams, Project) { return Project.get({ id: $stateParams.id }).$promise; }],
|
||||
allowedExtensions: ['Project', function (Project) { return Project.allowedExtensions().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.logged.projects_edit', 'app.shared.project']).$promise; }]
|
||||
allowedExtensions: ['Project', function (Project) { return Project.allowedExtensions().$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -328,8 +302,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.public.machines_list', 'app.shared.training_reservation_modal', 'app.shared.request_training_modal']).$promise; }]
|
||||
machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.machines_new', {
|
||||
@ -339,9 +312,6 @@ angular.module('application.router', ['ui.router'])
|
||||
templateUrl: '<%= asset_path "machines/new.html" %>',
|
||||
controller: 'NewMachineController'
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.machines_new', 'app.shared.machine']).$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.public.machines_show', {
|
||||
@ -353,8 +323,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
machinePromise: ['Machine', '$stateParams', function (Machine, $stateParams) { return Machine.get({ id: $stateParams.id }).$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.public.machines_show', 'app.shared.training_reservation_modal', 'app.shared.request_training_modal']).$promise; }]
|
||||
machinePromise: ['Machine', '$stateParams', function (Machine, $stateParams) { return Machine.get({ id: $stateParams.id }).$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.logged.machines_reserve', {
|
||||
@ -380,11 +349,6 @@ angular.module('application.router', ['ui.router'])
|
||||
'booking_cancel_delay', \
|
||||
'subscription_explications_alert']`
|
||||
}).$promise;
|
||||
}],
|
||||
translations: ['Translations', function (Translations) {
|
||||
return Translations.query(['app.logged.machines_reserve', 'app.shared.plan_subscribe', 'app.shared.member_select',
|
||||
'app.shared.stripe', 'app.shared.valid_reservation_modal', 'app.shared.confirm_modify_slot_modal',
|
||||
'app.shared.wallet', 'app.shared.coupon_input', 'app.shared.cart']).$promise;
|
||||
}]
|
||||
}
|
||||
})
|
||||
@ -397,8 +361,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
machinePromise: ['Machine', '$stateParams', function (Machine, $stateParams) { return Machine.get({ id: $stateParams.id }).$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.machines_edit', 'app.shared.machine']).$promise; }]
|
||||
machinePromise: ['Machine', '$stateParams', function (Machine, $stateParams) { return Machine.get({ id: $stateParams.id }).$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -413,8 +376,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
spacesPromise: ['Space', function (Space) { return Space.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.public.spaces_list']).$promise; }]
|
||||
spacesPromise: ['Space', function (Space) { return Space.query().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.space_new', {
|
||||
@ -425,9 +387,6 @@ angular.module('application.router', ['ui.router'])
|
||||
templateUrl: '<%= asset_path "spaces/new.html" %>',
|
||||
controller: 'NewSpaceController'
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.space_new', 'app.shared.space']).$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.public.space_show', {
|
||||
@ -440,8 +399,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
spacePromise: ['Space', '$stateParams', function (Space, $stateParams) { return Space.get({ id: $stateParams.id }).$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.public.space_show']).$promise; }]
|
||||
spacePromise: ['Space', '$stateParams', function (Space, $stateParams) { return Space.get({ id: $stateParams.id }).$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.space_edit', {
|
||||
@ -454,8 +412,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
spacePromise: ['Space', '$stateParams', function (Space, $stateParams) { return Space.get({ id: $stateParams.id }).$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.space_edit', 'app.shared.space']).$promise; }]
|
||||
spacePromise: ['Space', '$stateParams', function (Space, $stateParams) { return Space.get({ id: $stateParams.id }).$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.logged.space_reserve', {
|
||||
@ -482,11 +439,6 @@ angular.module('application.router', ['ui.router'])
|
||||
'booking_cancel_delay', \
|
||||
'subscription_explications_alert', \
|
||||
'space_explications_alert']` }).$promise;
|
||||
}],
|
||||
translations: ['Translations', function (Translations) {
|
||||
return Translations.query(['app.logged.space_reserve', 'app.shared.plan_subscribe', 'app.shared.member_select',
|
||||
'app.shared.stripe', 'app.shared.valid_reservation_modal', 'app.shared.confirm_modify_slot_modal',
|
||||
'app.shared.wallet', 'app.shared.coupon_input', 'app.shared.cart']).$promise;
|
||||
}]
|
||||
}
|
||||
})
|
||||
@ -501,8 +453,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
trainingsPromise: ['Training', function (Training) { return Training.query({ public_page: true }).$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.public.trainings_list']).$promise; }]
|
||||
trainingsPromise: ['Training', function (Training) { return Training.query({ public_page: true }).$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.public.training_show', {
|
||||
@ -514,8 +465,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
trainingPromise: ['Training', '$stateParams', function (Training, $stateParams) { return Training.get({ id: $stateParams.id }).$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.public.training_show']).$promise; }]
|
||||
trainingPromise: ['Training', '$stateParams', function (Training, $stateParams) { return Training.get({ id: $stateParams.id }).$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.logged.trainings_reserve', {
|
||||
@ -545,11 +495,6 @@ angular.module('application.router', ['ui.router'])
|
||||
'subscription_explications_alert', \
|
||||
'training_explications_alert', \
|
||||
'training_information_message']` }).$promise;
|
||||
}],
|
||||
translations: ['Translations', function (Translations) {
|
||||
return Translations.query(['app.logged.trainings_reserve', 'app.shared.plan_subscribe', 'app.shared.member_select',
|
||||
'app.shared.stripe', 'app.shared.valid_reservation_modal', 'app.shared.confirm_modify_slot_modal',
|
||||
'app.shared.wallet', 'app.shared.coupon_input', 'app.shared.cart']).$promise;
|
||||
}]
|
||||
}
|
||||
})
|
||||
@ -561,9 +506,6 @@ angular.module('application.router', ['ui.router'])
|
||||
templateUrl: '<%= asset_path "notifications/index.html.erb" %>',
|
||||
controller: 'NotificationsController'
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.logged.notifications').$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -580,11 +522,7 @@ angular.module('application.router', ['ui.router'])
|
||||
resolve: {
|
||||
subscriptionExplicationsPromise: ['Setting', function (Setting) { return Setting.get({ name: 'subscription_explications_alert' }).$promise; }],
|
||||
plansPromise: ['Plan', function (Plan) { return Plan.query().$promise; }],
|
||||
groupsPromise: ['Group', function (Group) { return Group.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) {
|
||||
return Translations.query(['app.public.plans', 'app.shared.member_select', 'app.shared.stripe', 'app.shared.wallet',
|
||||
'app.shared.coupon_input']).$promise;
|
||||
}]
|
||||
groupsPromise: ['Group', function (Group) { return Group.query().$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -600,8 +538,7 @@ angular.module('application.router', ['ui.router'])
|
||||
resolve: {
|
||||
categoriesPromise: ['Category', function (Category) { return Category.query().$promise; }],
|
||||
themesPromise: ['EventTheme', function (EventTheme) { return EventTheme.query().$promise; }],
|
||||
ageRangesPromise: ['AgeRange', function (AgeRange) { return AgeRange.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.public.events_list').$promise; }]
|
||||
ageRangesPromise: ['AgeRange', function (AgeRange) { return AgeRange.query().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.public.events_show', {
|
||||
@ -615,11 +552,7 @@ angular.module('application.router', ['ui.router'])
|
||||
resolve: {
|
||||
eventPromise: ['Event', '$stateParams', function (Event, $stateParams) { return Event.get({ id: $stateParams.id }).$promise; }],
|
||||
priceCategoriesPromise: ['PriceCategory', function (PriceCategory) { return PriceCategory.query().$promise; }],
|
||||
settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: "['booking_move_enable', 'booking_move_delay', 'booking_cancel_enable', 'booking_cancel_delay', 'event_explications_alert']" }).$promise; }],
|
||||
translations: ['Translations', function (Translations) {
|
||||
return Translations.query(['app.public.events_show', 'app.shared.member_select', 'app.shared.stripe',
|
||||
'app.shared.valid_reservation_modal', 'app.shared.wallet', 'app.shared.coupon_input']).$promise;
|
||||
}]
|
||||
settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: "['booking_move_enable', 'booking_move_delay', 'booking_cancel_enable', 'booking_cancel_delay', 'event_explications_alert']" }).$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -638,8 +571,7 @@ angular.module('application.router', ['ui.router'])
|
||||
trainingsPromise: ['Training', function (Training) { return Training.query().$promise; }],
|
||||
machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],
|
||||
spacesPromise: ['Space', function (Space) { return Space.query().$promise; }],
|
||||
iCalendarPromise: ['ICalendar', function (ICalendar) { return ICalendar.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.public.calendar']).$promise; }]
|
||||
iCalendarPromise: ['ICalendar', function (ICalendar) { return ICalendar.query().$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -656,8 +588,7 @@ angular.module('application.router', ['ui.router'])
|
||||
resolve: {
|
||||
bookingWindowStart: ['Setting', function (Setting) { return Setting.get({ name: 'booking_window_start' }).$promise; }],
|
||||
bookingWindowEnd: ['Setting', function (Setting) { return Setting.get({ name: 'booking_window_end' }).$promise; }],
|
||||
machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.admin.calendar').$promise; }]
|
||||
machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.calendar.icalendar', {
|
||||
@ -669,8 +600,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
iCalendars: ['ICalendar', function (ICalendar) { return ICalendar.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.admin.icalendar').$promise; }]
|
||||
iCalendars: ['ICalendar', function (ICalendar) { return ICalendar.query().$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -686,8 +616,7 @@ angular.module('application.router', ['ui.router'])
|
||||
resolve: {
|
||||
componentsPromise: ['Component', function (Component) { return Component.query().$promise; }],
|
||||
licencesPromise: ['Licence', function (Licence) { return Licence.query().$promise; }],
|
||||
themesPromise: ['Theme', function (Theme) { return Theme.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.admin.project_elements').$promise; }]
|
||||
themesPromise: ['Theme', function (Theme) { return Theme.query().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.manage_abuses', {
|
||||
@ -699,8 +628,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
abusesPromise: ['Abuse', function(Abuse) { return Abuse.query().$promise; }],
|
||||
translations: ['Translations', function(Translations) { return Translations.query('app.admin.manage_abuses').$promise; }]
|
||||
abusesPromise: ['Abuse', function(Abuse) { return Abuse.query().$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -715,8 +643,7 @@ angular.module('application.router', ['ui.router'])
|
||||
},
|
||||
resolve: {
|
||||
trainingsPromise: ['Training', function (Training) { return Training.query().$promise; }],
|
||||
machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.trainings', 'app.shared.trainings']).$promise; }]
|
||||
machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.trainings_new', {
|
||||
@ -728,8 +655,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.trainings_new', 'app.shared.trainings']).$promise; }]
|
||||
machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.trainings_edit', {
|
||||
@ -742,8 +668,7 @@ angular.module('application.router', ['ui.router'])
|
||||
},
|
||||
resolve: {
|
||||
trainingPromise: ['Training', '$stateParams', function (Training, $stateParams) { return Training.get({ id: $stateParams.id }).$promise; }],
|
||||
machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.shared.trainings').$promise; }]
|
||||
machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }]
|
||||
}
|
||||
})
|
||||
// events
|
||||
@ -760,8 +685,7 @@ angular.module('application.router', ['ui.router'])
|
||||
categoriesPromise: ['Category', function (Category) { return Category.query().$promise; }],
|
||||
themesPromise: ['EventTheme', function (EventTheme) { return EventTheme.query().$promise; }],
|
||||
ageRangesPromise: ['AgeRange', function (AgeRange) { return AgeRange.query().$promise; }],
|
||||
priceCategoriesPromise: ['PriceCategory', function (PriceCategory) { return PriceCategory.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.admin.events').$promise; }]
|
||||
priceCategoriesPromise: ['PriceCategory', function (PriceCategory) { return PriceCategory.query().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.events_new', {
|
||||
@ -776,8 +700,7 @@ angular.module('application.router', ['ui.router'])
|
||||
categoriesPromise: ['Category', function (Category) { return Category.query().$promise; }],
|
||||
themesPromise: ['EventTheme', function (EventTheme) { return EventTheme.query().$promise; }],
|
||||
ageRangesPromise: ['AgeRange', function (AgeRange) { return AgeRange.query().$promise; }],
|
||||
priceCategoriesPromise: ['PriceCategory', function (PriceCategory) { return PriceCategory.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.events_new', 'app.shared.event']).$promise; }]
|
||||
priceCategoriesPromise: ['PriceCategory', function (PriceCategory) { return PriceCategory.query().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.events_edit', {
|
||||
@ -793,8 +716,7 @@ angular.module('application.router', ['ui.router'])
|
||||
categoriesPromise: ['Category', function (Category) { return Category.query().$promise; }],
|
||||
themesPromise: ['EventTheme', function (EventTheme) { return EventTheme.query().$promise; }],
|
||||
ageRangesPromise: ['AgeRange', function (AgeRange) { return AgeRange.query().$promise; }],
|
||||
priceCategoriesPromise: ['PriceCategory', function (PriceCategory) { return PriceCategory.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.events_edit', 'app.shared.event']).$promise; }]
|
||||
priceCategoriesPromise: ['PriceCategory', function (PriceCategory) { return PriceCategory.query().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.event_reservations', {
|
||||
@ -807,8 +729,7 @@ angular.module('application.router', ['ui.router'])
|
||||
},
|
||||
resolve: {
|
||||
eventPromise: ['Event', '$stateParams', function (Event, $stateParams) { return Event.get({ id: $stateParams.id }).$promise; }],
|
||||
reservationsPromise: ['Reservation', '$stateParams', function (Reservation, $stateParams) { return Reservation.query({ reservable_id: $stateParams.id, reservable_type: 'Event' }).$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.admin.event_reservations').$promise; }]
|
||||
reservationsPromise: ['Reservation', '$stateParams', function (Reservation, $stateParams) { return Reservation.query({ reservable_id: $stateParams.id, reservable_type: 'Event' }).$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -826,7 +747,6 @@ angular.module('application.router', ['ui.router'])
|
||||
groups: ['Group', function (Group) { return Group.query().$promise; }],
|
||||
machinesPricesPromise: ['Price', function (Price) { return Price.query({ priceable_type: 'Machine', plan_id: 'null' }).$promise; }],
|
||||
trainingsPricingsPromise: ['TrainingsPricing', function (TrainingsPricing) { return TrainingsPricing.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.pricing', 'app.shared.member_select', 'app.shared.coupon']).$promise; }],
|
||||
trainingsPromise: ['Training', function (Training) { return Training.query().$promise; }],
|
||||
machineCreditsPromise: ['Credit', function (Credit) { return Credit.query({ creditable_type: 'Machine' }).$promise; }],
|
||||
machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],
|
||||
@ -854,9 +774,6 @@ angular.module('application.router', ['ui.router'])
|
||||
templateUrl: '<%= asset_path "admin/plans/new.html" %>',
|
||||
controller: 'NewPlanController'
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.plans.new', 'app.shared.plan']).$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.plans.edit', {
|
||||
@ -871,8 +788,7 @@ angular.module('application.router', ['ui.router'])
|
||||
spaces: ['Space', function (Space) { return Space.query().$promise; }],
|
||||
machines: ['Machine', function (Machine) { return Machine.query().$promise; }],
|
||||
plans: ['Plan', function (Plan) { return Plan.query().$promise; }],
|
||||
planPromise: ['Plan', '$stateParams', function (Plan, $stateParams) { return Plan.get({ id: $stateParams.id }).$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.plans.edit', 'app.shared.plan']).$promise; }]
|
||||
planPromise: ['Plan', '$stateParams', function (Plan, $stateParams) { return Plan.get({ id: $stateParams.id }).$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -884,9 +800,6 @@ angular.module('application.router', ['ui.router'])
|
||||
templateUrl: '<%= asset_path "admin/coupons/new.html" %>',
|
||||
controller: 'NewCouponController'
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.coupons_new', 'app.shared.coupon']).$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.coupons_edit', {
|
||||
@ -898,8 +811,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
couponPromise: ['Coupon', '$stateParams', function (Coupon, $stateParams) { return Coupon.get({ id: $stateParams.id }).$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.coupons_edit', 'app.shared.coupon']).$promise; }]
|
||||
couponPromise: ['Coupon', '$stateParams', function (Coupon, $stateParams) { return Coupon.get({ id: $stateParams.id }).$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -928,8 +840,7 @@ angular.module('application.router', ['ui.router'])
|
||||
query: { number: '', customer: '', date: null, order_by: '-reference', page: 1, size: 20 }
|
||||
}).$promise;
|
||||
}],
|
||||
closedPeriods: [ 'AccountingPeriod', function(AccountingPeriod) { return AccountingPeriod.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.admin.invoices').$promise; }]
|
||||
closedPeriods: [ 'AccountingPeriod', function(AccountingPeriod) { return AccountingPeriod.query().$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -959,8 +870,7 @@ angular.module('application.router', ['ui.router'])
|
||||
adminsPromise: ['Admin', function (Admin) { return Admin.query().$promise; }],
|
||||
groupsPromise: ['Group', function (Group) { return Group.query().$promise; }],
|
||||
tagsPromise: ['Tag', function (Tag) { return Tag.query().$promise; }],
|
||||
authProvidersPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.admin.members').$promise; }]
|
||||
authProvidersPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.query().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.members_new', {
|
||||
@ -970,9 +880,6 @@ angular.module('application.router', ['ui.router'])
|
||||
templateUrl: '<%= asset_path "admin/members/new.html" %>',
|
||||
controller: 'NewMemberController'
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.members_new', 'app.shared.user', 'app.shared.user_admin']).$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.members_import', {
|
||||
@ -984,7 +891,6 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.members_import', 'app.shared.user', 'app.shared.user_admin']).$promise; }],
|
||||
tags: ['Tag', function(Tag) { return Tag.query().$promise }]
|
||||
}
|
||||
})
|
||||
@ -997,7 +903,6 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.members_import_result', 'app.shared.user', 'app.shared.user_admin']).$promise; }],
|
||||
importItem: ['Import', '$stateParams', function(Import, $stateParams) { return Import.get({ id: $stateParams.id }).$promise }]
|
||||
}
|
||||
})
|
||||
@ -1014,8 +919,7 @@ angular.module('application.router', ['ui.router'])
|
||||
activeProviderPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.active().$promise; }],
|
||||
walletPromise: ['Wallet', '$stateParams', function (Wallet, $stateParams) { return Wallet.getWalletByUser({ user_id: $stateParams.id }).$promise; }],
|
||||
transactionsPromise: ['Wallet', 'walletPromise', function (Wallet, walletPromise) { return Wallet.transactions({ id: walletPromise.id }).$promise; }],
|
||||
tagsPromise: ['Tag', function (Tag) { return Tag.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.members_edit', 'app.shared.user', 'app.shared.user_admin', 'app.shared.wallet']).$promise; }]
|
||||
tagsPromise: ['Tag', function (Tag) { return Tag.query().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.admins_new', {
|
||||
@ -1025,9 +929,6 @@ angular.module('application.router', ['ui.router'])
|
||||
templateUrl: '<%= asset_path "admin/admins/new.html" %>',
|
||||
controller: 'NewAdminController'
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.admin.admins_new').$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -1042,8 +943,7 @@ angular.module('application.router', ['ui.router'])
|
||||
},
|
||||
resolve: {
|
||||
mappingFieldsPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.mapping_fields().$promise; }],
|
||||
authProvidersPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.authentication_new', 'app.shared.authentication', 'app.shared.oauth2']).$promise; }]
|
||||
authProvidersPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.query().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.authentication_edit', {
|
||||
@ -1056,8 +956,7 @@ angular.module('application.router', ['ui.router'])
|
||||
},
|
||||
resolve: {
|
||||
providerPromise: ['AuthProvider', '$stateParams', function (AuthProvider, $stateParams) { return AuthProvider.get({ id: $stateParams.id }).$promise; }],
|
||||
mappingFieldsPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.mapping_fields().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query(['app.admin.authentication_edit', 'app.shared.authentication', 'app.shared.oauth2']).$promise; }]
|
||||
mappingFieldsPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.mapping_fields().$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -1072,8 +971,7 @@ angular.module('application.router', ['ui.router'])
|
||||
},
|
||||
resolve: {
|
||||
membersPromise: ['Member', function (Member) { return Member.mapping().$promise; }],
|
||||
statisticsPromise: ['Statistics', function (Statistics) { return Statistics.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.admin.statistics').$promise; }]
|
||||
statisticsPromise: ['Statistics', function (Statistics) { return Statistics.query().$promise; }]
|
||||
}
|
||||
})
|
||||
.state('app.admin.stats_graphs', {
|
||||
@ -1083,9 +981,6 @@ angular.module('application.router', ['ui.router'])
|
||||
templateUrl: '<%= asset_path "admin/statistics/graphs.html" %>',
|
||||
controller: 'GraphsController'
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.admin.stats_graphs').$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -1135,8 +1030,7 @@ angular.module('application.router', ['ui.router'])
|
||||
cguFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'cgu-file' }).$promise; }],
|
||||
cgvFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'cgv-file' }).$promise; }],
|
||||
faviconFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'favicon-file' }).$promise; }],
|
||||
profileImageFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'profile-image-file' }).$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.admin.settings').$promise; }]
|
||||
profileImageFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'profile-image-file' }).$promise; }]
|
||||
}
|
||||
})
|
||||
|
||||
@ -1150,8 +1044,7 @@ angular.module('application.router', ['ui.router'])
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
clientsPromise: ['OpenAPIClient', function (OpenAPIClient) { return OpenAPIClient.query().$promise; }],
|
||||
translations: ['Translations', function (Translations) { return Translations.query('app.admin.open_api_clients').$promise; }]
|
||||
clientsPromise: ['OpenAPIClient', function (OpenAPIClient) { return OpenAPIClient.query().$promise; }]
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -7,7 +7,7 @@
|
||||
</div>
|
||||
<div class="col-xs-10 b-l b-r-md">
|
||||
<section class="heading-title">
|
||||
<h1 translate>{{ 'admin_calendar.calendar_management' }}</h1>
|
||||
<h1 translate>{{ 'app.admin.calendar.calendar_management' }}</h1>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
@ -28,12 +28,12 @@
|
||||
<div class="col-sm-12 col-md-12 col-lg-9">
|
||||
<div ui-calendar="calendarConfig" ng-model="eventSources" calendar="calendar" class="wrapper-lg"></div>
|
||||
<div class="calendar-legend-block">
|
||||
<h4 translate>{{ 'admin_calendar.legend' }}</h4>
|
||||
<h4 translate>{{ 'app.admin.calendar.legend' }}</h4>
|
||||
<div class="legends">
|
||||
<span class="calendar-legend text-sm border-formation" translate>{{ 'admin_calendar.trainings' }}</span><br>
|
||||
<span class="calendar-legend text-sm border-machine" translate>{{ 'admin_calendar.machines' }}</span><br>
|
||||
<span class="calendar-legend text-sm border-space" ng-hide="fablabWithoutSpaces" translate>{{ 'admin_calendar.spaces' }}</span>
|
||||
<span class="calendar-legend text-sm border-event" ng-show="eventsInCalendar" translate>{{ 'admin_calendar.events' }}</span>
|
||||
<span class="calendar-legend text-sm border-formation" translate>{{ 'app.admin.calendar.trainings' }}</span><br>
|
||||
<span class="calendar-legend text-sm border-machine" translate>{{ 'app.admin.calendar.machines' }}</span><br>
|
||||
<span class="calendar-legend text-sm border-space" ng-hide="fablabWithoutSpaces" translate>{{ 'app.admin.calendar.spaces' }}</span>
|
||||
<span class="calendar-legend text-sm border-event" ng-show="eventsInCalendar" translate>{{ 'app.admin.calendar.events' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -44,17 +44,17 @@
|
||||
ng-href="api/availabilities/export_index.xlsx"
|
||||
target="export-frame"
|
||||
ng-click="alertExport('index')"
|
||||
uib-popover="{{ 'admin_calendar.availabilities_notice' | translate}}"
|
||||
uib-popover="{{ 'app.admin.calendar.availabilities_notice' | translate}}"
|
||||
popover-trigger="mouseenter"
|
||||
popover-placement="bottom">
|
||||
<i class="fa fa-file-excel-o"></i> {{ 'admin_calendar.availabilities' | translate }}
|
||||
<i class="fa fa-file-excel-o"></i> {{ 'app.admin.calendar.availabilities' | translate }}
|
||||
</a>
|
||||
<iframe name="export-frame" height="0" width="0" class="none"></iframe>
|
||||
</div>
|
||||
|
||||
<div class="widget panel b-a m m-t-lg" ng-if="availability" ng-hide="availability.available_type == 'event'">
|
||||
<div class="panel-heading b-b small">
|
||||
<h3 translate>{{ 'admin_calendar.ongoing_reservations' }}</h3>
|
||||
<h3 translate>{{ 'app.admin.calendar.ongoing_reservations' }}</h3>
|
||||
</div>
|
||||
<div class="widget-content no-bg auto wrapper" ng-class="{'reservations-locked': availability.lock}">
|
||||
<ul class="list-unstyled" ng-if="reservations.length > 0">
|
||||
@ -65,14 +65,14 @@
|
||||
<span class="btn btn-warning btn-xs" ng-click="cancelBooking(r)" ng-if="!r.canceled_at"><i class="fa fa-times red"></i></span>
|
||||
</li>
|
||||
</ul>
|
||||
<div ng-show="reservations.length == 0" translate>{{ 'admin_calendar.no_reservations' }}</div>
|
||||
<div class="m-t" ng-show="availability.lock"><i class="fa fa-ban"></i> <span class="m-l-xs" translate>{{ 'admin_calendar.reservations_locked' }}</span></div>
|
||||
<div ng-show="reservations.length == 0" translate>{{ 'app.admin.calendar.no_reservations' }}</div>
|
||||
<div class="m-t" ng-show="availability.lock"><i class="fa fa-ban"></i> <span class="m-l-xs" translate>{{ 'app.admin.calendar.reservations_locked' }}</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="widget panel b-a m m-t-lg" ng-if="availability.machine_ids.length > 0">
|
||||
<div class="panel-heading b-b small">
|
||||
<h3 translate>{{ 'admin_calendar.machines' }}</h3>
|
||||
<h3 translate>{{ 'app.admin.calendar.machines' }}</h3>
|
||||
</div>
|
||||
<div class="widget-content no-bg auto wrapper">
|
||||
<ul class="list-unstyled">
|
||||
@ -86,23 +86,23 @@
|
||||
|
||||
<div class="widget panel b-a m m-t-lg" ng-if="availability" >
|
||||
<div class="panel-heading b-b small">
|
||||
<h3 translate>{{ 'admin_calendar.actions' }}</h3>
|
||||
<h3 translate>{{ 'app.admin.calendar.actions' }}</h3>
|
||||
</div>
|
||||
<div class="widget-content no-bg auto wrapper" ng-hide="availability.available_type == 'event'">
|
||||
<button class="btn btn-default" ng-click="toggleLockReservations()">
|
||||
<span ng-hide="availability.lock">
|
||||
<i class="fa fa-stop"></i>
|
||||
<span class="m-l-xs" translate>{{ 'admin_calendar.block_reservations' }}</span>
|
||||
<span class="m-l-xs" translate>{{ 'app.admin.calendar.block_reservations' }}</span>
|
||||
</span>
|
||||
<span ng-show="availability.lock">
|
||||
<i class="fa fa-play"></i>
|
||||
<span class="m-l-xs" translate>{{ 'admin_calendar.allow_reservations' }}</span>
|
||||
<span class="m-l-xs" translate>{{ 'app.admin.calendar.allow_reservations' }}</span>
|
||||
</span>
|
||||
</button>
|
||||
<button class="btn btn-default m-t" ng-click="removeSlot()">
|
||||
<span>
|
||||
<i class="fa fa-trash"></i>
|
||||
<span class="m-l-xs" translate>{{ 'admin_calendar.delete_slot' }}</span>
|
||||
<span class="m-l-xs" translate>{{ 'app.admin.calendar.delete_slot' }}</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
@ -110,13 +110,13 @@
|
||||
<a class="btn btn-default pointer" ui-sref="app.admin.events_edit({id: availability.event_id})">
|
||||
<span>
|
||||
<i class="fa fa-edit"></i>
|
||||
<span class="m-l-xs" translate>{{ 'admin_calendar.edit_event' }}</span>
|
||||
<span class="m-l-xs" translate>{{ 'app.admin.calendar.edit_event' }}</span>
|
||||
</span>
|
||||
</a>
|
||||
<a class="btn btn-default m-t pointer" ui-sref="app.admin.event_reservations({id: availability.event_id})">
|
||||
<span>
|
||||
<i class="fa fa-bookmark"></i>
|
||||
<span class="m-l-xs" translate>{{ 'admin_calendar.view_reservations' }}</span>
|
||||
<span class="m-l-xs" translate>{{ 'app.admin.calendar.view_reservations' }}</span>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
|
@ -1,22 +1,22 @@
|
||||
<div class="modal-header">
|
||||
<img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/>
|
||||
<h1 translate>{{ 'admin_calendar.confirmation_required' }}</h1>
|
||||
<h1 translate>{{ 'app.admin.calendar.confirmation_required' }}</h1>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p ng-hide="isRecurrent" translate>{{ 'admin_calendar.do_you_really_want_to_delete_this_slot' }}</p>
|
||||
<p ng-show="isRecurrent" translate>{{ 'admin_calendar.delete_recurring_slot' }}</p>
|
||||
<p ng-hide="isRecurrent" translate>{{ 'app.admin.calendar.do_you_really_want_to_delete_this_slot' }}</p>
|
||||
<p ng-show="isRecurrent" translate>{{ 'app.admin.calendar.delete_recurring_slot' }}</p>
|
||||
<div ng-show="isRecurrent" class="form-group">
|
||||
<label class="checkbox">
|
||||
<input type="radio" name="delete_mode" ng-model="deleteMode" value="single" required/>
|
||||
<span translate>{{ 'admin_calendar.delete_this_slot' }}</span>
|
||||
<span translate>{{ 'app.admin.calendar.delete_this_slot' }}</span>
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input type="radio" name="delete_mode" ng-model="deleteMode" value="next" required/>
|
||||
<span translate>{{ 'admin_calendar.delete_this_and_next' }}</span>
|
||||
<span translate>{{ 'app.admin.calendar.delete_this_and_next' }}</span>
|
||||
</label>
|
||||
<label class="checkbox">
|
||||
<input type="radio" name="delete_mode" ng-model="deleteMode" value="all" required/>
|
||||
<span translate>{{ 'admin_calendar.delete_all' }}</span>
|
||||
<span translate>{{ 'app.admin.calendar.delete_all' }}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,27 +1,27 @@
|
||||
<div class="modal-header">
|
||||
<h3 class="text-center red">
|
||||
{{ 'admin_calendar.DATE_slot' | translate:{DATE:(start | amDateFormat: 'LL')} }} {{start | amDateFormat:'LT'}} - {{end | amDateFormat:'LT'}}
|
||||
{{ 'app.admin.calendar.DATE_slot' | translate:{DATE:(start | amDateFormat: 'LL')} }} {{start | amDateFormat:'LT'}} - {{end | amDateFormat:'LT'}}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="modal-body" ng-show="step === 1">
|
||||
<label class="m-t-sm" translate>{{ 'admin_calendar.what_kind_of_slot_do_you_want_to_create' }}</label>
|
||||
<label class="m-t-sm" translate>{{ 'app.admin.calendar.what_kind_of_slot_do_you_want_to_create' }}</label>
|
||||
<div class="form-group">
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" id="training" name="available_type" value="training" ng-model="availability.available_type">
|
||||
<span translate>{{ 'admin_calendar.training' }}</span>
|
||||
<span translate>{{ 'app.admin.calendar.training' }}</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" id="machine" name="available_type" value="machines" ng-model="availability.available_type">
|
||||
<span translate>{{ 'admin_calendar.machine' }}</span>
|
||||
<span translate>{{ 'app.admin.calendar.machine' }}</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio" ng-hide="fablabWithoutSpaces">
|
||||
<label>
|
||||
<input type="radio" id="space" name="available_type" value="space" ng-model="availability.available_type" ng-disabled="spaces.length === 0">
|
||||
<span translate>{{ 'admin_calendar.space' }}</span>
|
||||
<span translate>{{ 'app.admin.calendar.space' }}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
@ -29,7 +29,7 @@
|
||||
<div class="modal-body" ng-show="step === 2">
|
||||
|
||||
<div ng-show="availability.available_type == 'machines'">
|
||||
<p class="text-center font-sbold m-t-sm">{{ 'admin_calendar.select_some_machines' | translate }}</p>
|
||||
<p class="text-center font-sbold m-t-sm">{{ 'app.admin.calendar.select_some_machines' | translate }}</p>
|
||||
|
||||
<div class="form-group m-l-xl">
|
||||
<label class="checkbox" ng-repeat="machine in machines">
|
||||
@ -43,7 +43,7 @@
|
||||
</select>
|
||||
<div class="row m-t">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-6 control-label" for="nb_places_training" translate>{{ 'admin_calendar.number_of_tickets' }}</label>
|
||||
<label class="col-sm-6 control-label" for="nb_places_training" translate>{{ 'app.admin.calendar.number_of_tickets' }}</label>
|
||||
<div class="col-sm-6">
|
||||
<input type="number" id="nb_places_training" class="form-control" ng-model="availability.nb_total_places">
|
||||
</div>
|
||||
@ -56,7 +56,7 @@
|
||||
</select>
|
||||
<div class="row m-t">
|
||||
<div class="form-group">
|
||||
<label class="col-sm-6 control-label" for="nb_places_space" translate>{{ 'admin_calendar.number_of_tickets' }}</label>
|
||||
<label class="col-sm-6 control-label" for="nb_places_space" translate>{{ 'app.admin.calendar.number_of_tickets' }}</label>
|
||||
<div class="col-sm-6">
|
||||
<input type="number" id="nb_places_space" class="form-control" ng-model="availability.nb_total_places">
|
||||
</div>
|
||||
@ -66,19 +66,19 @@
|
||||
</div>
|
||||
<div class="modal-body" ng-show="step === 3">
|
||||
<div id="timeAdjust" class="m-t-sm">
|
||||
<p class="text-center font-sbold" translate>{{ 'admin_calendar.adjust_the_opening_hours' }}</p>
|
||||
<p class="text-center font-sbold" translate>{{ 'app.admin.calendar.adjust_the_opening_hours' }}</p>
|
||||
<div class="row">
|
||||
<div class="col-md-3 col-md-offset-2">
|
||||
<uib-timepicker ng-model="start" hour-step="timepickers.start.hstep" readonly-input="true" minute-step="timepickers.start.mstep" show-meridian="false"></uib-timepicker>
|
||||
</div>
|
||||
<span class="col-md-1 m-t-xl m-l" translate>{{ 'admin_calendar.to_time' }}</span>
|
||||
<span class="col-md-1 m-t-xl m-l" translate>{{ 'app.admin.calendar.to_time' }}</span>
|
||||
<fieldset ng-disabled="endDateReadOnly" class="col-md-5">
|
||||
<uib-timepicker ng-model="end" hour-step="timepickers.end.hstep" readonly-input="true" minute-step="timepickers.end.mstep" show-meridian="false"></uib-timepicker>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tagAssociate" class="m-t-lg">
|
||||
<p class="text-center font-sbold" translate>{{ 'admin_calendar.restrict_this_slot_with_labels_optional' }}</p>
|
||||
<p class="text-center font-sbold" translate>{{ 'app.admin.calendar.restrict_this_slot_with_labels_optional' }}</p>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<ui-select multiple ng-model="availability.tag_ids" class="form-control">
|
||||
@ -95,17 +95,17 @@
|
||||
</div>
|
||||
<div class="modal-body m-h" ng-show="step === 4">
|
||||
<div class="m-t-sm">
|
||||
<p class="text-center font-sbold" translate>{{ 'admin_calendar.recurrence' }}</p>
|
||||
<p class="text-center font-sbold" translate>{{ 'app.admin.calendar.recurrence' }}</p>
|
||||
<div class="row">
|
||||
<div class="form-group">
|
||||
<label for="is_recurrent" translate>{{ 'admin_calendar.enabled' }}</label>
|
||||
<label for="is_recurrent" translate>{{ 'app.admin.calendar.enabled' }}</label>
|
||||
<input bs-switch
|
||||
ng-model="availability.is_recurrent"
|
||||
id="is_recurrent"
|
||||
type="checkbox"
|
||||
class="form-control"
|
||||
switch-on-text="{{ 'yes' | translate }}"
|
||||
switch-off-text="{{ 'no' | translate }}"
|
||||
switch-on-text="{{ 'app.shared.buttons.yes' | translate }}"
|
||||
switch-off-text="{{ 'app.shared.buttons.no' | translate }}"
|
||||
switch-animate="true"/>
|
||||
<input type="hidden" name="availability[is_recurrent]" value="{{availability.is_recurrent}}"/>
|
||||
</div>
|
||||
@ -113,21 +113,21 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group">
|
||||
<label for="period">{{ 'admin_calendar.period' | translate }}</label>
|
||||
<label for="period">{{ 'app.admin.calendar.period' | translate }}</label>
|
||||
<select id="period"
|
||||
name="period"
|
||||
class="form-control"
|
||||
ng-model="availability.period"
|
||||
ng-required="availability.is_recurrent"
|
||||
ng-disabled="!availability.is_recurrent">
|
||||
<option value="week" ng-selected="availability.period == 'week'" translate>{{ 'admin_calendar.week' }}</option>
|
||||
<option value="month" ng-selected="availability.period == 'month'" translate>{{ 'admin_calendar.month' }}</option>
|
||||
<option value="week" ng-selected="availability.period == 'week'" translate>{{ 'app.admin.calendar.week' }}</option>
|
||||
<option value="month" ng-selected="availability.period == 'month'" translate>{{ 'app.admin.calendar.month' }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group">
|
||||
<label for="nb_periods">{{ 'admin_calendar.number_of_periods' | translate }}</label>
|
||||
<label for="nb_periods">{{ 'app.admin.calendar.number_of_periods' | translate }}</label>
|
||||
<input id="nb_periods"
|
||||
name="nb_periods"
|
||||
class="form-control"
|
||||
@ -139,7 +139,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group">
|
||||
<label for="end_date">{{ 'admin_calendar.end_date' | translate }}</label>
|
||||
<label for="end_date">{{ 'app.admin.calendar.end_date' | translate }}</label>
|
||||
<input id="end_date"
|
||||
name="end_date"
|
||||
class="form-control"
|
||||
@ -152,30 +152,30 @@
|
||||
</div>
|
||||
<div class="modal-body m-h" ng-show="step === 5">
|
||||
<div class="m-t-sm">
|
||||
<p class="text-center font-sbold" translate>{{ 'admin_calendar.summary' }}</p>
|
||||
<p class="text-center font-sbold" translate>{{ 'app.admin.calendar.summary' }}</p>
|
||||
<div class="row">
|
||||
<span>{{ 'admin_calendar.about_to_create' | translate:{NUMBER:occurrences.length,TYPE:availability.available_type}}}</span>
|
||||
<span>{{ 'app.admin.calendar.about_to_create' | translate:{NUMBER:occurrences.length,TYPE:availability.available_type} }}</span>
|
||||
<ul>
|
||||
<li ng-repeat="slot in occurrences">{{slot.start_at | amDateFormat:'L LT'}} - {{slot.end_at | amDateFormat:'LT'}}</li>
|
||||
</ul>
|
||||
<div>
|
||||
<span class="underline" translate>{{ 'admin_calendar.reservable' }}</span>
|
||||
<span class="underline" translate>{{ 'app.admin.calendar.reservable' }}</span>
|
||||
<span ng-bind-html="reservableName"></span>
|
||||
</div>
|
||||
<div class="m-t">
|
||||
<span class="underline" translate>{{ 'admin_calendar.labels' }}</span>
|
||||
<span class="underline" translate>{{ 'app.admin.calendar.labels' }}</span>
|
||||
<span ng-bind-html="tagsName"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer" ng-show="step < 5">
|
||||
<button class="btn btn-info" ng-click="previous()" ng-disabled="step === 1" translate>{{ 'admin_calendar.previous' }}</button>
|
||||
<button class="btn btn-info" ng-click="next()" translate>{{ 'admin_calendar.next' }}</button>
|
||||
<button class="btn btn-default" ng-click="cancel()" translate>{{ 'cancel' }}</button>
|
||||
<button class="btn btn-info" ng-click="previous()" ng-disabled="step === 1" translate>{{ 'app.admin.calendar.previous' }}</button>
|
||||
<button class="btn btn-info" ng-click="next()" translate>{{ 'app.admin.calendar.next' }}</button>
|
||||
<button class="btn btn-default" ng-click="cancel()" translate>{{ 'app.shared.buttons.cancel' }}</button>
|
||||
</div>
|
||||
<div class="modal-footer" ng-show="step === 5">
|
||||
<button class="btn btn-info" ng-click="previous()" translate>{{ 'admin_calendar.previous' }}</button>
|
||||
<button class="btn btn-info" ng-click="previous()" translate>{{ 'app.admin.calendar.previous' }}</button>
|
||||
<button class="btn btn-warning" ng-click="ok()" translate>{{ 'confirm' }}</button>
|
||||
<button class="btn btn-default" ng-click="cancel()" translate>{{ 'cancel' }}</button>
|
||||
<button class="btn btn-default" ng-click="cancel()" translate>{{ 'app.shared.buttons.cancel' }}</button>
|
||||
</div>
|
||||
|
@ -7,7 +7,7 @@
|
||||
</div>
|
||||
<div class="col-md-8 b-l b-r-md">
|
||||
<section class="heading-title">
|
||||
<h1 translate>{{ 'icalendar.icalendar_import' }}</h1>
|
||||
<h1 translate>{{ 'app.admin.icalendar.icalendar_import' }}</h1>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
@ -24,15 +24,15 @@
|
||||
|
||||
<div class="col-sm-12 col-md-12 col-lg-9">
|
||||
<div class="alert alert-info m-lg" translate>
|
||||
{{ 'icalendar.intro' }}
|
||||
{{ 'app.admin.icalendar.intro' }}
|
||||
</div>
|
||||
<div class="wrapper-lg">
|
||||
<table class="table" ng-show="calendars.length > 0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 35%;" translate>{{ 'icalendar.name' }}</th>
|
||||
<th style="width: 35%;" translate>{{ 'icalendar.url' }}</th>
|
||||
<th translate>{{ 'icalendar.display' }}</th>
|
||||
<th style="width: 35%;" translate>{{ 'app.admin.icalendar.name' }}</th>
|
||||
<th style="width: 35%;" translate>{{ 'app.admin.icalendar.url' }}</th>
|
||||
<th translate>{{ 'app.admin.icalendar.display' }}</th>
|
||||
<th style="width: 20%;"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -40,7 +40,7 @@
|
||||
<tr ng-repeat="calendar in calendars">
|
||||
<td class="calendar-name">{{calendar.name}}</td>
|
||||
<td class="calendar-url"><a href="{{calendar.url}}" target="_blank">{{calendar.url}}</a></td>
|
||||
<td class="calendar-legend-block text-left"><span class="calendar-legend" ng-style="calendarStyle(calendar)" translate> {{ calendar.text_hidden ? '' : 'icalendar.example' }}</span>
|
||||
<td class="calendar-legend-block text-left"><span class="calendar-legend" ng-style="calendarStyle(calendar)" translate> {{ calendar.text_hidden ? '' : 'app.admin.icalendar.example' }}</span>
|
||||
<td class="calendar-actions">
|
||||
<button class="btn btn-info" ng-click="sync(calendar)"><i class="fa fa-refresh"></i></button>
|
||||
<button class="btn btn-danger" ng-click="delete(calendar)"><i class="fa fa-trash"></i></button>
|
||||
@ -49,45 +49,45 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<form class="calendar-form" name="newImportForm">
|
||||
<h4 translate>{{ 'icalendar.new_import' }}</h4>
|
||||
<h4 translate>{{ 'app.admin.icalendar.new_import' }}</h4>
|
||||
<div class="input-group">
|
||||
<div class="input-group-addon">
|
||||
<i class="fa fa-font"></i>
|
||||
</div>
|
||||
<input type="text" ng-model="newCalendar.name" class="form-control" placeholder="{{ 'icalendar.name' | translate }}" required>
|
||||
<input type="text" ng-model="newCalendar.name" class="form-control" placeholder="{{ 'app.admin.icalendar.name' | translate }}" required>
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<div class="input-group-addon">
|
||||
<i class="fa fa-link"></i>
|
||||
</div>
|
||||
<input type="url" ng-model="newCalendar.url" class="form-control" placeholder="{{ 'icalendar.url' | translate }}" required>
|
||||
<input type="url" ng-model="newCalendar.url" class="form-control" placeholder="{{ 'app.admin.icalendar.url' | translate }}" required>
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<div class="input-group-addon">
|
||||
<i class="fa fa-paint-brush"></i>
|
||||
</div>
|
||||
<input type="text" minicolors ng-model="newCalendar.color" class="form-control" placeholder="{{ 'icalendar.color' | translate}}" required/>
|
||||
<input type="text" minicolors ng-model="newCalendar.color" class="form-control" placeholder="{{ 'app.admin.icalendar.color' | translate}}" required/>
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<div class="input-group-addon">
|
||||
<i class="fa fa-paint-brush"></i>
|
||||
</div>
|
||||
<input type="text" minicolors ng-model="newCalendar.text_color" class="form-control" placeholder="{{ 'icalendar.text_color' | translate}}" ng-required="!newCalendar.text_hidden"/>
|
||||
<input type="text" minicolors ng-model="newCalendar.text_color" class="form-control" placeholder="{{ 'app.admin.icalendar.text_color' | translate}}" ng-required="!newCalendar.text_hidden"/>
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<label for="hideText" class="control-label m-r" translate>{{ 'icalendar.hide_text' }}</label>
|
||||
<label for="hideText" class="control-label m-r" translate>{{ 'app.admin.icalendar.hide_text' }}</label>
|
||||
<input bs-switch
|
||||
ng-model="newCalendar.text_hidden"
|
||||
id="hideText"
|
||||
type="checkbox"
|
||||
class="form-control"
|
||||
switch-on-text="{{ 'icalendar.hidden' | translate }}"
|
||||
switch-off-text="{{ 'icalendar.shown' | translate }}"
|
||||
switch-on-text="{{ 'app.admin.icalendar.hidden' | translate }}"
|
||||
switch-off-text="{{ 'app.admin.icalendar.shown' | translate }}"
|
||||
switch-animate="true"/>
|
||||
</div>
|
||||
<div class="m-t text-right">
|
||||
<button role="button" class="btn btn-warning" ng-click="save()" ng-disabled="newImportForm.$invalid" translate>
|
||||
{{ 'confirm' }}
|
||||
{{ 'app.shared.buttons.confirm' }}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
@ -7,7 +7,7 @@
|
||||
</div>
|
||||
<div class="col-xs-8 col-sm-8 col-md-8 b-l">
|
||||
<section class="heading-title">
|
||||
<h1 translate>{{ 'users_management' }}</h1>
|
||||
<h1 translate>{{ 'app.admin.members.users_management' }}</h1>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-xs-1 col-xs-offset-1 col-md-offset-2 b-l">
|
||||
@ -26,23 +26,23 @@
|
||||
<div class="col-md-12">
|
||||
<uib-tabset justified="true">
|
||||
|
||||
<uib-tab heading="{{ 'members' | translate }}">
|
||||
<ng-include src="'<%= asset_path 'admin/members/members.html' %>'"></ng-include>
|
||||
<uib-tab heading="{{ 'app.admin.members.members' | translate }}">
|
||||
<ng-include src="'<%= asset_path "admin/members/members.html" %>'"></ng-include>
|
||||
</uib-tab>
|
||||
|
||||
<uib-tab heading="{{ 'administrators' | translate }}">
|
||||
<ng-include src="'<%= asset_path 'admin/members/administrators.html' %>'"></ng-include>
|
||||
<uib-tab heading="{{ 'app.admin.members.administrators' | translate }}">
|
||||
<ng-include src="'<%= asset_path "admin/members/administrators.html" %>'"></ng-include>
|
||||
</uib-tab>
|
||||
|
||||
<uib-tab heading="{{ 'groups' | translate }}">
|
||||
<uib-tab heading="{{ 'app.admin.members.groups' | translate }}">
|
||||
<div ui-view="groups"></div>
|
||||
</uib-tab>
|
||||
|
||||
<uib-tab heading="{{ 'tags' | translate }}">
|
||||
<uib-tab heading="{{ 'app.admin.members.tags' | translate }}">
|
||||
<div ui-view="tags"></div>
|
||||
</uib-tab>
|
||||
|
||||
<uib-tab heading="{{ 'authentication' | translate }}">
|
||||
<uib-tab heading="{{ 'app.admin.members.authentication' | translate }}">
|
||||
<div ui-view="authentification"></div>
|
||||
</uib-tab>
|
||||
</uib-tabset>
|
||||
|
@ -2,21 +2,21 @@
|
||||
<div class="form-group">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="fa fa-filter"></i></span>
|
||||
<input type="text" ng-model="member.searchText" class="form-control" placeholder="{{ 'search_for_an_user' | translate }}" ng-change="updateTextSearch()">
|
||||
<input type="text" ng-model="member.searchText" class="form-control" placeholder="{{ 'app.admin.members.search_for_an_user' | translate }}" ng-change="updateTextSearch()">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<button type="button" class="btn btn-warning m-t m-b" ui-sref="app.admin.members_new" translate>{{ 'add_a_new_member' }}</button>
|
||||
<button type="button" class="btn btn-warning m-t m-b" ui-sref="app.admin.members_new" translate>{{ 'app.admin.members.add_a_new_member' }}</button>
|
||||
<div class="pull-right">
|
||||
<a class="btn btn-default" ng-href="api/members/export_members.xlsx" target="export-frame" ng-click="alertExport('members')">
|
||||
<i class="fa fa-file-excel-o"></i> {{ 'members' | translate }}
|
||||
<i class="fa fa-file-excel-o"></i> {{ 'app.admin.members.members' | translate }}
|
||||
</a>
|
||||
<a class="btn btn-default" ng-href="api/members/export_subscriptions.xlsx" target="export-frame" ng-if="!fablabWithoutPlans" ng-click="alertExport('subscriptions')">
|
||||
<i class="fa fa-file-excel-o"></i> {{ 'subscriptions' | translate }}
|
||||
<i class="fa fa-file-excel-o"></i> {{ 'app.admin.members.subscriptions' | translate }}
|
||||
</a>
|
||||
<a class="btn btn-default" ng-href="api/members/export_reservations.xlsx" target="export-frame" ng-click="alertExport('reservations')">
|
||||
<i class="fa fa-file-excel-o"></i> {{ 'reservations' | translate }}
|
||||
<i class="fa fa-file-excel-o"></i> {{ 'app.admin.members.reservations' | translate }}
|
||||
</a>
|
||||
<iframe name="export-frame" height="0" width="0" class="none"></iframe>
|
||||
</div>
|
||||
@ -25,12 +25,12 @@
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width:15%"><a href="" ng-click="setOrderMember('last_name')">{{ 'surname' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': member.order=='last_name', 'fa fa-sort-alpha-desc': member.order=='-last_name', 'fa fa-arrows-v': member.order }"></i></a></th>
|
||||
<th style="width:15%"><a href="" ng-click="setOrderMember('first_name')">{{ 'first_name' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': member.order=='first_name', 'fa fa-sort-alpha-desc': member.order=='-first_name', 'fa fa-arrows-v': member.order }"></i></a></th>
|
||||
<th style="width:15%" class="hidden-xs"><a href="" ng-click="setOrderMember('email')">{{ 'email' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': member.order=='email', 'fa fa-sort-alpha-desc': member.order=='-email', 'fa fa-arrows-v': member.order }"></i></a></th>
|
||||
<th style="width:10%" class="hidden-xs hidden-sm hidden-md"><a href="" ng-click="setOrderMember('phone')">{{ 'phone' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-numeric-asc': member.order=='phone', 'fa fa-sort-numeric-desc': member.order=='-phone', 'fa fa-arrows-v': member.order }"></i></a></th>
|
||||
<th style="width:20%" class="hidden-xs hidden-sm"><a href="" ng-click="setOrderMember('group')">{{ 'user_type' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': member.order=='group', 'fa fa-sort-alpha-desc': member.order=='-group', 'fa fa-arrows-v': member.order }"></i></a></th>
|
||||
<th style="width:15%" class="hidden-xs hidden-sm hidden-md"><a href="" ng-click="setOrderMember('plan')">{{ 'subscription' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': member.order=='plan', 'fa fa-sort-alpha-desc': member.order=='-plan', 'fa fa-arrows-v': member.order }"></i></a></th>
|
||||
<th style="width:15%"><a href="" ng-click="setOrderMember('last_name')">{{ 'app.admin.members.surname' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': member.order=='last_name', 'fa fa-sort-alpha-desc': member.order=='-last_name', 'fa fa-arrows-v': member.order }"></i></a></th>
|
||||
<th style="width:15%"><a href="" ng-click="setOrderMember('first_name')">{{ 'app.admin.members.first_name' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': member.order=='first_name', 'fa fa-sort-alpha-desc': member.order=='-first_name', 'fa fa-arrows-v': member.order }"></i></a></th>
|
||||
<th style="width:15%" class="hidden-xs"><a href="" ng-click="setOrderMember('email')">{{ 'app.admin.members.email' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': member.order=='email', 'fa fa-sort-alpha-desc': member.order=='-email', 'fa fa-arrows-v': member.order }"></i></a></th>
|
||||
<th style="width:10%" class="hidden-xs hidden-sm hidden-md"><a href="" ng-click="setOrderMember('phone')">{{ 'app.admin.members.phone' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-numeric-asc': member.order=='phone', 'fa fa-sort-numeric-desc': member.order=='-phone', 'fa fa-arrows-v': member.order }"></i></a></th>
|
||||
<th style="width:20%" class="hidden-xs hidden-sm"><a href="" ng-click="setOrderMember('group')">{{ 'app.admin.members.user_type' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': member.order=='group', 'fa fa-sort-alpha-desc': member.order=='-group', 'fa fa-arrows-v': member.order }"></i></a></th>
|
||||
<th style="width:15%" class="hidden-xs hidden-sm hidden-md"><a href="" ng-click="setOrderMember('plan')">{{ 'app.admin.members.subscription' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': member.order=='plan', 'fa fa-sort-alpha-desc': member.order=='-plan', 'fa fa-arrows-v': member.order }"></i></a></th>
|
||||
<th style="width:10%"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -50,13 +50,13 @@
|
||||
<button class="btn btn-danger" ng-click="deleteMember(m.id)">
|
||||
<i class="fa fa-trash"></i>
|
||||
</button>
|
||||
<span class="label label-danger text-white" ng-show="m.need_completion" translate>{{ 'incomplete_profile' }}</span>
|
||||
<span class="label label-danger text-white" ng-show="m.need_completion" translate>{{ 'app.admin.members.incomplete_profile' }}</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="text-center">
|
||||
<button class="btn btn-warning" ng-click="showNextMembers()" ng-hide="member.noMore"><i class="fa fa-search-plus" aria-hidden="true"></i> {{ 'display_more_users' | translate }}</button>
|
||||
<button class="btn btn-warning" ng-click="showNextMembers()" ng-hide="member.noMore"><i class="fa fa-search-plus" aria-hidden="true"></i> {{ 'app.admin.members.display_more_users' | translate }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -15,21 +15,21 @@
|
||||
<uib-alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</uib-alert>
|
||||
|
||||
<div class="form-group m-b-lg" ng-class="{'has-error': trainingForm['training[name]'].$dirty && trainingForm['training[name]'].$invalid}">
|
||||
<label for="name" class="col-sm-2 control-label">{{ 'trainings_form.name' | translate }} *</label>
|
||||
<label for="name" class="col-sm-2 control-label">{{ 'app.shared.trainings.name' | translate }} *</label>
|
||||
<div class="col-sm-4">
|
||||
<input name="training[name]"
|
||||
ng-model="training.name"
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="training_name"
|
||||
placeholder="{{'trainings_form.name' | translate}}"
|
||||
placeholder="{{'app.shared.trainings.name' | translate}}"
|
||||
required/>
|
||||
<span class="help-block" ng-show="trainingForm['training[name]'].$dirty && trainingForm['training[name]'].$error.required" translate>{{ 'trainings_form.name_is_required' }}</span>
|
||||
<span class="help-block" ng-show="trainingForm['training[name]'].$dirty && trainingForm['training[name]'].$error.required" translate>{{ 'app.shared.trainings.name_is_required' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group m-b-lg">
|
||||
<label for="training_image" class="col-sm-2 control-label">{{ 'trainings_form.illustration' | translate }} *</label>
|
||||
<label for="training_image" class="col-sm-2 control-label">{{ 'app.shared.trainings.illustration' | translate }} *</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="fileinput" data-provides="fileinput" ng-class="fileinputClass(training.training_image)">
|
||||
<div class="fileinput-new thumbnail" style="width: 334px; height: 250px;">
|
||||
@ -40,8 +40,8 @@
|
||||
</div>
|
||||
<div>
|
||||
<span class="btn btn-default btn-file">
|
||||
<span class="fileinput-new">{{ 'trainings_form.add_an_illustration' | translate }} <i class="fa fa-upload fa-fw"></i></span>
|
||||
<span class="fileinput-exists" translate>{{ 'change' }}</span>
|
||||
<span class="fileinput-new">{{ 'app.shared.trainings.add_an_illustration' | translate }} <i class="fa fa-upload fa-fw"></i></span>
|
||||
<span class="fileinput-exists" translate>{{ 'app.shared.buttons.change' }}</span>
|
||||
<input type="file"
|
||||
ng-model="training.training_image"
|
||||
name="training[training_image_attributes][attachment]"
|
||||
@ -49,7 +49,7 @@
|
||||
required
|
||||
bs-jasny-fileinput>
|
||||
</span>
|
||||
<a class="btn btn-danger fileinput-exists" data-dismiss="fileinput" translate>{{ 'delete' }}</a>
|
||||
<a class="btn btn-danger fileinput-exists" data-dismiss="fileinput" translate>{{ 'app.shared.buttons.delete' }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -57,16 +57,16 @@
|
||||
|
||||
|
||||
<div class="form-group m-b-xl" ng-class="{'has-error': trainingForm['training[description]'].$dirty && trainingForm['training[description]'].$invalid}">
|
||||
<label for="training_description" class="col-sm-2 control-label">{{ 'trainings_form.description' | translate }} *</label>
|
||||
<label for="training_description" class="col-sm-2 control-label">{{ 'app.shared.trainings.description' | translate }} *</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="hidden" name="training[description]" ng-value="training.description" />
|
||||
<summernote ng-model="training.description" id="training_description" placeholder="" config="summernoteOpts" name="training[description]" required></summernote>
|
||||
<span class="help-block" ng-show="trainingForm['training[description]'].$dirty && trainingForm['training[description]'].$error.required" translate>{{ 'trainings_form.description_is_required' }}</span>
|
||||
<span class="help-block" ng-show="trainingForm['training[description]'].$dirty && trainingForm['training[description]'].$error.required" translate>{{ 'app.shared.trainings.description_is_required' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group m-b-lg" ng-class="{'has-error': trainingForm['training[machine_ids]'].$dirty && trainingForm['training[machine_ids]'].$invalid}">
|
||||
<label for="training_machines" class="col-sm-2 control-label">{{ 'trainings_form.associated_machines' | translate }}</label>
|
||||
<label for="training_machines" class="col-sm-2 control-label">{{ 'app.shared.trainings.associated_machines' | translate }}</label>
|
||||
<div class="col-sm-4">
|
||||
<ui-select multiple ng-model="training.machine_ids" class="form-control" id="training_machines">
|
||||
<ui-select-match>
|
||||
@ -84,7 +84,7 @@
|
||||
</div>
|
||||
|
||||
<div class="form-group m-b-lg" ng-class="{'has-error': trainingForm['training[nb_total_places]'].$dirty && trainingForm['training[nb_total_places]'].$invalid}">
|
||||
<label for="training_nb_total_places" class="col-sm-2 control-label">{{ 'trainings_form.number_of_tickets' | translate }}</label>
|
||||
<label for="training_nb_total_places" class="col-sm-2 control-label">{{ 'app.shared.trainings.number_of_tickets' | translate }}</label>
|
||||
<div class="col-sm-4">
|
||||
<input ng-model="training.nb_total_places"
|
||||
type="number"
|
||||
@ -98,7 +98,7 @@
|
||||
|
||||
<div class="form-group">
|
||||
<label for="training[public_page]" class="control-label col-sm-2" translate>
|
||||
{{ 'trainings_form.public_page' }}
|
||||
{{ 'app.shared.trainings.public_page' }}
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<input bs-switch
|
||||
@ -106,8 +106,8 @@
|
||||
name="training[public_page]"
|
||||
type="checkbox"
|
||||
class="form-control"
|
||||
switch-on-text="{{ 'yes' | translate }}"
|
||||
switch-off-text="{{ 'no' | translate }}"
|
||||
switch-on-text="{{ 'app.shared.buttons.yes' | translate }}"
|
||||
switch-off-text="{{ 'app.shared.buttons.no' | translate }}"
|
||||
switch-active="{{!training.disabled}}"
|
||||
switch-animate="true"/>
|
||||
<input type="hidden" name="training[public_page]" value="{{training.public_page}}">
|
||||
@ -116,7 +116,7 @@
|
||||
|
||||
<div class="form-group">
|
||||
<label for="training[disabled]" class="control-label col-sm-2" translate>
|
||||
{{ 'trainings_form.disable_training' }}
|
||||
{{ 'app.shared.trainings.disable_training' }}
|
||||
</label>
|
||||
<div class="col-sm-10">
|
||||
<input bs-switch
|
||||
@ -124,8 +124,8 @@
|
||||
name="training[disabled]"
|
||||
type="checkbox"
|
||||
class="form-control"
|
||||
switch-on-text="{{ 'yes' | translate }}"
|
||||
switch-off-text="{{ 'no' | translate }}"
|
||||
switch-on-text="{{ 'app.shared.buttons.yes' | translate }}"
|
||||
switch-off-text="{{ 'app.shared.buttons.no' | translate }}"
|
||||
ng-change="onDisableToggled()"
|
||||
switch-animate="true"/>
|
||||
<input type="hidden" name="training[disabled]" value="{{training.disabled}}">
|
||||
@ -136,7 +136,7 @@
|
||||
|
||||
<div class="panel-footer no-padder">
|
||||
<input type="submit"
|
||||
value="{{ 'trainings_form.validate_your_training' | translate }}"
|
||||
value="{{ 'app.shared.trainings.validate_your_training' | translate }}"
|
||||
class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c"
|
||||
ng-disabled="trainingForm.$invalid"/>
|
||||
</div>
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md">
|
||||
<section class="heading-actions wrapper">
|
||||
<div class="btn btn-lg btn-block btn-default rounded m-t-xs" ng-click="cancel()" translate>{{ 'cancel' }}</div>
|
||||
<div class="btn btn-lg btn-block btn-default rounded m-t-xs" ng-click="cancel()" translate>{{ 'app.shared.buttons.cancel' }}</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
@ -22,6 +22,6 @@
|
||||
|
||||
<div class="row no-gutter">
|
||||
<div class="col-sm-12 col-md-12 col-lg-9 b-r-lg nopadding">
|
||||
<ng-include src="'<%= asset_path 'admin/trainings/_form.html' %>'"></ng-include>
|
||||
<ng-include src="'<%= asset_path "admin/trainings/_form.html" %>'"></ng-include>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -7,7 +7,7 @@
|
||||
</div>
|
||||
<div class="col-xs-10 col-sm-10 col-md-8 b-l">
|
||||
<section class="heading-title">
|
||||
<h1 translate>{{ 'trainings_monitoring' }}</h1>
|
||||
<h1 translate>{{ 'app.admin.trainings.trainings_monitoring' }}</h1>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
@ -20,17 +20,17 @@
|
||||
|
||||
<div class="col-md-12">
|
||||
<uib-tabset justified="true">
|
||||
<uib-tab heading="{{ 'trainings' | translate }}">
|
||||
<uib-tab heading="{{ 'app.admin.trainings.trainings' | translate }}">
|
||||
<div class="m-t m-b">
|
||||
<button type="button" class="btn btn-warning" ui-sref="app.admin.trainings_new">
|
||||
<i class="fa fa-plus m-r"></i>
|
||||
<span translate>{{ 'add_a_new_training' }}</span>
|
||||
<span translate>{{ 'app.admin.trainings.add_a_new_training' }}</span>
|
||||
</button>
|
||||
<div class="form-group pull-right">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="fa fa-filter"></i></span>
|
||||
<select ng-model="trainingFiltering" class="form-control">
|
||||
<option ng-repeat="status in filterDisabled" value="{{status}}" translate>{{ 'status_'+status }}</option>
|
||||
<option ng-repeat="status in filterDisabled" value="{{status}}" translate>{{ 'app.admin.trainings.status_'+status }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
@ -38,74 +38,76 @@
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width:20%" translate>{{ 'name' }}</th>
|
||||
<th style="width:40%" translate>{{ 'associated_machines' }}</th>
|
||||
<th style="width:20%" translate>{{ 'number_of_tickets' }}</th>
|
||||
<th style="width:20%"></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th style="width:20%" translate>{{ 'app.admin.trainings.name' }}</th>
|
||||
<th style="width:40%" translate>{{ 'app.admin.trainings.associated_machines' }}</th>
|
||||
<th style="width:20%" translate>{{ 'app.admin.trainings.number_of_tickets' }}</th>
|
||||
<th style="width:20%"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="training in trainings | filterDisabled:trainingFiltering" ng-class="{'disabled-line' : training.disabled && trainingFiltering === 'all'}">
|
||||
<td>{{ training.name }}</td>
|
||||
<td>{{ showMachines(training) }}</td>
|
||||
<td>{{ training.nb_total_places }}</td>
|
||||
<td>
|
||||
<div class="buttons">
|
||||
<button class="btn btn-default" ui-sref="app.admin.trainings_edit({id:training.id})">
|
||||
<i class="fa fa-edit"></i> {{ 'edit' | translate }}
|
||||
</button>
|
||||
<button class="btn btn-danger" ng-click="removeTraining($index, training)">
|
||||
<i class="fa fa-trash-o"></i>
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr ng-repeat="training in trainings | filterDisabled:trainingFiltering" ng-class="{'disabled-line' : training.disabled && trainingFiltering === 'all'}">
|
||||
<td>{{ training.name }}</td>
|
||||
<td>{{ showMachines(training) }}</td>
|
||||
<td>{{ training.nb_total_places }}</td>
|
||||
<td>
|
||||
<div class="buttons">
|
||||
<button class="btn btn-default" ui-sref="app.admin.trainings_edit({id:training.id})">
|
||||
<i class="fa fa-edit"></i> {{ 'app.shared.buttons.edit' | translate }}
|
||||
</button>
|
||||
<button class="btn btn-danger" ng-click="removeTraining($index, training)">
|
||||
<i class="fa fa-trash-o"></i>
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</uib-tab>
|
||||
|
||||
<uib-tab heading="{{ 'trainings_monitoring' | translate }}">
|
||||
<uib-tab heading="{{ 'app.admin.trainings.trainings_monitoring' | translate }}">
|
||||
<div class="m-lg">
|
||||
<label for="training_select" translate>{{ 'select_a_training' }}</label>
|
||||
<label for="training_select" translate>{{ 'app.admin.trainings.select_a_training' }}</label>
|
||||
<select ng-options="training as training.name for training in trainings" ng-model="monitoring.training" class="form-control" ng-change="selectTrainingToMonitor()" name="training_select">
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width:35%" translate>{{ 'training' }}</th>
|
||||
<th style="width:65%" translate>{{ 'date' }}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th style="width:35%" translate>{{ 'app.admin.trainings.training' }}</th>
|
||||
<th style="width:65%" translate>{{ 'app.admin.trainings.date' }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="(training_name, years) in groupedAvailabilities">
|
||||
<td>{{training_name}}</td>
|
||||
<td>
|
||||
<uib-accordion close-others="true">
|
||||
<uib-accordion-group ng-repeat="months in years | toArray | orderBy:'$key':true" heading="{{ 'year_NUMBER' | translate:{NUMBER:months.$key} }}" is-open="accordions[training_name][months.$key].isOpenFirst" ng-if="!months.name" class="light-accordion">
|
||||
<tr ng-repeat="(training_name, years) in groupedAvailabilities">
|
||||
<td>{{training_name}}</td>
|
||||
<td>
|
||||
<uib-accordion close-others="true">
|
||||
<uib-accordion-group ng-repeat="months in years | toArray | orderBy:'$key':true" heading="{{ 'app.admin.trainings.year_NUMBER' | translate:{NUMBER:months.$key} }}" is-open="accordions[training_name][months.$key].isOpenFirst" ng-if="!months.name" class="light-accordion">
|
||||
|
||||
<uib-accordion close-others="true">
|
||||
<uib-accordion-group ng-repeat="days in months | toArray | orderBy:'$key':true" heading="{{ 'month_of_NAME' | translate:{NAME:formatMonth(days.$key)} }}" is-open="accordions[training_name][months.$key][days.$key].isOpenFirst" ng-if="days.$key" class="light-accordion">
|
||||
<uib-accordion close-others="true">
|
||||
<uib-accordion-group ng-repeat="days in months | toArray | orderBy:'$key':true" heading="{{ 'app.admin.trainings.month_of_NAME' | translate:{NAME:formatMonth(days.$key)} }}" is-open="accordions[training_name][months.$key][days.$key].isOpenFirst" ng-if="days.$key" class="light-accordion">
|
||||
|
||||
<uib-accordion close-others="true">
|
||||
<uib-accordion-group ng-repeat="(day, availabilities) in days" heading="{{formatDay(day, days.$key, months.$key)}}" is-open="accordions[training_name][months.$key][days.$key][day].isOpenFirst" class="light-accordion">
|
||||
<ul class="list-unstyled">
|
||||
<li ng-repeat="a in availabilities">
|
||||
<a ng-click="showReservations(years.training, a)" class="btn btn-default">{{ a.start_at | amDateFormat:'LLL' }} - {{ a.end_at | amDateFormat:'LT' }}</a> <span class="label label-success" translate translate-values="{NUMBER:a.reservation_users.length}"> {{ 'NUMBER_reservation' }}</span>
|
||||
</li>
|
||||
</ul>
|
||||
</uib-accordion-group>
|
||||
</uib-accordion>
|
||||
<uib-accordion close-others="true">
|
||||
<uib-accordion-group ng-repeat="(day, availabilities) in days" heading="{{formatDay(day, days.$key, months.$key)}}" is-open="accordions[training_name][months.$key][days.$key][day].isOpenFirst" class="light-accordion">
|
||||
<ul class="list-unstyled">
|
||||
<li ng-repeat="a in availabilities">
|
||||
<a ng-click="showReservations(years.training, a)" class="btn btn-default">{{ a.start_at | amDateFormat:'LLL'
|
||||
}} - {{ a.end_at | amDateFormat:'LT' }}</a>
|
||||
<span class="label label-success" translate translate-values="{NUMBER:a.reservation_users.length}"> {{ 'app.admin.trainings.NUMBER_reservation' }}</span>
|
||||
</li>
|
||||
</ul>
|
||||
</uib-accordion-group>
|
||||
</uib-accordion>
|
||||
|
||||
</uib-accordion-group>
|
||||
</uib-accordion>
|
||||
</uib-accordion-group>
|
||||
</uib-accordion>
|
||||
|
||||
</uib-accordion-group>
|
||||
</uib-accordion>
|
||||
</td>
|
||||
</tr>
|
||||
</uib-accordion-group>
|
||||
</uib-accordion>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</uib-tab>
|
||||
|
@ -1,19 +1,21 @@
|
||||
<div class="modal-header">
|
||||
<h1 translate>{{ 'training_validation' }}</h1>
|
||||
<h1 translate>{{ 'app.admin.trainings.training_validation' }}</h1>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>{{ 'training_of_the_' | translate }}<span class="font-sbold">{{ availability.start_at | amDateFormat:'LLL' }} - {{ availability.end_at | amDateFormat:'LT' }}</span> <br>
|
||||
{{ 'you_can_validate_the_training_of_the_following_members' | translate }}</p>
|
||||
<p>
|
||||
<span translate translate-values="{DATE:(availability.start_at | amDateFormat:'LLL'), TIME:(availability.end_at | amDateFormat:'LT')}">{{ 'app.admin.trainings.training_of_the_DATE_TIME_html' }}</span>
|
||||
<br>
|
||||
<span translate>{{ 'app.admin.trainings.you_can_validate_the_training_of_the_following_members' }}</span></p>
|
||||
<ul class="list-unstyled" ng-if="availability.reservation_users.length > 0">
|
||||
<li ng-repeat="user in availability.reservation_users">
|
||||
<label for="{{user.id}}" ng-show="user.id">{{user.full_name}}</label>
|
||||
<span class="text-gray text-italic" ng-hide="user.id" translate>{{ 'deleted_user' }}</span>
|
||||
<span class="text-gray text-italic" ng-hide="user.id" translate>{{ 'app.admin.trainings.deleted_user' }}</span>
|
||||
<input type="checkbox" ng-checked="user.is_valid" ng-disabled="user.is_valid || !user.id" ng-click="toggleSelection(user)" id="{{user.id}}" />
|
||||
</li>
|
||||
</ul>
|
||||
<p ng-if="availability.reservation_users.length == 0" translate>{{ 'no_reservation' }}</p>
|
||||
<p ng-if="availability.reservation_users.length == 0" translate>{{ 'app.admin.trainings.no_reservation' }}</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-warning" ng-click="ok()" ng-disabled="usersToValid.length == 0" translate>{{ 'validate_the_trainings' }}</button>
|
||||
<button class="btn btn-default" ng-click="cancel()" translate>{{ 'cancel' }}</button>
|
||||
<button class="btn btn-warning" ng-click="ok()" ng-disabled="usersToValid.length == 0" translate>{{ 'app.admin.trainings.validate_the_trainings' }}</button>
|
||||
<button class="btn btn-default" ng-click="cancel()" translate>{{ 'app.shared.buttons.cancel' }}</button>
|
||||
</div>
|
||||
|
@ -7,14 +7,14 @@
|
||||
</div>
|
||||
<div class="col-xs-10 col-sm-10 col-md-8 b-l b-r-md hide-b-r-lg">
|
||||
<section class="heading-title">
|
||||
<h1 translate>{{ 'calendar.calendar' }}</h1>
|
||||
<h1 translate>{{ 'app.public.calendar.calendar' }}</h1>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md hidden-lg">
|
||||
<div class="heading-actions wrapper">
|
||||
<button type="button" class="btn btn-default m-t m-b" ng-click="openFilterAside()">
|
||||
<span class="fa fa-filter"></span> {{ 'calendar.filter_calendar' | translate }}
|
||||
<span class="fa fa-filter"></span> {{ 'app.public.calendar.filter_calendar' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@ -38,7 +38,7 @@
|
||||
<div class="col-lg-3 hidden-md hidden-sm hidden-xs">
|
||||
<div class="widget panel b-a m m-t-lg">
|
||||
<div class="panel-heading b-b small">
|
||||
<h3 translate>{{ 'calendar.filter_calendar' }}</h3>
|
||||
<h3 translate>{{ 'app.public.calendar.filter_calendar' }}</h3>
|
||||
</div>
|
||||
<div class="widget-content no-bg auto wrapper calendar-filter">
|
||||
<ng-include src="'<%= asset_path "calendar/filter.html" %>'"></ng-include>
|
||||
@ -53,7 +53,7 @@
|
||||
<div class="widget">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" ng-click="close($event)"><span>×</span></button>
|
||||
<h1 class="modal-title" translate>{{ 'calendar.filter_calendar' }}</h1>
|
||||
<h1 class="modal-title" translate>{{ 'app.public.calendar.filter_calendar' }}</h1>
|
||||
</div>
|
||||
<div class="modal-body widget-content calendar-filter calendar-filter-aside">
|
||||
<ng-include src="'<%= asset_path "calendar/filter.html" %>'"></ng-include>
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
<section class="heading">
|
||||
<div class="row no-gutter">
|
||||
<ng-include src="'<%= asset_path 'dashboard/nav.html' %>'"></ng-include>
|
||||
<ng-include src="'<%= asset_path "dashboard/nav.html" %>'"></ng-include>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
@ -13,7 +13,7 @@
|
||||
<div class="col-md-6">
|
||||
<div class="widget panel b-a m m-t-lg">
|
||||
<div class="panel-heading b-b">
|
||||
<h4 class="text-u-c"><i class="fa fa-tag m-r-xs"></i> {{ 'your_next_events' | translate }}</h4>
|
||||
<h4 class="text-u-c"><i class="fa fa-tag m-r-xs"></i> {{ 'app.logged.dashboard.events.your_next_events' | translate }}</h4>
|
||||
</div>
|
||||
<div class="widget-content bg-light wrapper r-b">
|
||||
<ul class="list-unstyled" ng-if="user.events_reservations.length > 0">
|
||||
@ -24,25 +24,25 @@
|
||||
<br/>
|
||||
<span translate
|
||||
translate-values="{NUMBER: r.nb_reserve_places}">
|
||||
{{ 'NUMBER_normal_places_reserved' }}
|
||||
{{ 'app.logged.dashboard.events.NUMBER_normal_places_reserved' }}
|
||||
</span>
|
||||
<span ng-repeat="ticket in r.tickets">
|
||||
<br/>
|
||||
<span translate
|
||||
translate-values="{NUMBER: ticket.booked, NAME: ticket.price_category.name}">
|
||||
{{ 'NUMBER_of_NAME_places_reserved' }}
|
||||
{{ 'app.logged.dashboard.events.NUMBER_of_NAME_places_reserved' }}
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div ng-if="(user.events_reservations | eventsReservationsFilter:'future').length == 0" translate>{{ 'no_events_to_come' }}</div>
|
||||
<div ng-if="(user.events_reservations | eventsReservationsFilter:'future').length == 0" translate>{{ 'app.logged.dashboard.events.no_events_to_come' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="widget panel b-a m m-t-lg">
|
||||
<div class="panel-heading b-b">
|
||||
<h4 class="text-u-c"><i class="fa fa-tag m-r-xs"></i> {{ 'your_previous_events' | translate }}</h4>
|
||||
<h4 class="text-u-c"><i class="fa fa-tag m-r-xs"></i> {{ 'app.logged.dashboard.events.your_previous_events' | translate }}</h4>
|
||||
</div>
|
||||
<div class="widget-content bg-light auto wrapper r-b">
|
||||
<ul class="list-unstyled" ng-if="user.events_reservations.length > 0">
|
||||
@ -50,7 +50,7 @@
|
||||
<span class="font-sbold">{{r.reservable.title}}</span> - <span class="label label-info text-white wrapper-sm">{{ r.start_at | amDateFormat:'LLL' }} - {{ r.end_at | amDateFormat:'LT' }}</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div ng-if="(user.events_reservations | eventsReservationsFilter:'passed').length == 0" translate>{{ 'no_passed_events' }}</div>
|
||||
<div ng-if="(user.events_reservations | eventsReservationsFilter:'passed').length == 0" translate>{{ 'app.logged.dashboard.events.no_passed_events' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
<section class="heading">
|
||||
<div class="row no-gutter">
|
||||
<ng-include src="'<%= asset_path 'dashboard/nav.html' %>'"></ng-include>
|
||||
<ng-include src="'<%= asset_path "dashboard/nav.html" %>'"></ng-include>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
@ -15,9 +15,9 @@
|
||||
<table class="table" ng-if="user.invoices.length > 0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width:21%" translate>{{ 'reference_number' }}</th>
|
||||
<th style="width:21%" translate>{{ 'date' }}</th>
|
||||
<th style="width:21%" translate>{{ 'price' }}</th>
|
||||
<th style="width:21%" translate>{{ 'app.logged.dashboard.invoices.reference_number' }}</th>
|
||||
<th style="width:21%" translate>{{ 'app.logged.dashboard.invoices.date' }}</th>
|
||||
<th style="width:21%" translate>{{ 'app.logged.dashboard.invoices.price' }}</th>
|
||||
<th style="width:20%"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -30,17 +30,17 @@
|
||||
<td>
|
||||
<div class="buttons">
|
||||
<a class="btn btn-default" ng-href="api/invoices/{{invoice.id}}/download" target="_blank" ng-if="!invoice.is_avoir">
|
||||
<i class="fa fa-file-pdf-o"></i> {{ 'download_the_invoice' | translate }}
|
||||
<i class="fa fa-file-pdf-o"></i> {{ 'app.logged.dashboard.invoices.download_the_invoice' | translate }}
|
||||
</a>
|
||||
<a class="btn btn-default" ng-href="api/invoices/{{invoice.id}}/download" target="_blank" ng-if="invoice.is_avoir">
|
||||
<i class="fa fa-file-pdf-o"></i> {{ 'download_the_credit_note' | translate }}
|
||||
<i class="fa fa-file-pdf-o"></i> {{ 'app.logged.dashboard.invoices.download_the_credit_note' | translate }}
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p ng-if="user.invoices.length == 0" translate>{{ 'no_invoices_for_now' }}</p>
|
||||
<p ng-if="user.invoices.length == 0" translate>{{ 'app.logged.dashboard.invoices.no_invoices_for_now' }}</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
@ -8,15 +8,15 @@
|
||||
</div>
|
||||
<div class="col-xs-10 col-sm-10 col-md-10 b-l">
|
||||
<section class="heading-title m-l">
|
||||
<h4 class="m-l text-sm" translate>{{ 'dashboard' }}</h4>
|
||||
<h4 class="m-l text-sm" translate>{{ 'app.public.common.dashboard' }}</h4>
|
||||
<ul class="nav-page nav nav-pills text-u-c text-sm">
|
||||
<li ui-sref-active="active"><a class="text-black" href="#" ui-sref="app.logged.dashboard.profile" translate>{{ 'my_profile' }}</a></li>
|
||||
<li ui-sref-active="active"><a class="text-black" href="#" ui-sref="app.logged.dashboard.settings" translate>{{ 'my_settings' }}</a></li>
|
||||
<li ui-sref-active="active"><a class="text-black" href="#" ui-sref="app.logged.dashboard.projects" translate>{{ 'my_projects' }}</a></li>
|
||||
<li ui-sref-active="active"><a class="text-black" href="#" ui-sref="app.logged.dashboard.trainings" translate>{{ 'my_trainings' }}</a></li>
|
||||
<li ui-sref-active="active"><a class="text-black" href="#" ui-sref="app.logged.dashboard.events" translate>{{ 'my_events' }}</a></li>
|
||||
<li ui-sref-active="active" ng-hide="fablabWithoutInvoices"><a class="text-black" href="#" ui-sref="app.logged.dashboard.invoices" translate>{{ 'my_invoices' }}</a></li>
|
||||
<li ui-sref-active="active"><a class="text-black" href="#" ui-sref="app.logged.dashboard.wallet" translate>{{ 'my_wallet' }}</a></li>
|
||||
<li ui-sref-active="active"><a class="text-black" href="#" ui-sref="app.logged.dashboard.profile" translate>{{ 'app.public.common.my_profile' }}</a></li>
|
||||
<li ui-sref-active="active"><a class="text-black" href="#" ui-sref="app.logged.dashboard.settings" translate>{{ 'app.public.common.my_settings' }}</a></li>
|
||||
<li ui-sref-active="active"><a class="text-black" href="#" ui-sref="app.logged.dashboard.projects" translate>{{ 'app.public.common.my_projects' }}</a></li>
|
||||
<li ui-sref-active="active"><a class="text-black" href="#" ui-sref="app.logged.dashboard.trainings" translate>{{ 'app.public.common.my_trainings' }}</a></li>
|
||||
<li ui-sref-active="active"><a class="text-black" href="#" ui-sref="app.logged.dashboard.events" translate>{{ 'app.public.common.my_events' }}</a></li>
|
||||
<li ui-sref-active="active" ng-hide="fablabWithoutInvoices"><a class="text-black" href="#" ui-sref="app.logged.dashboard.invoices" translate>{{ 'app.public.common.my_invoices' }}</a></li>
|
||||
<li ui-sref-active="active"><a class="text-black" href="#" ui-sref="app.logged.dashboard.wallet" translate>{{ 'app.public.common.my_wallet' }}</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
<section class="heading">
|
||||
<div class="row no-gutter">
|
||||
<ng-include src="'<%= asset_path 'dashboard/nav.html' %>'"></ng-include>
|
||||
<ng-include src="'<%= asset_path "dashboard/nav.html" %>'"></ng-include>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
@ -10,7 +10,7 @@
|
||||
|
||||
<div class="row no-gutter">
|
||||
<div class="col-md-12 m m-t-lg">
|
||||
<ng-include src="'<%= asset_path 'shared/publicProfile.html' %>'"></ng-include>
|
||||
<ng-include src="'<%= asset_path "shared/publicProfile.html" %>'"></ng-include>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
<section class="heading">
|
||||
<div class="row no-gutter">
|
||||
<ng-include src="'<%= asset_path 'dashboard/nav.html' %>'"></ng-include>
|
||||
<ng-include src="'<%= asset_path "dashboard/nav.html" %>'"></ng-include>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@ -10,17 +10,17 @@
|
||||
<div class="row no-gutter">
|
||||
|
||||
<div class="row m-t-md">
|
||||
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm col-lg-offset-10" ui-sref="app.logged.projects_new" role="button" translate>{{ 'add_a_project' }}</a>
|
||||
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm col-lg-offset-10" ui-sref="app.logged.projects_new" role="button" translate>{{ 'app.logged.dashboard.projects.add_a_project' }}</a>
|
||||
</div>
|
||||
|
||||
<div class="wrapper" ng-if="user.all_projects.length == 0" translate>{{ 'you_dont_have_any_projects' }}</div>
|
||||
<div class="wrapper" ng-if="user.all_projects.length == 0" translate>{{ 'app.logged.dashboard.projects.you_dont_have_any_projects' }}</div>
|
||||
<div class="widget panel b-a m m-t-lg" ng-repeat="project in user.all_projects">
|
||||
<div class="panel-heading b-b clearfix">
|
||||
<h4 class="text-u-c font-sbold pull-left">{{project.name}}</h4>
|
||||
<span class="m-l-sm label label-success text-white">{{project.author_id == currentUser.id ? 'author' : 'collaborator' | translate}}</span>
|
||||
<span class="badge" ng-if="project.state == 'draft'" translate>{{ 'rough_draft' }}</span>
|
||||
<span class="m-l-sm label label-success text-white">{{project.author_id == currentUser.id ? 'app.logged.dashboard.projects.author' : 'app.logged.dashboard.projects.collaborator' | translate}}</span>
|
||||
<span class="badge" ng-if="project.state == 'draft'" translate>{{ 'app.logged.dashboard.projects.rough_draft' }}</span>
|
||||
<div class="pull-right">
|
||||
<a class="btn btn-warning bg-white b-2x rounded upper text-sm text-black" ui-sref="app.public.projects_show({id:project.slug})" role="button" translate>{{ 'consult' }}</a>
|
||||
<a class="btn btn-warning bg-white b-2x rounded upper text-sm text-black" ui-sref="app.public.projects_show({id:project.slug})" role="button" translate>{{ 'app.shared.buttons.consult' }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="widget-content bg-light clearfix">
|
||||
@ -28,7 +28,7 @@
|
||||
<div class="col-sm-12 col-md-4 col-lg-4">
|
||||
<div class="widget panel b-a r-n m-t-md">
|
||||
<div class="panel-heading b-b small">
|
||||
<h3 translate>{{ 'description' }}</h3>
|
||||
<h3 translate>{{ 'app.logged.dashboard.projects.description' }}</h3>
|
||||
</div>
|
||||
<div class="widget-content no-bg wrapper text-black-light">
|
||||
<div ng-bind-html="project.description | humanize : 180 | toTrusted"></div>
|
||||
@ -39,14 +39,14 @@
|
||||
<div class="col-sm-12 col-md-4 col-lg-4">
|
||||
<div class="widget panel b-a r-n m-t-md">
|
||||
<div class="panel-heading b-b small">
|
||||
<h3 translate>{{ 'machines_and_materials' }}</h3>
|
||||
<h3 translate>{{ 'app.logged.dashboard.projects.machines_and_materials' }}</h3>
|
||||
</div>
|
||||
<div class="widget-content no-bg wrapper">
|
||||
<h3 class="text-black-light font-sbold"><i class="fa fa-rocket red"></i> {{ 'machines' | translate }} :</h3>
|
||||
<h3 class="text-black-light font-sbold"><i class="fa fa-rocket red"></i> {{ 'app.logged.dashboard.projects.machines' | translate }} :</h3>
|
||||
<ul class="list-unstyled m-l-md text-black-light">
|
||||
<li ng-repeat="m in project.machines">{{m.name}}</li>
|
||||
</ul>
|
||||
<h3 class="text-black-light font-sbold"><i class="fa fa-cog red"></i> {{ 'materials' | translate }} :</h3>
|
||||
<h3 class="text-black-light font-sbold"><i class="fa fa-cog red"></i> {{ 'app.logged.dashboard.projects.materials' | translate }} :</h3>
|
||||
<ul class="list-unstyled m-l-md text-black-light">
|
||||
<li ng-repeat="c in project.components">{{c.name}}</li>
|
||||
</ul>
|
||||
@ -57,7 +57,7 @@
|
||||
<div class="col-sm-12 col-md-4 col-lg-4">
|
||||
<div class="widget panel b-a r-n m-t-md">
|
||||
<div class="panel-heading b-b small">
|
||||
<h3 translate>{{ 'collaborators' }}</h3>
|
||||
<h3 translate>{{ 'app.logged.dashboard.projects.collaborators' }}</h3>
|
||||
</div>
|
||||
<div class="widget-content list-group-lg no-bg auto wrapper">
|
||||
<li class="list-group-item no-b clearfix" ng-repeat="collaborator in project.project_users">
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div>
|
||||
|
||||
<ng-include src="'<%= asset_path 'dashboard/nav.html' %>'"></ng-include>
|
||||
<ng-include src="'<%= asset_path "dashboard/nav.html" %>'"></ng-include>
|
||||
|
||||
|
||||
|
||||
@ -13,11 +13,11 @@
|
||||
</span>
|
||||
<div class="font-sbold m-t-sm">{{user.name}}</div>
|
||||
<div>{{user.email}}</div>
|
||||
<div class="text-xs" ng-if="user.last_sign_in_at"><i>{{ 'edit_profile.last_activity_on_' | translate }} {{user.last_sign_in_at | amDateFormat: 'LL'}}</i></div>
|
||||
<div class="text-xs" ng-show="user.last_sign_in_at"><i>{{ 'app.logged.dashboard.settings.last_activity_on_' | translate:{DATE:(user.last_sign_in_at | amDateFormat: 'LL')} }}</i></div>
|
||||
</div>
|
||||
<div class="widget-content no-bg b-b auto wrapper">
|
||||
<div class="m-b-md">
|
||||
<h3 class="text-u-c" translate>{{ 'edit_profile.group' }}</h3>
|
||||
<h3 class="text-u-c" translate>{{ 'app.logged.dashboard.settings.group' }}</h3>
|
||||
<div ng-show="!group.change">
|
||||
<uib-alert type="warning">
|
||||
<span class="text-black font-sbold">{{getUserGroup().name}}</span>
|
||||
@ -26,7 +26,7 @@
|
||||
ng-click="group.change = !group.change"
|
||||
ng-hide="user.subscribed_plan.name || user.role === 'admin'"
|
||||
translate>
|
||||
{{ 'edit_profile.i_want_to_change_group' }}
|
||||
{{ 'app.logged.dashboard.settings.i_want_to_change_group' }}
|
||||
</button>
|
||||
</div>
|
||||
<div ng-show="group.change">
|
||||
@ -35,57 +35,57 @@
|
||||
</div>
|
||||
</div>
|
||||
<div ng-hide="fablabWithoutPlans">
|
||||
<h3 class="text-u-c" translate>{{ 'edit_profile.subscription' }}</h3>
|
||||
<h3 class="text-u-c" translate>{{ 'app.logged.dashboard.settings.subscription' }}</h3>
|
||||
<div ng-show="user.subscribed_plan">
|
||||
<uib-alert type="warning">
|
||||
<span class="text-black font-sbold">{{ user.subscribed_plan | humanReadablePlanName }}</span>
|
||||
<div class="font-sbold" ng-if="user.subscription">{{ 'edit_profile.your_subscription_expires_on_' | translate }} {{user.subscription.expired_at | amDateFormat: 'LL'}}</div>
|
||||
<div class="font-sbold" ng-if="user.subscription">{{ 'app.logged.dashboard.settings.your_subscription_expires_on_' | translate }} {{user.subscription.expired_at | amDateFormat: 'LL'}}</div>
|
||||
</uib-alert>
|
||||
|
||||
</div>
|
||||
<div ng-show="!user.subscribed_plan.name">{{ 'edit_profile.no_subscriptions' | translate }} <br><a class="btn text-black btn-warning-full btn-sm m-t-xs" ui-sref="app.public.plans" translate>{{ 'edit_profile.i_want_to_subscribe' }}</a></div>
|
||||
<div ng-show="!user.subscribed_plan.name">{{ 'app.logged.dashboard.settings.no_subscriptions' | translate }} <br><a class="btn text-black btn-warning-full btn-sm m-t-xs" ui-sref="app.public.plans" translate>{{ 'app.logged.dashboard.settings.i_want_to_subscribe' }}</a></div>
|
||||
</div>
|
||||
|
||||
<div class="m-t">
|
||||
<h3 class="text-u-c" translate>{{ 'edit_profile.trainings' }}</h3>
|
||||
<h3 class="text-u-c" translate>{{ 'app.logged.dashboard.settings.trainings' }}</h3>
|
||||
<ul class="list-unstyled" ng-if="user.training_reservations.length > 0 || user.trainings.length > 0">
|
||||
<li ng-repeat="r in user.training_reservations | trainingReservationsFilter:'future'">
|
||||
{{r.reservable.name}} - {{ 'edit_profile.to_come' | translate }}
|
||||
{{r.reservable.name}} - {{ 'app.logged.dashboard.settings.to_come' | translate }}
|
||||
</li>
|
||||
<li ng-repeat="t in user.trainings">
|
||||
{{t.name}} - {{ 'edit_profile.approved' | translate }}
|
||||
{{t.name}} - {{ 'app.logged.dashboard.settings.approved' | translate }}
|
||||
</li>
|
||||
</ul>
|
||||
<div ng-if="user.training_reservations.length == 0 && user.trainings.length == 0" translate>{{ 'edit_profile.no_trainings' }}</div>
|
||||
<div ng-if="user.training_reservations.length == 0 && user.trainings.length == 0" translate>{{ 'app.logged.dashboard.settings.no_trainings' }}</div>
|
||||
</div>
|
||||
|
||||
<div class="m-t">
|
||||
<h3 class="text-u-c" translate>{{ 'edit_profile.projects' }}</h3>
|
||||
<h3 class="text-u-c" translate>{{ 'app.logged.dashboard.settings.projects' }}</h3>
|
||||
<ul class="list-unstyled" ng-if="user.all_projects.length > 0">
|
||||
<li ng-repeat="p in user.all_projects">
|
||||
{{p.name}}
|
||||
</li>
|
||||
</ul>
|
||||
<div ng-if="user.all_projects.length == 0" translate>{{ 'edit_profile.no_projects' }}</div>
|
||||
<div ng-if="user.all_projects.length == 0" translate>{{ 'app.logged.dashboard.settings.no_projects' }}</div>
|
||||
</div>
|
||||
|
||||
<div class="m-t">
|
||||
<h3 class="text-u-c" translate>{{ 'edit_profile.labels' }}</h3>
|
||||
<h3 class="text-u-c" translate>{{ 'app.logged.dashboard.settings.labels' }}</h3>
|
||||
<span ng-if="user.tags.length > 0" ng-repeat="t in user.tags">
|
||||
<span class='label label-success text-white'>{{t.name}}</span>
|
||||
</span>
|
||||
<div ng-if="user.tags.length == 0" translate>{{ 'edit_profile.no_labels' }}</div>
|
||||
<div ng-if="user.tags.length == 0" translate>{{ 'app.logged.dashboard.settings.no_labels' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="widget-content no-bg b-b auto wrapper">
|
||||
<h3 class="text-u-c" translate>{{ 'edit_profile.cookies' }}</h3>
|
||||
<div ng-show="cookiesStatus === 'accept'" translate>{{ 'edit_profile.cookies_accepted' }}</div>
|
||||
<div ng-show="cookiesStatus === 'decline'" translate>{{ 'edit_profile.cookies_declined' }}</div>
|
||||
<div ng-hide="cookiesStatus" translate>{{ 'edit_profile.cookies_unset' }}</div>
|
||||
<button ng-click="resetCookies()" ng-show="cookiesStatus" class="btn text-black btn-warning-full btn-sm m-t-xs" translate>{{ 'edit_profile.reset_cookies' }}</button>
|
||||
<h3 class="text-u-c" translate>{{ 'app.logged.dashboard.settings.cookies' }}</h3>
|
||||
<div ng-show="cookiesStatus === 'accept'" translate>{{ 'app.logged.dashboard.settings.cookies_accepted' }}</div>
|
||||
<div ng-show="cookiesStatus === 'decline'" translate>{{ 'app.logged.dashboard.settings.cookies_declined' }}</div>
|
||||
<div ng-hide="cookiesStatus" translate>{{ 'app.logged.dashboard.settings.cookies_unset' }}</div>
|
||||
<button ng-click="resetCookies()" ng-show="cookiesStatus" class="btn text-black btn-warning-full btn-sm m-t-xs" translate>{{ 'app.logged.dashboard.settings.reset_cookies' }}</button>
|
||||
</div>
|
||||
<div class="widget-content no-bg text-center auto wrapper" ng-hide="isSuperAdmin">
|
||||
<button class="btn text-white btn-danger btn-sm" ng-click="deleteUser(user)"><i class="fa fa-warning m-r-xs"></i> {{ 'edit_profile.delete_my_account' | translate }}</button>
|
||||
<button class="btn text-white btn-danger btn-sm" ng-click="deleteUser(user)"><i class="fa fa-warning m-r-xs"></i> {{ 'app.logged.dashboard.settings.delete_my_account' | translate }}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -94,7 +94,7 @@
|
||||
<div class="col-sm-12 col-md-12 col-lg-9">
|
||||
<div class="widget panel b-a m m-t-lg">
|
||||
<div class="panel-heading b-b">
|
||||
<h1 class="red text-u-c" translate>{{ 'edit_profile.edit_my_profile' }}</h1>
|
||||
<h1 class="red text-u-c" translate>{{ 'app.logged.dashboard.settings.edit_my_profile' }}</h1>
|
||||
</div>
|
||||
<form role="form" name="userForm" class="form-horizontal" novalidate action="{{ actionUrl }}" ng-upload="submited(content)" upload-options-enable-rails-csrf="true">
|
||||
<div class="widget-content no-bg auto">
|
||||
@ -108,25 +108,25 @@
|
||||
<div class="panel-body row">
|
||||
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
|
||||
<a class="btn btn-default" ng-href="{{activeProvider.link_to_sso_profile}}" target="_blank">
|
||||
<i class="fa fa-edit"></i> {{ 'edit_profile.change_my_data' | translate }}
|
||||
<i class="fa fa-edit"></i> {{ 'app.logged.dashboard.settings.change_my_data' | translate }}
|
||||
</a>
|
||||
<p>{{ 'edit_profile.once_your_data_are_up_to_date_' | translate }} <strong translate>{{ 'edit_profile._click_on_the_synchronization_button_opposite_' }}</strong> {{ 'edit_profile.or' | translate}} <strong translate>{{ 'edit_profile._disconnect_then_reconnect_' }}</strong> {{ 'edit_profile._for_your_changes_to_take_effect' | translate }}</p>
|
||||
<p>{{ 'app.logged.dashboard.settings.once_your_data_are_up_to_date_' | translate }} <strong translate>{{ 'app.logged.dashboard.settings._click_on_the_synchronization_button_opposite_' }}</strong> {{ 'app.logged.dashboard.settings.or' | translate}} <strong translate>{{ 'app.logged.dashboard.settings._disconnect_then_reconnect_' }}</strong> {{ 'app.logged.dashboard.settings._for_your_changes_to_take_effect' | translate }}</p>
|
||||
</div>
|
||||
<div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">
|
||||
<a class="btn btn-default" ng-click="syncProfile()">
|
||||
<i class="fa fa-refresh"></i> {{ 'edit_profile.sync_my_profile' | translate }}
|
||||
<i class="fa fa-refresh"></i> {{ 'app.logged.dashboard.settings.sync_my_profile' | translate }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="panel panel-default bg-light m">
|
||||
<div class="panel-body m-r">
|
||||
<ng-include src="'<%= asset_path 'shared/_member_form.html' %>'"></ng-include>
|
||||
<ng-include src="'<%= asset_path "shared/_member_form.html" %>'"></ng-include>
|
||||
</div> <!-- ./panel-body -->
|
||||
</section>
|
||||
</div>
|
||||
<div class="panel-footer no-padder">
|
||||
<input type="submit" value="{{ 'edit_profile.confirm_changes' | translate }}" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" ng-disabled="userForm.$invalid"/>
|
||||
<input type="submit" value="{{ 'app.logged.dashboard.settings.confirm_changes' | translate }}" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" ng-disabled="userForm.$invalid"/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
<section class="heading">
|
||||
<div class="row no-gutter">
|
||||
<ng-include src="'<%= asset_path 'dashboard/nav.html' %>'"></ng-include>
|
||||
<ng-include src="'<%= asset_path "dashboard/nav.html" %>'"></ng-include>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
@ -13,7 +13,7 @@
|
||||
<div class="col-md-4">
|
||||
<div class="widget panel b-a m m-t-lg">
|
||||
<div class="panel-heading b-b">
|
||||
<h4 class="text-u-c"><i class="fa fa-tag m-r-xs"></i> {{ 'your_next_trainings' | translate }}</h4>
|
||||
<h4 class="text-u-c"><i class="fa fa-tag m-r-xs"></i> {{ 'app.logged.dashboard.trainings.your_next_trainings' | translate }}</h4>
|
||||
</div>
|
||||
<div class="widget-content bg-light wrapper r-b">
|
||||
<ul class="list-unstyled" ng-if="user.training_reservations.length > 0">
|
||||
@ -21,14 +21,14 @@
|
||||
<span class="font-sbold">{{r.reservable.name}}</span> - <span class="label label-warning wrapper-sm">{{ r.start_at | amDateFormat:'LLL' }} - {{ r.end_at | amDateFormat:'LT' }}</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div ng-if="user.training_reservations.length == 0" translate>{{ 'no_trainings' }}</div>
|
||||
<div ng-if="user.training_reservations.length == 0" translate>{{ 'app.logged.dashboard.trainings.no_trainings' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="widget panel b-a m m-t-lg">
|
||||
<div class="panel-heading b-b">
|
||||
<h4 class="text-u-c"><i class="fa fa-tag m-r-xs"></i> {{ 'your_previous_trainings' | translate }}</h4>
|
||||
<h4 class="text-u-c"><i class="fa fa-tag m-r-xs"></i> {{ 'app.logged.dashboard.trainings.your_previous_trainings' | translate }}</h4>
|
||||
</div>
|
||||
<div class="widget-content bg-light auto wrapper r-b">
|
||||
<ul class="list-unstyled" ng-if="user.training_reservations.length > 0">
|
||||
@ -36,14 +36,14 @@
|
||||
<span class="font-sbold">{{r.reservable.name}}</span> - <span class="label label-info text-white wrapper-sm">{{ r.start_at | amDateFormat:'LLL' }} - {{ r.end_at | amDateFormat:'LT' }}</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div ng-if="user.training_reservations.length == 0" translate>{{ 'no_trainings' }}</div>
|
||||
<div ng-if="user.training_reservations.length == 0" translate>{{ 'app.logged.dashboard.trainings.no_trainings' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="widget panel b-a m m-t-lg">
|
||||
<div class="panel-heading b-b">
|
||||
<h4 class="text-u-c"><i class="fa fa-tag m-r-xs"></i> {{ 'your_approved_trainings' | translate }}</h4>
|
||||
<h4 class="text-u-c"><i class="fa fa-tag m-r-xs"></i> {{ 'app.logged.dashboard.trainings.your_approved_trainings' | translate }}</h4>
|
||||
</div>
|
||||
<div class="widget-content bg-light auto wrapper r-b">
|
||||
<ul class="list-unstyled" ng-if="user.trainings.length > 0">
|
||||
@ -51,7 +51,7 @@
|
||||
<span class="font-sbold">{{t.name}}</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div ng-if="user.trainings.length == 0" translate>{{ 'no_trainings' }}</div>
|
||||
<div ng-if="user.trainings.length == 0" translate>{{ 'app.logged.dashboard.trainings.no_trainings' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
<section class="heading">
|
||||
<div class="row no-gutter">
|
||||
<ng-include src="'<%= asset_path 'dashboard/nav.html' %>'"></ng-include>
|
||||
<ng-include src="'<%= asset_path "dashboard/nav.html" %>'"></ng-include>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
@ -10,11 +10,11 @@
|
||||
|
||||
<div class="row no-gutter">
|
||||
<div class="col-md-12 m m-t-lg">
|
||||
<ng-include src="'<%= asset_path 'wallet/show.html' %>'"></ng-include>
|
||||
<ng-include src="'<%= asset_path "wallet/show.html" %>'"></ng-include>
|
||||
</div>
|
||||
|
||||
<div class="col-md-12 m m-t-lg">
|
||||
<ng-include src="'<%= asset_path 'wallet/transactions.html' %>'"></ng-include>
|
||||
<ng-include src="'<%= asset_path "wallet/transactions.html" %>'"></ng-include>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -7,13 +7,13 @@
|
||||
</div>
|
||||
<div class="col-xs-10 col-sm-10 col-md-8 b-l b-r-md">
|
||||
<section class="heading-title">
|
||||
<h1 translate>{{ 'the_fablab_s_events' }}</h1>
|
||||
<h1 translate>{{ 'app.public.events_list.the_fablab_s_events' }}</h1>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md" ng-if="isAuthorized(['admin'])">
|
||||
<section class="heading-actions wrapper">
|
||||
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm" ui-sref="app.admin.events_new" role="button" translate>{{ 'add_an_event' }}</a>
|
||||
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm" ui-sref="app.admin.events_new" role="button" translate>{{ 'app.public.events_list.add_an_event' }}</a>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
@ -23,19 +23,19 @@
|
||||
<div class="row m-b-md">
|
||||
<div class="col-md-3 m-b" ng-show="categories.length > 0">
|
||||
<select ng-model="filters.category_id" ng-change="filterEvents()" class="form-control" ng-options="c.id as c.name for c in categories">
|
||||
<option value="" translate>{{ 'all_categories' }}</option>
|
||||
<option value="" translate>{{ 'app.public.events_list.all_categories' }}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 m-b" ng-show="themes.length > 0">
|
||||
<select ng-model="filters.theme_id" ng-change="filterEvents()" class="form-control" ng-options="t.id as t.name for t in themes">
|
||||
<option value="" translate>{{ 'all_themes' }}</option>
|
||||
<option value="" translate>{{ 'app.public.events_list.all_themes' }}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 m-b" ng-show="ageRanges.length > 0">
|
||||
<select ng-model="filters.age_range_id" ng-change="filterEvents()" class="form-control" ng-options="a.id as a.name for a in ageRanges">
|
||||
<option value="" translate>{{ 'for_all' }}</option>
|
||||
<option value="" translate>{{ 'app.public.events_list.for_all' }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
@ -53,10 +53,10 @@
|
||||
<h5 class="text-xs">{{event.category.name}}</h5>
|
||||
<h4 class="m-n text-sm clear l-n">{{event.title}}</h4>
|
||||
<h3 class="m-n" ng-show="onSingleDay(event)">{{event.start_date | amDateFormat:'L'}}</h3>
|
||||
<h3 class="m-n" ng-hide="onSingleDay(event)">{{event.start_date | amDateFormat:'L'}} <span class="text-sm font-thin" translate> {{ 'to_date' }} </span> {{event.end_date | amDateFormat:'L'}}</h3>
|
||||
<h3 class="m-n" ng-hide="onSingleDay(event)">{{event.start_date | amDateFormat:'L'}} <span class="text-sm font-thin" translate> {{ 'app.public.events_list.to_date' }} </span> {{event.end_date | amDateFormat:'L'}}</h3>
|
||||
|
||||
<h6 class="m-n" ng-if="!event.amount" translate>{{ 'free_admission' }}</h6>
|
||||
<h6 class="m-n" ng-if="event.amount">{{ 'full_price_' | translate }} {{event.amount | currency}} <span ng-repeat="price in event.prices">/ {{ price.category.name }} {{price.amount | currency}}</span></h6>
|
||||
<h6 class="m-n" ng-if="!event.amount" translate>{{ 'app.public.events_list.free_admission' }}</h6>
|
||||
<h6 class="m-n" ng-if="event.amount">{{ 'app.public.events_list.full_price_' | translate }} {{event.amount | currency}} <span ng-repeat="price in event.prices">/ {{ price.category.name }} {{price.amount | currency}}</span></h6>
|
||||
|
||||
<div>
|
||||
<span class="text-black-light text-xs" ng-if="event.event_themes[0]"><i class="fa fa-tags" aria-hidden="true"></i> {{event.event_themes[0].name}}</span>
|
||||
@ -64,10 +64,10 @@
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<span class="text-black-light text-xs" ng-if="event.nb_free_places > 0">{{event.nb_free_places}} {{ 'still_available' | translate }}</span>
|
||||
<span class="text-black-light text-xs" ng-if="event.nb_total_places > 0 && event.nb_free_places <= 0" translate>{{ 'sold_out' }}</span>
|
||||
<span class="text-black-light text-xs" ng-if="event.nb_total_places == -1" translate>{{ 'cancelled' }}</span>
|
||||
<span class="text-black-light text-xs" ng-if="!event.nb_total_places" translate>{{ 'free_entry' }}</span>
|
||||
<span class="text-black-light text-xs" ng-if="event.nb_free_places > 0">{{event.nb_free_places}} {{ 'app.public.events_list.still_available' | translate }}</span>
|
||||
<span class="text-black-light text-xs" ng-if="event.nb_total_places > 0 && event.nb_free_places <= 0" translate>{{ 'app.public.events_list.sold_out' }}</span>
|
||||
<span class="text-black-light text-xs" ng-if="event.nb_total_places == -1" translate>{{ 'app.public.events_list.cancelled' }}</span>
|
||||
<span class="text-black-light text-xs" ng-if="!event.nb_total_places" translate>{{ 'app.public.events_list.free_entry' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -86,7 +86,7 @@
|
||||
<div class="row">
|
||||
|
||||
<div class="col-lg-12 text-center m-t-md">
|
||||
<a class="btn btn-warning" ng-click="loadMoreEvents()" ng-hide="noMoreResults" translate>{{ 'load_the_next_events' }}</a>
|
||||
<a class="btn btn-warning" ng-click="loadMoreEvents()" ng-hide="noMoreResults" translate>{{ 'app.public.events_list.load_the_next_events' }}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
<div class="row wrapper">
|
||||
<div class="col-lg-8">
|
||||
<h4 class="text-sm m-t-sm" translate>{{ 'latest_documented_projects' }}</h4>
|
||||
<h4 class="text-sm m-t-sm" translate>{{ 'app.public.home.latest_documented_projects' }}</h4>
|
||||
|
||||
<uib-carousel interval="5000" disable-animation="true">
|
||||
<uib-slide class="h480 cover r" ng-repeat="p in lastProjects" active="p.active" style="background-image:url({{p.project_image}});">
|
||||
@ -24,14 +24,14 @@
|
||||
<section class="widget panel b-a m-t-sm" ng-if="lastTweets.length > 0">
|
||||
<div class="panel-heading b-b small">
|
||||
<div class="pull-right text-xs align">
|
||||
<a href="https://twitter.com/{{ twitterName }}" ng-show="twitterName" target="_blank">{{ 'follow_us' | translate }}
|
||||
<a href="https://twitter.com/{{ twitterName }}" ng-show="twitterName" target="_blank">{{ 'app.public.home.follow_us' | translate }}
|
||||
<span class="fa-stack fa-lg">
|
||||
<i class="fa fa-circle fa-stack-2x text-yellow"></i>
|
||||
<i class="fa fa-twitter fa-stack-1x fa-inverse text-white"></i>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<h2 translate>{{ 'latest_tweets' }}</h2>
|
||||
<h2 translate>{{ 'app.public.home.latest_tweets' }}</h2>
|
||||
</div>
|
||||
|
||||
<ul class="widget-content list-group list-group-lg no-bg auto">
|
||||
@ -44,7 +44,7 @@
|
||||
<section class="widget panel b-a" >
|
||||
<div class="panel-heading small b-b">
|
||||
<!-- <span class="badge inverse pull-right">110</span> -->
|
||||
<h2 translate>{{ 'latest_registered_members' }}</h2>
|
||||
<h2 translate>{{ 'app.public.home.latest_registered_members' }}</h2>
|
||||
</div>
|
||||
|
||||
<div class="row m-n">
|
||||
@ -64,11 +64,11 @@
|
||||
|
||||
</div>
|
||||
<div class="m-t-sm m-b-sm text-center" ng-if="!isAuthenticated()">
|
||||
<button href="#" ng-click="signup($event)" class="btn btn-warning-full width-70 font-sbold rounded text-sm" translate>{{ 'create_an_account' }}</button>
|
||||
<button href="#" ng-click="signup($event)" class="btn btn-warning-full width-70 font-sbold rounded text-sm" translate>{{ 'app.public.home.create_an_account' }}</button>
|
||||
</div>
|
||||
|
||||
<div class="m-t-sm m-b-sm text-center" ng-if="isAuthenticated()">
|
||||
<button href="#" ui-sref="app.logged.members" class="btn btn-warning-full width-70 font-sbold rounded text-sm" translate>{{ 'discover_members' }}</button>
|
||||
<button href="#" ui-sref="app.logged.members" class="btn btn-warning-full width-70 font-sbold rounded text-sm" translate>{{ 'app.public.home.discover_members' }}</button>
|
||||
</div>
|
||||
|
||||
|
||||
@ -80,7 +80,7 @@
|
||||
</div>
|
||||
|
||||
<section class="home-events col-lg-12 wrapper">
|
||||
<h4 class="text-sm m-t-sm">{{ 'fablab_s_next_events' | translate }} <a ui-sref="app.public.events_list" class="pull-right"><i class="fa fa-tags"></i> {{ 'every_events' | translate }}</a></h4>
|
||||
<h4 class="text-sm m-t-sm">{{ 'app.public.home.fablab_s_next_events' | translate }} <a ui-sref="app.public.events_list" class="pull-right"><i class="fa fa-tags"></i> {{ 'app.public.home.every_events' | translate }}</a></h4>
|
||||
|
||||
<div class="row" ng-repeat="event in (upcomingEvents.length/3 | array)">
|
||||
|
||||
@ -106,14 +106,14 @@
|
||||
<div class="row">
|
||||
<div class="col-sm-6 row m-b-sm">
|
||||
<i class="fa fa-calendar red col-xs-3 padder-icon"></i>
|
||||
<h6 class="m-n col-xs-9 " ng-hide="isOneDayEvent(event)">{{ 'from_date_to_date' | translate:{START:(event.start_date | amDateFormat:'L'), END:(event.end_date | amDateFormat:'L')} }}</h6>
|
||||
<h6 class="m-n col-xs-9 " ng-show="isOneDayEvent(event)">{{ 'on_the_date' | translate:{DATE:(event.start_date | amDateFormat:'L')} }}</h6>
|
||||
<h6 class="m-n col-xs-9 " ng-hide="isOneDayEvent(event)">{{ 'app.public.home.from_date_to_date' | translate:{START:(event.start_date | amDateFormat:'L'), END:(event.end_date | amDateFormat:'L')} }}</h6>
|
||||
<h6 class="m-n col-xs-9 " ng-show="isOneDayEvent(event)">{{ 'app.public.home.on_the_date' | translate:{DATE:(event.start_date | amDateFormat:'L')} }}</h6>
|
||||
</div>
|
||||
<div class="col-sm-6 row m-b-sm">
|
||||
<i class="fa fa-clock-o red col-xs-3 padder-icon"></i>
|
||||
<h6 class="m-n col-xs-9">
|
||||
<span ng-if="event.all_day == 'true'" translate>{{ 'all_day' }}</span>
|
||||
<span ng-if="event.all_day == 'false'">{{ 'from_time_to_time' | translate:{START:(event.start_date | amDateFormat:'LT'), END:(event.end_date | amDateFormat:'LT')} }}</span>
|
||||
<span ng-if="event.all_day == 'true'" translate>{{ 'app.public.home.all_day' }}</span>
|
||||
<span ng-if="event.all_day == 'false'">{{ 'app.public.home.from_time_to_time' | translate:{START:(event.start_date | amDateFormat:'LT'), END:(event.end_date | amDateFormat:'LT')} }}</span>
|
||||
</h6>
|
||||
</div>
|
||||
</div>
|
||||
@ -122,22 +122,22 @@
|
||||
<div class="col-sm-6 row m-b-sm">
|
||||
<i class="fa fa-user red col-xs-3 padder-icon"></i>
|
||||
<h6 class="m-n col-xs-9 ">
|
||||
<span ng-if="event.nb_free_places > 0">{{ 'still_available' | translate }} {{event.nb_free_places}}</span>
|
||||
<span ng-if="!event.nb_total_places" translate>{{ 'free_entry' }}</span>
|
||||
<span ng-if="event.nb_total_places > 0 && event.nb_free_places <= 0" translate>{{ 'event_full' }}</span>
|
||||
<span ng-if="event.nb_free_places > 0">{{ 'app.public.home.still_available' | translate }} {{event.nb_free_places}}</span>
|
||||
<span ng-if="!event.nb_total_places" translate>{{ 'app.public.home.free_entry' }}</span>
|
||||
<span ng-if="event.nb_total_places > 0 && event.nb_free_places <= 0" translate>{{ 'app.public.home.event_full' }}</span>
|
||||
</h6>
|
||||
</div>
|
||||
<div class="col-sm-6 row m-b-sm">
|
||||
<i class="fa fa-bookmark red col-xs-3 padder-icon"></i>
|
||||
<h6 class="m-n col-xs-9">
|
||||
<span ng-if="event.amount == 0" translate>{{ 'free_admission' }}</span>
|
||||
<span ng-if="event.amount > 0">{{ 'full_price' | translate }} {{event.amount | currency}}</span>
|
||||
<span ng-if="event.amount == 0" translate>{{ 'app.public.home.free_admission' }}</span>
|
||||
<span ng-if="event.amount > 0">{{ 'app.public.home.full_price' | translate }} {{event.amount | currency}}</span>
|
||||
</h6>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center clearfix ">
|
||||
<div class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm m-b-sm upper text-sm width-70" ui-sref="app.public.events_show({id: event.id})" ><span translate>{{ 'consult' }}</span></div>
|
||||
<div class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm m-b-sm upper text-sm width-70" ui-sref="app.public.events_show({id: event.id})" ><span translate>{{ 'app.shared.buttons.consult' }}</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -7,13 +7,13 @@
|
||||
</div>
|
||||
<div class="col-xs-10 col-sm-10 col-md-8 b-l b-r-md">
|
||||
<section class="heading-title">
|
||||
<h1 translate>{{ 'machines_list.the_fablab_s_machines' }}</h1>
|
||||
<h1 translate>{{ 'app.public.machines_list.the_fablab_s_machines' }}</h1>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md" ng-if="isAuthorized('admin')">
|
||||
<section class="heading-actions wrapper">
|
||||
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs" ui-sref="app.admin.machines_new" role="button" translate>{{ 'machines_list.add_a_machine' }}</a>
|
||||
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs" ui-sref="app.admin.machines_new" role="button" translate>{{ 'app.public.machines_list.add_a_machine' }}</a>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
@ -26,7 +26,7 @@
|
||||
<div class="input-group col-md-3 m-l-lg m-b">
|
||||
<span class="input-group-addon"><i class="fa fa-filter"></i></span>
|
||||
<select ng-model="machineFiltering" class="form-control">
|
||||
<option ng-repeat="status in filterDisabled" value="{{status}}" translate>{{ 'machines_list.status_'+status }}</option>
|
||||
<option ng-repeat="status in filterDisabled" value="{{status}}" translate>{{ 'app.public.machines_list.status_'+status }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
@ -48,13 +48,13 @@
|
||||
<div class="col-sm-6 b-r no-padder">
|
||||
<div class="btn btn-default btn-block no-b padder-v red" ng-click="reserveMachine(machine, $event)" ng-hide="machine.disabled">
|
||||
<i class="fa fa-bookmark m-r-xs"></i>
|
||||
<span class="hidden-sm" translate>{{ 'machines_list.book' }}</span>
|
||||
<span class="hidden-sm" translate>{{ 'app.public.machines_list.book' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="no-padder" ng-class="{'col-sm-6': !machine.disabled}">
|
||||
<div class="btn btn-default btn-block padder-v no-b red" ng-click="showMachine(machine)">
|
||||
<i class="fa fa-eye m-r-xs"></i>
|
||||
<span class="hidden-sm" translate>{{ 'consult' }}</span>
|
||||
<span class="hidden-sm" translate>{{ 'app.shared.buttons.consult' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -15,15 +15,15 @@
|
||||
|
||||
<div class="col-xs-12 col-sm-12 col-md-4 b-t hide-b-md">
|
||||
<section class="heading-actions wrapper">
|
||||
<a ng-click="reserveMachine(machine, $event)"
|
||||
class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs"
|
||||
<a ng-click="reserveMachine(machine, $event)"
|
||||
class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs"
|
||||
ng-if="!isAuthorized('admin')"
|
||||
ng-hide="machine.disabled"
|
||||
translate>{{ 'book_this_machine' }}</a>
|
||||
translate>{{ 'app.public.machines_show.book_this_machine' }}</a>
|
||||
|
||||
<a ui-sref="app.admin.machines_edit({id: machine.id})" ng-if="isAuthorized('admin')" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs"><i class="fa fa-edit"></i> {{ 'edit' | translate }}</a>
|
||||
<a ui-sref="app.admin.machines_edit({id: machine.id})" ng-if="isAuthorized('admin')" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs"><i class="fa fa-edit"></i> {{ 'app.shared.buttons.edit' | translate }}</a>
|
||||
<a ng-click="delete(machine)" ng-if="isAuthorized('admin')" class="btn btn-lg btn-danger b-2x rounded no-b m-t-xs"><i class="fa fa-trash-o"></i></a>
|
||||
|
||||
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
@ -48,7 +48,7 @@
|
||||
|
||||
<div class="widget panel b-a m m-t-lg">
|
||||
<div class="panel-heading b-b small">
|
||||
<h3 translate>{{ 'technical_specifications' }}</h3>
|
||||
<h3 translate>{{ 'app.public.machines_show.technical_specifications' }}</h3>
|
||||
</div>
|
||||
<div class="widget-content no-bg wrapper">
|
||||
<h3></h3>
|
||||
@ -59,19 +59,19 @@
|
||||
<section class="widget panel b-a m" ng-if="machine.machine_files_attributes">
|
||||
<div class="panel-heading b-b">
|
||||
<span class="badge bg-warning pull-right">{{machine.machine_files_attributes.length}}</span>
|
||||
<h3 translate>{{ 'files_to_download' }}</h3>
|
||||
<h3 translate>{{ 'app.public.machines_show.files_to_download' }}</h3>
|
||||
</div>
|
||||
|
||||
<ul class="widget-content list-group list-group-lg no-bg auto">
|
||||
|
||||
<ul class="widget-content list-group list-group-lg no-bg auto">
|
||||
<li ng-repeat="file in machine.machine_files_attributes" class="list-group-item no-b clearfix">
|
||||
<a target="_blank" ng-href="{{file.attachment_url}}"><i class="fa fa-arrow-circle-o-down"> </i> {{file.attachment | humanize : 25}}</a>
|
||||
</li>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="widget panel b-a m" ng-if="machine.machine_projects">
|
||||
<div class="panel-heading b-b">
|
||||
<h3 translate>{{ 'projects_using_the_machine' }}</h3>
|
||||
<h3 translate>{{ 'app.public.machines_show.projects_using_the_machine' }}</h3>
|
||||
</div>
|
||||
|
||||
<ul class="widget-content list-group list-group-lg no-bg auto">
|
||||
|
@ -7,7 +7,7 @@
|
||||
</div>
|
||||
<div class="col-xs-10 col-sm-10 col-md-8 b-l">
|
||||
<section class="heading-title">
|
||||
<h1 translate>{{ 'the_fablab_members' }}</h1>
|
||||
<h1 translate>{{ 'app.logged.members.the_fablab_members' }}</h1>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
@ -21,10 +21,10 @@
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width:15%" translate>{{ 'avatar' }}</th>
|
||||
<th style="width:15%" translate>{{ 'user' }}</th>
|
||||
<th style="width:15%" translate>{{ 'pseudonym' }}</th>
|
||||
<th style="width:15%" translate>{{ 'email_address' }}</th>
|
||||
<th style="width:15%" translate>{{ 'app.logged.members.avatar' }}</th>
|
||||
<th style="width:15%" translate>{{ 'app.logged.members.user' }}</th>
|
||||
<th style="width:15%" translate>{{ 'app.logged.members.pseudonym' }}</th>
|
||||
<th style="width:15%" translate>{{ 'app.logged.members.email_address' }}</th>
|
||||
<th style="width:10%"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -41,7 +41,7 @@
|
||||
<td>
|
||||
<div class="buttons">
|
||||
<button class="btn btn-default" ui-sref="app.logged.members_show({id: member.slug})">
|
||||
<i class="fa fa-eye"></i> {{ 'consult' | translate }}
|
||||
<i class="fa fa-eye"></i> {{ 'app.shared.buttons.consult' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
@ -49,9 +49,9 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="text-center">
|
||||
<button class="btn btn-warning" ng-click="showNextMembers()" ng-hide="noMoreResults"><i class="fa fa-search-plus" aria-hidden="true"></i> {{ 'display_more_members' | translate }}</button>
|
||||
<button class="btn btn-warning" ng-click="showNextMembers()" ng-hide="noMoreResults"><i class="fa fa-search-plus" aria-hidden="true"></i> {{ 'app.logged.members.display_more_members' | translate }}</button>
|
||||
</div>
|
||||
<p ng-if="members.length == 0" translate>{{ 'no_members_for_now' }}</p>
|
||||
<p ng-if="members.length == 0" translate>{{ 'app.logged.members.no_members_for_now' }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
@ -15,11 +15,11 @@
|
||||
|
||||
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md">
|
||||
<section class="heading-actions wrapper">
|
||||
<a ui-sref="app.logged.members" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs" translate>{{ 'members_list' }}</a>
|
||||
<a ui-sref="app.logged.members" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs" translate>{{ 'app.logged.members_show.members_list' }}</a>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<ng-include src="'<%= asset_path 'shared/publicProfile.html' %>'"></ng-include>
|
||||
<ng-include src="'<%= asset_path "shared/publicProfile.html" %>'"></ng-include>
|
||||
</div>
|
||||
|
@ -7,7 +7,7 @@
|
||||
</div>
|
||||
<div class="col-xs-10 col-sm-10 col-md-8 b-l">
|
||||
<section class="heading-title">
|
||||
<h1 translate>{{ 'notifications_center' }}</h1>
|
||||
<h1 translate>{{ 'app.logged.notifications.notifications_center' }}</h1>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
@ -19,14 +19,14 @@
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-12">
|
||||
<button type="button" class="btn btn-warning m-t-sm m-b" ng-click="markAllAsRead()" ng-disabled="totalUnread == 0">{{ 'mark_all_as_read' | translate }} ({{totalUnread}})</button>
|
||||
<button type="button" class="btn btn-warning m-t-sm m-b" ng-click="markAllAsRead()" ng-disabled="totalUnread == 0">{{ 'app.logged.notifications.mark_all_as_read' | translate }} ({{totalUnread}})</button>
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width:10%"></th>
|
||||
<th style="width:20%" translate>{{ 'date' }}</th>
|
||||
<th style="width:70%" translate>{{ 'notif_title' }}</th>
|
||||
<th style="width:20%" translate>{{ 'app.logged.notifications.date' }}</th>
|
||||
<th style="width:70%" translate>{{ 'app.logged.notifications.notif_title' }}</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
@ -42,13 +42,13 @@
|
||||
|
||||
</tr>
|
||||
<tr ng-if="notificationsUnread.length == 0">
|
||||
<td colspan="3" translate>{{ 'no_new_notifications' }}</td>
|
||||
<td colspan="3" translate>{{ 'app.logged.notifications.no_new_notifications' }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div ng-hide="notificationsRead.length == 0 && notificationsUnread.length < total">
|
||||
<h5 translate>{{ 'archives' }}</h5>
|
||||
<h5 translate>{{ 'app.logged.notifications.archives' }}</h5>
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
@ -73,7 +73,7 @@
|
||||
|
||||
|
||||
<tr ng-if="notificationsRead.length == 0">
|
||||
<td colspan="3" translate>{{ 'no_archived_notifications' }}</td>
|
||||
<td colspan="3" translate>{{ 'app.logged.notifications.no_archived_notifications' }}</td>
|
||||
</tr>
|
||||
|
||||
|
||||
@ -81,7 +81,7 @@
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<a class="btn btn-default" ng-click="addMoreNotifications()" ng-if="paginateActive" translate>{{ 'load_the_next_notifications' }}</a>
|
||||
<a class="btn btn-default" ng-click="addMoreNotifications()" ng-if="paginateActive" translate>{{ 'app.logged.notifications.load_the_next_notifications' }}</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
</div>
|
||||
<div class="col-xs-10 col-sm-10 col-md-8 b-l ">
|
||||
<section class="heading-title">
|
||||
<h1 translate>{{ 'subcriptions' }}</h1>
|
||||
<h1 translate>{{ 'app.public.plans.subcriptions' }}</h1>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
@ -44,24 +44,24 @@
|
||||
<div class="cta-button" ng-if="!currentUser || currentUser.role == 'member'">
|
||||
<button class="btn btn-default rounded" ng-click="selectPlan(plan)" ng-if="currentUser.subscribed_plan.id != plan.id" ng-disabled="currentUser.subscribed_plan" ng-class="{ 'bg-yellow': selectedPlan==plan }">
|
||||
|
||||
<span ng-if="currentUser" translate>{{ 'i_choose_that_plan' }}</span>
|
||||
<span ng-if="currentUser" translate>{{ 'app.public.plans.i_choose_that_plan' }}</span>
|
||||
|
||||
<span ng-if="!currentUser" translate>{{ 'i_subscribe_online' }}</span>
|
||||
<span ng-if="!currentUser" translate>{{ 'app.public.plans.i_subscribe_online' }}</span>
|
||||
|
||||
</button>
|
||||
|
||||
<button class="btn btn-warning bg-yellow rounded" ng-if="currentUser.subscribed_plan.id == plan.id" ng-disabled="currentUser.subscribed_plan.id == plan.id" translate>{{ 'i_already_subscribed' }}</button>
|
||||
<button class="btn btn-warning bg-yellow rounded" ng-if="currentUser.subscribed_plan.id == plan.id" ng-disabled="currentUser.subscribed_plan.id == plan.id" translate>{{ 'app.public.plans.i_already_subscribed' }}</button>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="cta-button" ng-if="currentUser.role == 'admin'">
|
||||
<button class="btn btn-default rounded" ng-click="selectPlan(plan)" ng-class="{ 'bg-yellow': selectedPlan==plan }" ng-disabled="!ctrl.member">
|
||||
<span translate>{{ 'i_choose_that_plan' }}</span>
|
||||
<span translate>{{ 'app.public.plans.i_choose_that_plan' }}</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<br ng-show="!plan.plan_file_url"> <!-- TODO Refacto with CSS -->
|
||||
<a ng-href="{{ plan.plan_file_url }}" ng-show="plan.plan_file_url" target="_blank" translate>{{ 'more_information' }}</a>
|
||||
<a ng-href="{{ plan.plan_file_url }}" ng-show="plan.plan_file_url" target="_blank" translate>{{ 'app.public.plans.more_information' }}</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@ -69,7 +69,7 @@
|
||||
|
||||
<div class="col-xs-12 col-md-12 col-lg-10 col-centered no-gutter" ng-if="currentUser.subscription && isInPast(currentUser.subscription.expired_at)">
|
||||
<uib-alert type="info">
|
||||
{{ 'your_subscription_expires_on_the_DATE' | translate:{DATE:(currentUser.subscription.expired_at | amDateFormat:'L' )} }}
|
||||
{{ 'app.public.plans.your_subscription_expires_on_the_DATE' | translate:{DATE:(currentUser.subscription.expired_at | amDateFormat:'L' )} }}
|
||||
</uib-alert>
|
||||
</div>
|
||||
|
||||
@ -87,8 +87,8 @@
|
||||
|
||||
<section class="widget panel b-a m m-t-lg" ng-show="ctrl.member">
|
||||
<div class="panel-heading b-b">
|
||||
<h3 ng-show="currentUser.role != 'admin'" translate>{{ 'my_group' }}</h3>
|
||||
<h3 ng-show="currentUser.role === 'admin'" translate translate-values="{GENDER:getGender(currentUser)}">{{ 'his_group' }}</h3>
|
||||
<h3 ng-show="currentUser.role != 'admin'" translate>{{ 'app.public.plans.my_group' }}</h3>
|
||||
<h3 ng-show="currentUser.role === 'admin'" translate translate-values="{GENDER:getGender(currentUser)}">{{ 'app.public.plans.his_group' }}</h3>
|
||||
</div>
|
||||
<div class="widget-content no-bg auto wrapper">
|
||||
<div ng-show="!group.change">
|
||||
@ -99,70 +99,70 @@
|
||||
ng-click="group.change = !group.change"
|
||||
ng-show="(!selectedPlan && ctrl.member && !ctrl.member.subscribed_plan && ctrl.member.subscription) || (!paid.plan)"
|
||||
translate
|
||||
translate-values="{ROLE:currentUser.role}">{{ 'he_wants_to_change_group' }}</button>
|
||||
translate-values="{ROLE:currentUser.role}">{{ 'app.public.plans.he_wants_to_change_group' }}</button>
|
||||
</div>
|
||||
<div ng-show="group.change">
|
||||
<select class="form-control" ng-options="g.id as g.name for g in groups" ng-model="group.id"></select>
|
||||
<button class="btn btn-success m-t"
|
||||
ng-click="selectGroup()"
|
||||
translate
|
||||
translate-values="{ROLE:currentUser.role, GENDER:getGender(currentUser)}">{{ 'change_my_group' }}</button>
|
||||
translate-values="{ROLE:currentUser.role, GENDER:getGender(currentUser)}">{{ 'app.public.plans.change_my_group' }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="widget panel b-a m m-t-lg" ng-if="!selectedPlan && ctrl.member && !ctrl.member.subscribed_plan && ctrl.member.subscription">
|
||||
<div class="panel-heading b-b">
|
||||
<h3 translate>{{ 'summary' }}</h3>
|
||||
<h3 translate>{{ 'app.public.plans.summary' }}</h3>
|
||||
</div>
|
||||
|
||||
<div class="widget-content no-bg auto wrapper">
|
||||
<strong>{{ 'your_subscription_has_expired_on_the_DATE' | translate:{DATE:(ctrl.member.subscription.expired_at | amDateFormat:'LL')} }}</strong>
|
||||
<strong>{{ 'app.public.plans.your_subscription_has_expired_on_the_DATE' | translate:{DATE:(ctrl.member.subscription.expired_at | amDateFormat:'LL')} }}</strong>
|
||||
|
||||
<div class="well well-warning m-t-sm">
|
||||
<i class="font-sbold">{{ctrl.member.subscription.plan | humanReadablePlanName }}</i>
|
||||
<div class="font-sbold">{{ 'subscription_price' | translate }} {{ctrl.member.subscription.plan.amount | currency}}</div>
|
||||
<div class="font-sbold">{{ 'app.public.plans.subscription_price' | translate }} {{ctrl.member.subscription.plan.amount | currency}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="widget panel b-a m m-t-lg" ng-if="selectedPlan && ctrl.member">
|
||||
<div class="panel-heading b-b">
|
||||
<h3 translate>{{ 'summary' }}</h3>
|
||||
<h3 translate>{{ 'app.public.plans.summary' }}</h3>
|
||||
</div>
|
||||
|
||||
<div class="widget-content no-bg auto wrapper">
|
||||
{{ 'you_ve_just_selected_a_' | translate }} <strong translate>{{ '_subscription' }}</strong> :
|
||||
<span translate>{{ 'app.public.plans.you_ve_just_selected_a_subscription_html' }}</span>
|
||||
|
||||
<div class="well well-warning m-t-sm">
|
||||
<i class="font-sbold">{{ selectedPlan | humanReadablePlanName }}</i>
|
||||
<div class="font-sbold">{{ 'subscription_price' | translate }} {{selectedPlan.amount | currency}}</div>
|
||||
<div class="font-sbold">{{ 'app.public.plans.subscription_price' | translate }} {{selectedPlan.amount | currency}}</div>
|
||||
</div>
|
||||
|
||||
<coupon show="!ctrl.member.subscribed_plan" coupon="coupon.applied" total="selectedPlan.amount" user-id="{{ctrl.member.id}}"></coupon>
|
||||
</div>
|
||||
|
||||
<div class="widget-footer">
|
||||
<button class="btn btn-valid btn-info btn-block p-l text-u-c r-b" ng-click="openSubscribePlanModal()" ng-if="!ctrl.member.subscribed_plan">{{ 'confirm_and_pay' | translate }} {{cart.total | currency}}</button>
|
||||
<button class="btn btn-valid btn-info btn-block p-l text-u-c r-b" ng-click="openSubscribePlanModal()" ng-if="!ctrl.member.subscribed_plan">{{ 'app.public.plans.confirm_and_pay' | translate }} {{cart.total | currency}}</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<section class="widget panel b-a m m-t-lg" ng-if="paid.plan">
|
||||
<div class="panel-heading b-b">
|
||||
<h3 translate>{{ 'summary' }}</h3>
|
||||
<h3 translate>{{ 'app.public.plans.summary' }}</h3>
|
||||
</div>
|
||||
|
||||
<div class="widget-content no-bg auto wrapper">
|
||||
{{ 'you_ve_just_payed_the_' | translate }} <strong translate>{{ '_subscription' }}</strong> :
|
||||
<span translate>{{ 'app.public.plans.you_ve_just_payed_the_subscription_html' }}</span>
|
||||
|
||||
<div class="well well-warning m-t-sm">
|
||||
<i class="font-sbold">{{ paid.plan | humanReadablePlanName }}</i>
|
||||
<div class="font-sbold">{{ 'subscription_price' | translate }} {{paid.plan.amount | currency}}</div>
|
||||
<div class="font-sbold">{{ 'app.public.plans.subscription_price' | translate }} {{paid.plan.amount | currency}}</div>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-success">{{ 'thank_you_your_subscription_is_successful' | translate }}<br>
|
||||
{{ 'your_invoice_will_be_available_soon_from_your_' | translate }} <a ui-sref="app.logged.dashboard.invoices" translate>{{ 'dashboard' }}</a></div>
|
||||
<div class="alert alert-success">{{ 'app.public.plans.thank_you_your_subscription_is_successful' | translate }}<br>
|
||||
<a ui-sref="app.logged.dashboard.invoices" translate>{{ 'app.public.plans.your_invoice_will_be_available_soon_from_your_dashboard' }}</a></div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
@ -1,15 +1,15 @@
|
||||
<div class="modal-header">
|
||||
<img ng-src="{{logoBlack.custom_asset_file_attributes.attachment_url}}" alt="{{logo.custom_asset_file_attributes.attachment}}" class="modal-logo"/>
|
||||
<h1 translate>{{ 'subscription_confirmation' }}</h1>
|
||||
<h1 translate>{{ 'app.public.plans.subscription_confirmation' }}</h1>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<uib-alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</uib-alert>
|
||||
<ng-include src="'<%= asset_path 'shared/_wallet_amount_info.html' %>'"></ng-include>
|
||||
<ng-include src="'<%= asset_path "shared/_wallet_amount_info.html" %>'"></ng-include>
|
||||
|
||||
<p>{{ 'here_is_the_NAME_subscription_summary' | translate:{NAME:member.name} }}</p>
|
||||
<p>{{ 'app.public.plans.here_is_the_NAME_subscription_summary' | translate:{NAME:member.name} }}</p>
|
||||
<p>{{ plan | humanReadablePlanName }}</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-info" ng-click="ok()" ng-disabled="attempting" ng-bind-html="validButtonName"></button>
|
||||
<button class="btn btn-default" ng-click="cancel()" translate>{{ 'cancel' }}</button>
|
||||
<button class="btn btn-default" ng-click="cancel()" translate>{{ 'app.shared.buttons.cancel' }}</button>
|
||||
</div>
|
||||
|
@ -7,13 +7,13 @@
|
||||
</div>
|
||||
<div class="col-xs-10 col-sm-10 col-md-8 b-l b-r-md">
|
||||
<section class="heading-title">
|
||||
<h1 translate>{{ 'projects_list.the_fablab_projects' }}</h1>
|
||||
<h1 translate>{{ 'app.public.projects_list.the_fablab_projects' }}</h1>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md" ng-if="isAuthorized(['admin','member'])">
|
||||
<section class="heading-actions wrapper">
|
||||
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm" ui-sref="app.logged.projects_new" role="button" translate>{{ 'projects_list.add_a_project' }}</a>
|
||||
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm" ui-sref="app.logged.projects_new" role="button" translate>{{ 'app.public.projects_list.add_a_project' }}</a>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
@ -23,16 +23,16 @@
|
||||
<section class="m-lg">
|
||||
<div class="row m-b-md">
|
||||
<div class="col-md-12 m-b">
|
||||
<a href="javascript:void(0);" class="text-sm pull-right" name="button" ng-click="resetFiltersAndTriggerSearch()" ng-show="!openlab.searchOverWholeNetwork"><i class="fa fa-refresh"></i> {{ 'projects_list.reset_all_filters' | translate }}</a>
|
||||
<a href="javascript:void(0);" class="text-sm pull-right" name="button" ng-click="resetFiltersAndTriggerSearch()" ng-show="!openlab.searchOverWholeNetwork"><i class="fa fa-refresh"></i> {{ 'app.public.projects_list.reset_all_filters' | translate }}</a>
|
||||
|
||||
<span ng-if="openlab.projectsActive" uib-tooltip="{{ 'projects_list.tooltip_openlab_projects_switch' | translate }}" tooltip-trigger="mouseenter">
|
||||
<label for="searchOverWholeNetwork" class="control-label m-r text-sm" translate>{{ 'projects_list.search_over_the_whole_network' }}</label>
|
||||
<span ng-if="openlab.projectsActive" uib-tooltip="{{ 'app.public.projects_list.tooltip_openlab_projects_switch' | translate }}" tooltip-trigger="mouseenter">
|
||||
<label for="searchOverWholeNetwork" class="control-label m-r text-sm" translate>{{ 'app.public.projects_list.search_over_the_whole_network' }}</label>
|
||||
<input bs-switch
|
||||
ng-model="openlab.searchOverWholeNetwork"
|
||||
type="checkbox"
|
||||
class="form-control"
|
||||
switch-on-text="{{ 'yes' | translate }}"
|
||||
switch-off-text="{{ 'no' | translate }}"
|
||||
switch-on-text="{{ 'app.shared.buttons.yes' | translate }}"
|
||||
switch-off-text="{{ 'app.shared.buttons.no' | translate }}"
|
||||
switch-animate="true"
|
||||
ng-change="searchOverWholeNetworkChanged()"
|
||||
/>
|
||||
@ -44,7 +44,7 @@
|
||||
<div class="input-group-addon"><i class="fa fa-search"></i></div>
|
||||
<input type="search" class="form-control" placeholder="Mots-clés" ng-model="search.q"/>
|
||||
<div class="input-group-btn">
|
||||
<button type="submit" class="btn btn-warning" translate>{{ 'projects_list.search' }}</button>
|
||||
<button type="submit" class="btn btn-warning" translate>{{ 'app.public.projects_list.search' }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -53,27 +53,27 @@
|
||||
<span ng-if="!openlab.searchOverWholeNetwork">
|
||||
<div class="col-md-3 m-b" ng-show="isAuthenticated()">
|
||||
<select ng-model="search.from" ng-change="setUrlQueryParams(search) && triggerSearch()" class="form-control">
|
||||
<option value="" translate>{{ 'projects_list.all_projects' }}</option>
|
||||
<option value="mine" translate>{{ 'projects_list.my_projects' }}</option>
|
||||
<option value="collaboration" translate>{{ 'projects_list.projects_to_whom_i_take_part_in' }}</option>
|
||||
<option value="" translate>{{ 'app.public.projects_list.all_projects' }}</option>
|
||||
<option value="mine" translate>{{ 'app.public.projects_list.my_projects' }}</option>
|
||||
<option value="collaboration" translate>{{ 'app.public.projects_list.projects_to_whom_i_take_part_in' }}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 m-b">
|
||||
<select ng-model="search.machine_id" ng-change="setUrlQueryParams(search) && triggerSearch()" class="form-control" ng-options="m.id as m.name for m in machines">
|
||||
<option value="" translate>{{ 'projects_list.all_machines' }}</option>
|
||||
<option value="" translate>{{ 'app.public.projects_list.all_machines' }}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 m-b">
|
||||
<select ng-model="search.theme_id" ng-change="setUrlQueryParams(search) && triggerSearch()" class="form-control" ng-options="t.id as t.name for t in themes">
|
||||
<option value="" translate>{{ 'projects_list.all_themes' }}</option>
|
||||
<option value="" translate>{{ 'app.public.projects_list.all_themes' }}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 m-b">
|
||||
<select ng-model="search.component_id" ng-change="setUrlQueryParams(search) && triggerSearch()" class="form-control" ng-options="t.id as t.name for t in components">
|
||||
<option value="" translate>{{ 'projects_list.all_materials' }}</option>
|
||||
<option value="" translate>{{ 'app.public.projects_list.all_materials' }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</span>
|
||||
@ -81,7 +81,7 @@
|
||||
|
||||
|
||||
<div class="row">
|
||||
<span class="col-md-12" ng-show="projects && (projects.length == 0)"> {{ 'projects_list.project_search_result_is_empty' | translate }} </span>
|
||||
<span class="col-md-12" ng-show="projects && (projects.length == 0)"> {{ 'app.public.projects_list.project_search_result_is_empty' | translate }} </span>
|
||||
<div class="col-xs-12 col-sm-6 col-md-3" ng-repeat="project in projects" ng-click="showProject(project)">
|
||||
|
||||
<div class="card card-project">
|
||||
@ -99,7 +99,7 @@
|
||||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
<span class="badge" ng-if="project.state == 'draft'" translate>{{ 'projects_list.rough_draft' }}</span>
|
||||
<span class="badge" ng-if="project.state == 'draft'" translate>{{ 'app.public.projects_list.rough_draft' }}</span>
|
||||
</div>
|
||||
|
||||
<div class="card-overlay">
|
||||
@ -119,7 +119,7 @@
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12 text-center">
|
||||
<a class="btn btn-warning" ng-click="loadMore()" ng-if="projectsPagination.hasNextPage()" translate>{{ 'projects_list.load_next_projects' }}</a>
|
||||
<a class="btn btn-warning" ng-click="loadMore()" ng-if="projectsPagination.hasNextPage()" translate>{{ 'app.public.projects_list.load_next_projects' }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
@ -21,8 +21,8 @@
|
||||
<span class="btn btn-default btn-file"
|
||||
ng-click="user.profile.user_avatar._destory = false"
|
||||
ng-hide="preventField['profile.avatar'] && user.profile.user_avatar.attachment_url && !userForm['user[profile_attributes][user_avatar_attributes]'].$dirty">
|
||||
<span class="fileinput-new" translate>{{ 'add_an_avatar' }}</span>
|
||||
<span class="fileinput-exists" translate>{{ 'change' }}</span>
|
||||
<span class="fileinput-new" translate>{{ 'app.shared.user.add_an_avatar' }}</span>
|
||||
<span class="fileinput-exists" translate>{{ 'app.shared.buttons.change' }}</span>
|
||||
<input type="file" name="user[profile_attributes][user_avatar_attributes][attachment]">
|
||||
</span>
|
||||
|
||||
@ -47,7 +47,7 @@
|
||||
value="true"
|
||||
ng-disabled="preventField['profile.gender'] && user.statistic_profile.gender && !userForm['user[statistic_profile_attributes][gender]'].$dirty"
|
||||
required/>
|
||||
<i class="fa fa-male m-l-sm"></i> {{ 'man' | translate }}
|
||||
<i class="fa fa-male m-l-sm"></i> {{ 'app.shared.user.man' | translate }}
|
||||
</label>
|
||||
<label class="checkbox-inline btn btn-default">
|
||||
<input type="radio"
|
||||
@ -55,81 +55,81 @@
|
||||
ng-model="user.statistic_profile.gender"
|
||||
value="false"
|
||||
ng-disabled="preventField['profile.gender'] && user.statistic_profile.gender && !userForm['user[statistic_profile_attributes][gender]'].$dirty"/>
|
||||
<i class="fa fa-female m-l-sm"></i> {{ 'woman' | translate }}
|
||||
<i class="fa fa-female m-l-sm"></i> {{ 'app.shared.user.woman' | translate }}
|
||||
</label>
|
||||
<span class="exponent m-l-xs help-cursor" title="{{ 'used_for_statistics' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
|
||||
<span class="exponent m-l-xs help-cursor" title="{{ 'app.shared.user.used_for_statistics' | translate }}"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
|
||||
|
||||
<span class="help-block" ng-show="userForm['user[statistic_profile_attributes][gender]'].$dirty && userForm['user[statistic_profile_attributes][gender]'].$error.required" translate>{{ 'gender_is_required' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[statistic_profile_attributes][gender]'].$dirty && userForm['user[statistic_profile_attributes][gender]'].$error.required" translate>{{ 'app.shared.user.gender_is_required' }}</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group" ng-class="{'has-error': userForm['user[username]'].$dirty && userForm['user[username]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_profile' | translate }}"><i class="fa fa-user"></i> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}"><i class="fa fa-user"></i> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span>
|
||||
</span>
|
||||
<input type="text"
|
||||
name="user[username]"
|
||||
ng-model="user.username"
|
||||
class="form-control"
|
||||
id="user_username"
|
||||
placeholder="{{ 'pseudonym' | translate }}"
|
||||
placeholder="{{ 'app.shared.user.pseudonym' | translate }}"
|
||||
ng-disabled="preventField['user.username'] && user.username && !userForm['user[username]'].$dirty"
|
||||
required/>
|
||||
</div>
|
||||
<span class="help-block" ng-show="userForm['user[username]'].$dirty && userForm['user[username]'].$error.required" translate>{{ 'pseudonym_is_required' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[username]'].$dirty && userForm['user[username]'].$error.required" translate>{{ 'app.shared.user.pseudonym_is_required' }}</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="form-group" ng-class="{'has-error': userForm['user[profile_attributes][last_name]'].$dirty && userForm['user[profile_attributes][last_name]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_invoicing' | translate }}"><i class="fa fa-user"></i> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_invoicing' | translate }}"><i class="fa fa-user"></i> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][last_name]"
|
||||
ng-model="user.profile.last_name"
|
||||
class="form-control"
|
||||
id="user_last_name"
|
||||
placeholder="{{ 'surname' | translate }}"
|
||||
placeholder="{{ 'app.shared.user.surname' | translate }}"
|
||||
ng-disabled="preventField['profile.last_name'] && user.profile.last_name && !userForm['user[profile_attributes][last_name]'].$dirty"
|
||||
required/>
|
||||
</div>
|
||||
<span class="help-block" ng-show="userForm['user[profile_attributes][last_name]'].$dirty && userForm['user[profile_attributes][last_name]'].$error.required" translate>{{ 'surname_is_required' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[profile_attributes][last_name]'].$dirty && userForm['user[profile_attributes][last_name]'].$error.required" translate>{{ 'app.shared.user.surname_is_required' }}</span>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-class="{'has-error': userForm['user[profile_attributes][first_name]'].$dirty && userForm['user[profile_attributes][first_name]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_invoicing' | translate }}"><i class="fa fa-user"></i> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_invoicing' | translate }}"><i class="fa fa-user"></i> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][first_name]"
|
||||
ng-model="user.profile.first_name"
|
||||
class="form-control"
|
||||
id="user_first_name"
|
||||
placeholder="{{ 'first_name' | translate }}"
|
||||
placeholder="{{ 'app.shared.user.first_name' | translate }}"
|
||||
ng-disabled="preventField['profile.first_name'] && user.profile.first_name && !userForm['user[profile_attributes][first_name]'].$dirty"
|
||||
required/>
|
||||
</div>
|
||||
<span class="help-block" ng-show="userForm['user[profile_attributes][first_name]'].$dirty && userForm['user[profile_attributes][first_name]'].$error.required" translate>{{ 'first_name_is_required' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[profile_attributes][first_name]'].$dirty && userForm['user[profile_attributes][first_name]'].$error.required" translate>{{ 'app.shared.user.first_name_is_required' }}</span>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-class="{'has-error': userForm['user[email]'].$dirty && userForm['user[email]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_invoicing' | translate }}"><i class="fa fa-envelope"></i> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_invoicing' | translate }}"><i class="fa fa-envelope"></i> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span></span>
|
||||
<input type="email"
|
||||
name="user[email]"
|
||||
ng-model="user.email"
|
||||
class="form-control"
|
||||
id="user_email"
|
||||
placeholder="{{ 'email_address' | translate }}"
|
||||
placeholder="{{ 'app.shared.user.email_address' | translate }}"
|
||||
ng-disabled="preventField['user.email'] && user.email && !userForm['user[email]'].$dirty"
|
||||
required/>
|
||||
</div>
|
||||
<span class="help-block" ng-show="userForm['user[email]'].$dirty && userForm['user[email]'].$error.required" translate>{{ 'email_address_is_required' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[email]'].$dirty && userForm['user[email]'].$error.required" translate>{{ 'app.shared.user.email_address_is_required' }}</span>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-hide="preventPassword">
|
||||
<button class="btn btn-warning btn-block"
|
||||
ng-click="password.change = !password.change; $event.stopPropagation(); $event.preventDefault()"
|
||||
translate>{{ 'change_password' }}</button>
|
||||
translate>{{ 'app.shared.user.change_password' }}</button>
|
||||
</div>
|
||||
|
||||
|
||||
@ -141,12 +141,12 @@
|
||||
ng-model="user.password"
|
||||
class="form-control"
|
||||
id="user_password"
|
||||
placeholder="{{ 'new_password' | translate }}"
|
||||
placeholder="{{ 'app.shared.user.new_password' | translate }}"
|
||||
ng-minlength="8"
|
||||
required/>
|
||||
</div>
|
||||
<span class="help-block" ng-show="userForm['user[password]'].$dirty && userForm['user[password]'].$error.required" translate>{{ 'password_is_required' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[password]'].$dirty && userForm['user[password]'].$error.minlength" translate>{{ 'password_is_too_short' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[password]'].$dirty && userForm['user[password]'].$error.required" translate>{{ 'app.shared.user.password_is_required' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[password]'].$dirty && userForm['user[password]'].$error.minlength" translate>{{ 'app.shared.user.password_is_too_short' }}</span>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-class="{'has-error': userForm['user[password_confirmation]'].$dirty && userForm['user[password_confirmation]'].$invalid}" ng-if="password.change">
|
||||
@ -157,19 +157,19 @@
|
||||
ng-model="user.password_confirmation"
|
||||
class="form-control"
|
||||
id="user_password_confirmation"
|
||||
placeholder="{{ 'confirmation_of_new_password' | translate }}"
|
||||
placeholder="{{ 'app.shared.user.confirmation_of_new_password' | translate }}"
|
||||
ng-minlength="8"
|
||||
required
|
||||
match="user.password"/>
|
||||
</div>
|
||||
<span class="help-block" ng-show="userForm['user[password_confirmation]'].$dirty && userForm['user[password_confirmation]'].$error.required" translate>{{ 'confirmation_of_password_is_required' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[password_confirmation]'].$dirty && userForm['user[password_confirmation]'].$error.minlength" translate>{{ 'confirmation_of_password_is_too_short' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[password_confirmation]'].$error.match" translate>{{ 'confirmation_mismatch_with_password' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[password_confirmation]'].$dirty && userForm['user[password_confirmation]'].$error.required" translate>{{ 'app.shared.user.confirmation_of_password_is_required' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[password_confirmation]'].$dirty && userForm['user[password_confirmation]'].$error.minlength" translate>{{ 'app.shared.user.confirmation_of_password_is_too_short' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[password_confirmation]'].$error.match" translate>{{ 'app.shared.user.confirmation_mismatch_with_password' }}</span>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-if="user.invoicing_profile.organization" ng-class="{'has-error': userForm['user[invoicing_profile_attributes][organization_attributes][name]'].$dirty && userForm['user[invoicing_profile_attributes][organization_attributes][name]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_invoicing' | translate }}"><i class="fa fa-building-o"></i> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_invoicing' | translate }}"><i class="fa fa-building-o"></i> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span></span>
|
||||
<input type="hidden"
|
||||
name="user[invoicing_profile_attributes][organization_attributes][id]"
|
||||
ng-value="user.invoicing_profile.organization.id" />
|
||||
@ -177,16 +177,16 @@
|
||||
name="user[invoicing_profile_attributes][organization_attributes][name]"
|
||||
ng-model="user.invoicing_profile.organization.name"
|
||||
class="form-control"
|
||||
placeholder="{{ 'organization_name' | translate }}"
|
||||
placeholder="{{ 'app.shared.user.organization_name' | translate }}"
|
||||
ng-required="user.invoicing_profile.organization"
|
||||
ng-disabled="preventField['profile.organization_name'] && user.invoicing_profile.organization.name && !userForm['user[invoicing_profile_attributes][organization_attributes][name]'].$dirty">
|
||||
</div>
|
||||
<span class="help-block" ng-show="userForm['user[invoicing_][organization_attributes][name]'].$dirty && userForm['user[invoicing_profile_attributes][organization_attributes][name]'].$error.required" translate>{{ 'organization_name_is_required' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[invoicing_][organization_attributes][name]'].$dirty && userForm['user[invoicing_profile_attributes][organization_attributes][name]'].$error.required" translate>{{ 'app.shared.user.organization_name_is_required' }}</span>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-if="user.invoicing_profile.organization" ng-class="{'has-error': userForm['user[invoicing_profile_attributes][organization_attributes][address_attributes][address]'].$dirty && userForm['user[invoicing_profile_attributes][organization_attributes][address_attributes][address]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_invoicing' | translate }}"><i class="fa fa-map-marker"></i> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_invoicing' | translate }}"><i class="fa fa-map-marker"></i> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span></span>
|
||||
<input type="hidden"
|
||||
name="user[invoicing_profile_attributes][organization_attributes][address_attributes][id]"
|
||||
ng-value="user.invoicing_profile.organization.address.id" />
|
||||
@ -194,16 +194,16 @@
|
||||
name="user[invoicing_profile_attributes][organization_attributes][address_attributes][address]"
|
||||
ng-model="user.invoicing_profile.organization.address.address"
|
||||
class="form-control"
|
||||
placeholder="{{ 'organization_address' | translate }}"
|
||||
placeholder="{{ 'app.shared.user.organization_address' | translate }}"
|
||||
ng-required="user.invoicing_profile.organization"
|
||||
ng-disabled="preventField['profile.organization_address'] && user.invoicing_profile.organization.address.address && !userForm['user[invoicing_profile_attributes][organization_attributes][address_attributes][address]'].$dirty">
|
||||
</div>
|
||||
<span class="help-block" ng-show="userForm['user[invoicing_profile_attributes][organization_attributes][address_attributes][address]'].$dirty && userForm['user[invoicing_profile_attributes][organization_attributes][address_attributes][address]'].$error.required" translate>{{ 'organization_address_is_required' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[invoicing_profile_attributes][organization_attributes][address_attributes][address]'].$dirty && userForm['user[invoicing_profile_attributes][organization_attributes][address_attributes][address]'].$error.required" translate>{{ 'app.shared.user.organization_address_is_required' }}</span>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-class="{'has-error': userForm['user[statistic_profile_attributes][birthday]'].$dirty && userForm['user[statistic_profile_attributes][birthday]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_statistics' | translate }}"><i class="fa fa-calendar-o"></i> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_statistics' | translate }}"><i class="fa fa-calendar-o"></i> <span class="exponent"><i class="fa fa-asterisk" aria-hidden="true"></i></span></span>
|
||||
<input type="text"
|
||||
id="user_birthday"
|
||||
class="form-control"
|
||||
@ -211,7 +211,7 @@
|
||||
uib-datepicker-popup="{{datePicker.format}}"
|
||||
datepicker-options="datePicker.options"
|
||||
is-open="datePicker.opened"
|
||||
placeholder="{{ 'date_of_birth' | translate }}"
|
||||
placeholder="{{ 'app.shared.user.date_of_birth' | translate }}"
|
||||
ng-click="openDatePicker($event)"
|
||||
ng-disabled="preventField['profile.birthday'] && user.statistic_profile.birthday && !userForm['user[statistic_profile_attributes][birthday]'].$dirty"
|
||||
required/>
|
||||
@ -219,12 +219,12 @@
|
||||
name="user[statistic_profile_attributes][birthday]"
|
||||
value="{{user.statistic_profile.birthday | toIsoDate}}" />
|
||||
</div>
|
||||
<span class="help-block" ng-show="userForm['user[statistic_profile_attributes][birthday]'].$dirty && userForm['user[statistic_profile_attributes][birthday]'].$error.required" translate>{{ 'date_of_birth_is_required' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[statistic_profile_attributes][birthday]'].$dirty && userForm['user[statistic_profile_attributes][birthday]'].$error.required" translate>{{ 'app.shared.user.date_of_birth_is_required' }}</span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_invoicing' | translate }}"><i class="fa fa-map-marker"></i> </span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_invoicing' | translate }}"><i class="fa fa-map-marker"></i> </span>
|
||||
<input type="hidden"
|
||||
name="user[invoicing_profile_attributes][address_attributes][id]"
|
||||
ng-value="user.invoicing_profile.address.id" />
|
||||
@ -234,35 +234,35 @@
|
||||
class="form-control"
|
||||
id="user_address"
|
||||
ng-disabled="preventField['profile.address'] && user.invoicing_profile.address.address && !userForm['user[invoicing_profile_attributes][address_attributes][address]'].$dirty"
|
||||
placeholder="{{ 'address' | translate }}"/>
|
||||
placeholder="{{ 'app.shared.user.address' | translate }}"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-class="{'has-error': userForm['user[profile_attributes][phone]'].$dirty && userForm['user[profile_attributes][phone]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_reservation' | translate }}"><i class="fa fa-phone"></i> <span class="exponent" ng-show="phoneRequired"><i class="fa fa-asterisk" aria-hidden="true"></i></span></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_reservation' | translate }}"><i class="fa fa-phone"></i> <span class="exponent" ng-show="phoneRequired"><i class="fa fa-asterisk" aria-hidden="true"></i></span></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][phone]"
|
||||
ng-model="user.profile.phone"
|
||||
class="form-control"
|
||||
id="user_phone"
|
||||
placeholder="{{ 'phone_number' | translate }}"
|
||||
placeholder="{{ 'app.shared.user.phone_number' | translate }}"
|
||||
ng-disabled="preventField['profile.phone'] && user.profile.phone && !userForm['user[profile_attributes][phone]'].$dirty"
|
||||
ng-required="phoneRequired"/>
|
||||
</div>
|
||||
<span class="help-block" ng-show="userForm['user[profile_attributes][phone]'].$dirty && userForm['user[profile_attributes][phone]'].$error.required" translate>{{ 'phone_number_is_required' }}</span>
|
||||
<span class="help-block" ng-show="userForm['user[profile_attributes][phone]'].$dirty && userForm['user[profile_attributes][phone]'].$error.required" translate>{{ 'app.shared.user.phone_number_is_required' }}</span>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-class="{'has-error': userForm['user[profile_attributes][website]'].$dirty && userForm['user[profile_attributes][website]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_profile' | translate }}"><i class="fa fa-globe"></i> </span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}"><i class="fa fa-globe"></i> </span>
|
||||
<input type="url"
|
||||
name="user[profile_attributes][website]"
|
||||
ng-model="user.profile.website"
|
||||
class="form-control"
|
||||
id="user_website"
|
||||
ng-pattern="/^https?:\/\//"
|
||||
placeholder="{{ 'website' | translate }} (http://...)"
|
||||
placeholder="{{ 'app.shared.user.website' | translate }} (http://...)"
|
||||
ng-disabled="preventField['profile.website'] && user.profile.website && !userForm['user[profile_attributes][website]'].$dirty"/>
|
||||
</div>
|
||||
</div>
|
||||
@ -275,13 +275,13 @@
|
||||
ng-model="user.profile.job"
|
||||
class="form-control"
|
||||
id="user_job"
|
||||
placeholder="{{ 'job' | translate }}"
|
||||
placeholder="{{ 'app.shared.user.job' | translate }}"
|
||||
ng-disabled="preventField['profile.job'] && user.profile.job && !userForm['user[profile_attributes][job]'].$dirty"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="user_interest" class="help-cursor" title="{{ 'used_for_profile' | translate }}" translate>{{ 'interests' }}</label>
|
||||
<label for="user_interest" class="help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}" translate>{{ 'app.shared.user.interests' }}</label>
|
||||
<textarea name="user[profile_attributes][interest]"
|
||||
ng-model="user.profile.interest"
|
||||
rows="5"
|
||||
@ -292,7 +292,7 @@
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="user_software_mastered" class="help-cursor" title="{{ 'used_for_profile' | translate }}" translate>{{ 'CAD_softwares_mastered' }}</label>
|
||||
<label for="user_software_mastered" class="help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}" translate>{{ 'app.shared.user.CAD_softwares_mastered' }}</label>
|
||||
<textarea name="user[profile_attributes][software_mastered]"
|
||||
ng-model="user.profile.software_mastered"
|
||||
rows="5"
|
||||
@ -304,28 +304,28 @@
|
||||
|
||||
<!-- allow contact-->
|
||||
<div class="form-group">
|
||||
<label for="allowContact" class="help-cursor" title="{{ 'public_profile' | translate }}" translate>{{ 'i_authorize_Fablab_users_registered_on_the_site_to_contact_me' }}</label>
|
||||
<label for="allowContact" class="help-cursor" title="{{ 'app.shared.user.public_profile' | translate }}" translate>{{ 'app.shared.user.i_authorize_Fablab_users_registered_on_the_site_to_contact_me' }}</label>
|
||||
<input bs-switch
|
||||
ng-model="user.is_allow_contact"
|
||||
id="allowContact"
|
||||
type="checkbox"
|
||||
class="form-control"
|
||||
switch-on-text="{{ 'yes' | translate }}"
|
||||
switch-off-text="{{ 'no' | translate }}"
|
||||
switch-on-text="{{ 'app.shared.buttons.yes' | translate }}"
|
||||
switch-off-text="{{ 'app.shared.buttons.no' | translate }}"
|
||||
switch-animate="true"/>
|
||||
<input type="hidden" name="user[is_allow_contact]" value="{{user.is_allow_contact}}"/>
|
||||
</div>
|
||||
|
||||
<!-- allow receive newsletter -->
|
||||
<div class="form-group">
|
||||
<label for="allowNewsletter" translate>{{ 'i_accept_to_receive_information_from_the_fablab' }}</label>
|
||||
<label for="allowNewsletter" translate>{{ 'app.shared.user.i_accept_to_receive_information_from_the_fablab' }}</label>
|
||||
<input bs-switch
|
||||
ng-model="user.is_allow_newsletter"
|
||||
id="allowNewsletter"
|
||||
type="checkbox"
|
||||
class="form-control"
|
||||
switch-on-text="{{ 'yes' | translate }}"
|
||||
switch-off-text="{{ 'no' | translate }}"
|
||||
switch-on-text="{{ 'app.shared.buttons.yes' | translate }}"
|
||||
switch-off-text="{{ 'app.shared.buttons.no' | translate }}"
|
||||
switch-animate="true" />
|
||||
<input type="hidden" name="user[is_allow_newsletter]" value="{{user.is_allow_newsletter}}"/>
|
||||
</div>
|
||||
@ -333,7 +333,7 @@
|
||||
<div id="social" ng-init="social={}">
|
||||
<div class="form-group" ng-show="social.facebook || user.profile.facebook" ng-class="{'has-error': userForm['user[profile_attributes][facebook]'].$dirty && userForm['user[profile_attributes][facebook]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_profile' | translate }}"><i class="fa fa-facebook"></i></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}"><i class="fa fa-facebook"></i></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][facebook]"
|
||||
ng-model="user.profile.facebook"
|
||||
@ -348,7 +348,7 @@
|
||||
|
||||
<div class="form-group" ng-show="social.twitter || user.profile.twitter" ng-class="{'has-error': userForm['user[profile_attributes][twitter]'].$dirty && userForm['user[profile_attributes][twitter]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_profile' | translate }}"><i class="fa fa-twitter"></i></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}"><i class="fa fa-twitter"></i></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][twitter]"
|
||||
ng-model="user.profile.twitter"
|
||||
@ -363,7 +363,7 @@
|
||||
|
||||
<div class="form-group" ng-show="social.google_plus || user.profile.google_plus" ng-class="{'has-error': userForm['user[profile_attributes][google_plus]'].$dirty && userForm['user[profile_attributes][google_plus]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_profile' | translate }}"><i class="fa fa-google-plus"></i></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}"><i class="fa fa-google-plus"></i></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][google_plus]"
|
||||
ng-model="user.profile.google_plus"
|
||||
@ -378,7 +378,7 @@
|
||||
|
||||
<div class="form-group" ng-show="social.viadeo || user.profile.viadeo" ng-class="{'has-error': userForm['user[profile_attributes][viadeo]'].$dirty && userForm['user[profile_attributes][viadeo]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_profile' | translate }}"><i class="fa fa-viadeo"></i></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}"><i class="fa fa-viadeo"></i></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][viadeo]"
|
||||
ng-model="user.profile.viadeo"
|
||||
@ -393,7 +393,7 @@
|
||||
|
||||
<div class="form-group" ng-show="social.linkedin || user.profile.linkedin" ng-class="{'has-error': userForm['user[profile_attributes][linkedin]'].$dirty && userForm['user[profile_attributes][linkedin]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_profile' | translate }}"><i class="fa fa-linkedin"></i></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}"><i class="fa fa-linkedin"></i></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][linkedin]"
|
||||
ng-model="user.profile.linkedin"
|
||||
@ -408,7 +408,7 @@
|
||||
|
||||
<div class="form-group" ng-show="social.instagram || user.profile.instragram" ng-class="{'has-error': userForm['user[profile_attributes][instagram]'].$dirty && userForm['user[profile_attributes][instagram]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_profile' | translate }}"><i class="fa fa-instagram"></i></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}"><i class="fa fa-instagram"></i></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][instagram]"
|
||||
ng-model="user.profile.instagram"
|
||||
@ -423,7 +423,7 @@
|
||||
|
||||
<div class="form-group" ng-show="social.youtube || user.profile.youtube" ng-class="{'has-error': userForm['user[profile_attributes][youtube]'].$dirty && userForm['user[profile_attributes][youtube]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_profile' | translate }}"><i class="fa fa-youtube"></i></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}"><i class="fa fa-youtube"></i></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][youtube]"
|
||||
ng-model="user.profile.youtube"
|
||||
@ -438,7 +438,7 @@
|
||||
|
||||
<div class="form-group" ng-show="social.vimeo || user.profile.vimeo" ng-class="{'has-error': userForm['user[profile_attributes][vimeo]'].$dirty && userForm['user[profile_attributes][vimeo]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_profile' | translate }}"><i class="fa fa-vimeo"></i></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}"><i class="fa fa-vimeo"></i></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][vimeo]"
|
||||
ng-model="user.profile.vimeo"
|
||||
@ -453,7 +453,7 @@
|
||||
|
||||
<div class="form-group" ng-show="social.dailymotion || user.profile.dailymotion" ng-class="{'has-error': userForm['user[profile_attributes][dailymotion]'].$dirty && userForm['user[profile_attributes][dailymotion]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_profile' | translate }}"><img src="<%= asset_path('social/dailymotion.png') %>" alt="d" class="fa-img"/></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}"><img src="<%= asset_path('social/dailymotion.png') %>" alt="d" class="fa-img"/></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][dailymotion]"
|
||||
ng-model="user.profile.dailymotion"
|
||||
@ -469,7 +469,7 @@
|
||||
|
||||
<div class="form-group" ng-show="social.github || user.profile.github" ng-class="{'has-error': userForm['user[profile_attributes][github]'].$dirty && userForm['user[profile_attributes][github]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_profile' | translate }}"><i class="fa fa-github"></i></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}"><i class="fa fa-github"></i></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][github]"
|
||||
ng-model="user.profile.github"
|
||||
@ -484,7 +484,7 @@
|
||||
|
||||
<div class="form-group" ng-show="social.echosciences || user.profile.echosciences" ng-class="{'has-error': userForm['user[profile_attributes][echosciences]'].$dirty && userForm['user[profile_attributes][echosciences]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_profile' | translate }}"><img src="<%= asset_path('social/echosciences.png') %>" alt="d" class="fa-img"/></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}"><img src="<%= asset_path('social/echosciences.png') %>" alt="d" class="fa-img"/></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][echosciences]"
|
||||
ng-model="user.profile.echosciences"
|
||||
@ -499,7 +499,7 @@
|
||||
|
||||
<div class="form-group" ng-show="social.pinterest || user.profile.pinterest" ng-class="{'has-error': userForm['user[profile_attributes][pinterest]'].$dirty && userForm['user[profile_attributes][pinterest]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_profile' | translate }}"><i class="fa fa-pinterest"></i></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}"><i class="fa fa-pinterest"></i></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][pinterest]"
|
||||
ng-model="user.profile.pinterest"
|
||||
@ -514,7 +514,7 @@
|
||||
|
||||
<div class="form-group" ng-show="social.lastfm || user.profile.lastfm" ng-class="{'has-error': userForm['user[profile_attributes][lastfm]'].$dirty && userForm['user[profile_attributes][lastfm]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_profile' | translate }}"><i class="fa fa-lastfm"></i></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}"><i class="fa fa-lastfm"></i></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][lastfm]"
|
||||
ng-model="user.profile.lastfm"
|
||||
@ -529,7 +529,7 @@
|
||||
|
||||
<div class="form-group" ng-show="social.flickr || user.profile.flickr" ng-class="{'has-error': userForm['user[profile_attributes][flickr]'].$dirty && userForm['user[profile_attributes][flickr]'].$invalid}">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon help-cursor" title="{{ 'used_for_profile' | translate }}"><i class="fa fa-flickr"></i></span>
|
||||
<span class="input-group-addon help-cursor" title="{{ 'app.shared.user.used_for_profile' | translate }}"><i class="fa fa-flickr"></i></span>
|
||||
<input type="text"
|
||||
name="user[profile_attributes][flickr]"
|
||||
ng-model="user.profile.flickr"
|
||||
|
@ -1,10 +1,10 @@
|
||||
<div class="widget panel b-a m">
|
||||
<div class="panel-heading b-b small">
|
||||
<h3 class="panel-title" translate>{{ 'select_a_member' }}</h3>
|
||||
<h3 class="panel-title" translate>{{ 'app.shared.member_select.select_a_member' }}</h3>
|
||||
</div>
|
||||
<div class="widget-content no-bg auto wrapper">
|
||||
<ui-select ng-model="ctrl.member" on-select="updateMember()">
|
||||
<ui-select-match placeholder="{{ 'start_typing' | translate }}">
|
||||
<ui-select-match placeholder="{{ 'app.shared.member_select.start_typing' | translate }}">
|
||||
<span ng-bind="$select.selected.name"></span>
|
||||
</ui-select-match>
|
||||
<ui-select-choices repeat="m in matchingMembers" refresh="autoCompleteName($select.search)" refresh-delay="300">
|
||||
|
@ -6,6 +6,6 @@
|
||||
<p ng-bind-html="object.msg"></p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-info" ng-click="ok()" translate>{{ 'confirm' }}</button>
|
||||
<button class="btn btn-default" ng-click="cancel()" translate>{{ 'cancel' }}</button>
|
||||
<button class="btn btn-info" ng-click="ok()" translate>{{ 'app.shared.buttons.confirm' }}</button>
|
||||
<button class="btn btn-default" ng-click="cancel()" translate>{{ 'app.shared.buttons.cancel' }}</button>
|
||||
</div>
|
||||
|
@ -10,12 +10,11 @@
|
||||
<li>
|
||||
<a href class="about-link font-sbold text-sm" ng-click="goabout = !goabout" ui-sref="app.public.about" ng-show="!goabout">
|
||||
<span class="label label-theme rounded text-lg text-white m-r-sm font-ebold">?</span>
|
||||
{{ 'about_the_fablab' | translate:{ GENDER: nameGenre, NAME: fablabName } }}
|
||||
{{ 'app.public.common.about_the_fablab' | translate:{ GENDER: nameGenre, NAME: fablabName } }}
|
||||
</a>
|
||||
<a href class="about-link font-sbold text-sm" ng-click="goabout = !goabout" ui-sref="app.public.home" ng-show="goabout">
|
||||
<span class="label label-theme label-icon rounded text-lg text-white m-r-sm font-ebold"><i class="fa fa-caret-up" ng-show="goabout"></i></span>
|
||||
{{ 'return' | translate }}
|
||||
</div>
|
||||
{{ 'app.public.common.return' | translate }}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
@ -34,20 +33,20 @@
|
||||
</span>
|
||||
</a>
|
||||
<ul class="uib-dropdown-menu animated fadeInRight">
|
||||
<li><a ui-sref="app.logged.dashboard.profile" translate>{{ 'my_profile' }}</a></li>
|
||||
<li><a ui-sref="app.logged.dashboard.settings" translate>{{ 'my_settings' }}</a></li>
|
||||
<li><a ui-sref="app.logged.dashboard.projects" translate>{{ 'my_projects' }}</a></li>
|
||||
<li><a ui-sref="app.logged.dashboard.trainings" translate>{{ 'my_trainings' }}</a></li>
|
||||
<li><a ui-sref="app.logged.dashboard.events" translate>{{ 'my_events' }}</a></li>
|
||||
<li><a ui-sref="app.logged.dashboard.invoices" ng-hide="fablabWithoutInvoices" translate>{{ 'my_invoices' }}</a></li>
|
||||
<li><a ui-sref="app.logged.dashboard.wallet" translate>{{ 'my_wallet' }}</a></li>
|
||||
<li><a ui-sref="app.logged.dashboard.profile" translate>{{ 'app.public.common.my_profile' }}</a></li>
|
||||
<li><a ui-sref="app.logged.dashboard.settings" translate>{{ 'app.public.common.my_settings' }}</a></li>
|
||||
<li><a ui-sref="app.logged.dashboard.projects" translate>{{ 'app.public.common.my_projects' }}</a></li>
|
||||
<li><a ui-sref="app.logged.dashboard.trainings" translate>{{ 'app.public.common.my_trainings' }}</a></li>
|
||||
<li><a ui-sref="app.logged.dashboard.events" translate>{{ 'app.public.common.my_events' }}</a></li>
|
||||
<li><a ui-sref="app.logged.dashboard.invoices" ng-hide="fablabWithoutInvoices" translate>{{ 'app.public.common.my_invoices' }}</a></li>
|
||||
<li><a ui-sref="app.logged.dashboard.wallet" translate>{{ 'app.public.common.my_wallet' }}</a></li>
|
||||
|
||||
<li class="divider"></li>
|
||||
<li><a class="text-black pointer" ng-click="logout($event)"><i class="fa fa-power-off"></i> {{ 'sign_out' | translate }}</a></li>
|
||||
<li><a class="text-black pointer" ng-click="logout($event)"><i class="fa fa-power-off"></i> {{ 'app.public.common.sign_out' | translate }}</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li ng-if="!isAuthenticated()"><a class="font-sbold label text-md pointer" ng-click="signup($event)"><i class="fa fa-rocket"></i> {{ 'sign_up' | translate }}</a></li>
|
||||
<li ng-if="!isAuthenticated()"><a class="font-sbold label text-md pointer" ng-click="signup($event)"><i class="fa fa-rocket"></i> {{ 'app.public.common.sign_up' | translate }}</a></li>
|
||||
<li ng-if="!isAuthenticated()">
|
||||
<a class="font-sbold label text-md pointer" ng-click="login($event)"><i class="fa fa-sign-in"></i> {{ 'sign_in' | translate }}</a>
|
||||
<a class="font-sbold label text-md pointer" ng-click="login($event)"><i class="fa fa-sign-in"></i> {{ 'app.public.common.sign_in' | translate }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -28,11 +28,12 @@
|
||||
<div class="col-lg-7 profile-top-infos">
|
||||
<div class="text-xl font-ebold upper">{{user.username}}</div>
|
||||
<small class="font-bold">{{user.name}}</small>
|
||||
<small class="text-xs upper font-thin private-profile" ng-show="!user.is_allow_contact"><i class="fa fa-lock" aria-hidden="true"></i> {{ 'private_profile' | translate }}</small>
|
||||
<small class="text-xs upper font-thin private-profile" ng-show="!user.is_allow_contact"><i class="fa fa-lock" aria-hidden="true"></i> {{ 'app.shared.public_profile.private_profile' | translate }}</small>
|
||||
<div class="m-t">
|
||||
<small translate>{{ 'last_activity_' }}</small>
|
||||
<div class="text-lt font-bold" ng-if="user.last_sign_in_at">{{ '_on_' | translate }} {{user.last_sign_in_at | amDateFormat: 'LL'}}</div>
|
||||
<small translate>{{ 'email_address' }}</small>
|
||||
<div ng-show="user.last_sign_in_at">
|
||||
<small translate translate-values="{DATE:(user.last_sign_in_at | amDateFormat: 'LL')}">{{ 'app.shared.public_profile.last_activity_html' }}</small>
|
||||
</div>
|
||||
<small translate>{{ 'app.shared.public_profile.email_address' }}</small>
|
||||
<div class="text-lt font-bold break-word">{{user.email}}</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -52,11 +53,11 @@
|
||||
<div class="wrapper m-t-xl m-b">
|
||||
<div class="row m-b">
|
||||
<div class="col-xs-5 text-right">
|
||||
<span class="font-bold bio-title" translate>{{ 'interests' }}</span>
|
||||
<span class="font-bold bio-title" translate>{{ 'app.shared.public_profile.interests' }}</span>
|
||||
<div class="m-b m-t-sm">{{user.profile.interest}}</div>
|
||||
</div>
|
||||
<div class="col-xs-offset-2 col-xs-5">
|
||||
<span class="font-bold bio-title" translate>{{ 'CAD_softwares_mastered' }}</span>
|
||||
<span class="font-bold bio-title" translate>{{ 'app.shared.public_profile.CAD_softwares_mastered' }}</span>
|
||||
<div class="m-t-sm">{{user.profile.software_mastered}}</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -70,23 +71,23 @@
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="widget panel b-a m ">
|
||||
<div class="panel-heading b-b">
|
||||
<h1 class="red text-u-c" translate>{{ 'trainings' }}</h1>
|
||||
<h1 class="red text-u-c" translate>{{ 'app.shared.public_profile.trainings' }}</h1>
|
||||
<!-- <h3 class="text-u-c">Formations</h3> -->
|
||||
<ul class="list-unstyled" ng-if="user.training_reservations.length > 0 || user.trainings.length > 0">
|
||||
<li ng-repeat="r in user.training_reservations | trainingReservationsFilter:'future'">
|
||||
{{r.reservable.name}} - <span class="label label-info text-white" translate>{{ 'to_come' }}</span>
|
||||
{{r.reservable.name}} - <span class="label label-info text-white" translate>{{ 'app.shared.public_profile.to_come' }}</span>
|
||||
</li>
|
||||
<li ng-repeat="t in user.trainings">
|
||||
{{t.name}} - <span class="label label-success text-white" translate>{{ 'approved' }}</span>
|
||||
{{t.name}} - <span class="label label-success text-white" translate>{{ 'app.shared.public_profile.approved' }}</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div ng-if="user.training_reservations.length == 0 && user.trainings.length == 0" translate>{{ 'no_trainings' }}</div>
|
||||
<div ng-if="user.training_reservations.length == 0 && user.trainings.length == 0" translate>{{ 'app.shared.public_profile.no_trainings' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="widget panel b-a m ">
|
||||
<div class="panel-heading b-b">
|
||||
<h1 class="red text-u-c m-b" translate>{{ 'projects' }}</h1>
|
||||
<h1 class="red text-u-c m-b" translate>{{ 'app.shared.public_profile.projects' }}</h1>
|
||||
<div ng-if="user.all_projects.length > 0" class="row m-t">
|
||||
<a class="col-xs-12 col-sm-6 col-md-6 col-lg-6" ng-repeat="project in user.all_projects" ui-sref="app.public.projects_show({id:project.slug})" style="display: block;">
|
||||
<div class="card card-project">
|
||||
@ -104,13 +105,13 @@
|
||||
|
||||
<div class="text-center">
|
||||
<span class="m-l-sm label label-success text-white">{{project.author_id == user.id ? 'author' : 'collaborator' | translate}}</span>
|
||||
<span class="badge" ng-if="project.state == 'draft'" translate>{{ 'rough_draft' }}</span>
|
||||
<span class="badge" ng-if="project.state == 'draft'" translate>{{ 'app.shared.public_profile.rough_draft' }}</span>
|
||||
</div>
|
||||
|
||||
<div class="card-overlay">
|
||||
<div class="btn-group">
|
||||
<div class="btn btn-default" ng-click="showProject(project)">
|
||||
{{ 'consult' | translate }}
|
||||
{{ 'app.shared.buttons.consult' | translate }}
|
||||
</div>
|
||||
<div class="btn btn-default" ui-sref="app.logged.projects_edit({id:project.id})" ng-if="isAuthorized('admin')">
|
||||
<i class="fa fa-edit"></i>
|
||||
@ -122,7 +123,7 @@
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<div ng-if="user.all_projects.length == 0" translate>{{ 'no_projects' }}</div>
|
||||
<div ng-if="user.all_projects.length == 0" translate>{{ 'app.shared.public_profile.no_projects' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -7,13 +7,13 @@
|
||||
</div>
|
||||
<div class="col-xs-10 col-sm-10 col-md-8 b-l b-r-md">
|
||||
<section class="heading-title">
|
||||
<h1 translate>{{ 'spaces_list.the_spaces' }}</h1>
|
||||
<h1 translate>{{ 'app.public.spaces_list.the_spaces' }}</h1>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md" ng-if="isAuthorized('admin')">
|
||||
<section class="heading-actions wrapper">
|
||||
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs" ui-sref="app.admin.space_new" role="button" translate>{{ 'spaces_list.add_a_space' }}</a>
|
||||
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs" ui-sref="app.admin.space_new" role="button" translate>{{ 'app.public.spaces_list.add_a_space' }}</a>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
@ -26,7 +26,7 @@
|
||||
<div class="input-group col-md-3 m-l-lg m-b">
|
||||
<span class="input-group-addon"><i class="fa fa-filter"></i></span>
|
||||
<select ng-model="spaceFiltering" class="form-control">
|
||||
<option ng-repeat="status in filterDisabled" value="{{status}}" translate>{{ 'spaces_list.status_'+status }}</option>
|
||||
<option ng-repeat="status in filterDisabled" value="{{status}}" translate>{{ 'app.public.spaces_list.status_'+status }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
@ -49,13 +49,13 @@
|
||||
<div class="col-sm-6 b-r no-padder">
|
||||
<div class="btn btn-default btn-block no-b padder-v red" ng-click="reserveSpace(space, $event)" ng-hide="space.disabled">
|
||||
<i class="fa fa-bookmark m-r-xs"></i>
|
||||
<span class="hidden-sm" translate>{{ 'spaces_list.book' }}</span>
|
||||
<span class="hidden-sm" translate>{{ 'app.public.spaces_list.book' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="no-padder" ng-class="{'col-sm-6': !space.disabled}">
|
||||
<div class="btn btn-default btn-block padder-v no-b red" ng-click="showSpace(space)">
|
||||
<i class="fa fa-eye m-r-xs"></i>
|
||||
<span class="hidden-sm" translate>{{ 'consult' }}</span>
|
||||
<span class="hidden-sm" translate>{{ 'app.shared.buttons.consult' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -15,9 +15,9 @@
|
||||
|
||||
<div class="col-xs-12 col-sm-12 col-md-4 b-t hide-b-md">
|
||||
<section class="heading-actions wrapper">
|
||||
<a ng-click="reserveSpace($event)" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs" ng-if="!isAuthorized('admin')" translate>{{ 'space_show.book_this_space' }}</a>
|
||||
<a ng-click="reserveSpace($event)" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs" ng-if="!isAuthorized('admin')" translate>{{ 'app.public.space_show.book_this_space' }}</a>
|
||||
|
||||
<a ui-sref="app.admin.space_edit({id:space.slug})" ng-if="isAuthorized('admin')" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs"><i class="fa fa-edit"></i> {{ 'edit' | translate }}</a>
|
||||
<a ui-sref="app.admin.space_edit({id:space.slug})" ng-if="isAuthorized('admin')" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs"><i class="fa fa-edit"></i> {{ 'app.shared.buttons.edit' | translate }}</a>
|
||||
<a ng-click="deleteSpace($event)" ng-if="isAuthorized('admin')" class="btn btn-lg btn-danger b-2x rounded no-b m-t-xs"><i class="fa fa-trash-o"></i></a>
|
||||
|
||||
</section>
|
||||
@ -44,7 +44,7 @@
|
||||
|
||||
<div class="widget panel b-a m m-t-lg">
|
||||
<div class="panel-heading b-b small">
|
||||
<h3 translate>{{ 'space_show.characteristics' }}</h3>
|
||||
<h3 translate>{{ 'app.public.space_show.characteristics' }}</h3>
|
||||
</div>
|
||||
<div class="widget-content no-bg wrapper">
|
||||
<h3></h3>
|
||||
@ -55,7 +55,7 @@
|
||||
<section class="widget panel b-a m" ng-if="space.space_files_attributes">
|
||||
<div class="panel-heading b-b">
|
||||
<span class="badge bg-warning pull-right">{{space.space_files_attributes.length}}</span>
|
||||
<h3 translate>{{ 'space_show.files_to_download' }}</h3>
|
||||
<h3 translate>{{ 'app.public.space_show.files_to_download' }}</h3>
|
||||
</div>
|
||||
|
||||
<ul class="widget-content list-group list-group-lg no-bg auto">
|
||||
@ -67,7 +67,7 @@
|
||||
|
||||
<section class="widget panel b-a m" ng-if="space.space_projects">
|
||||
<div class="panel-heading b-b">
|
||||
<h3 translate>{{ 'space_show.projects_using_the_space' }}</h3>
|
||||
<h3 translate>{{ 'app.public.space_show.projects_using_the_space' }}</h3>
|
||||
</div>
|
||||
|
||||
<ul class="widget-content list-group list-group-lg no-bg auto">
|
||||
|
@ -7,7 +7,7 @@
|
||||
</div>
|
||||
<div class="col-xs-10 col-sm-10 col-md-8 b-l b-r-md">
|
||||
<section class="heading-title">
|
||||
<h1 translate>{{ 'the_trainings' }}</h1>
|
||||
<h1 translate>{{ 'app.public.trainings_list.the_trainings' }}</h1>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
@ -36,12 +36,12 @@
|
||||
<div class="text-center clearfix">
|
||||
<div class="col-sm-6 b-r no-padder">
|
||||
<div class="btn btn-default btn-block no-b padder-v red" ng-click="reserveTraining(training, $event)">
|
||||
<i class="fa fa-bookmark"></i> {{ 'book' | translate }}
|
||||
<i class="fa fa-bookmark"></i> {{ 'app.public.trainings_list.book' | translate }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 no-padder">
|
||||
<div class="btn btn-default btn-block padder-v no-b red" ng-click="showTraining(training)">
|
||||
<i class="fa fa-eye"></i> {{ 'consult' | translate }}
|
||||
<i class="fa fa-eye"></i> {{ 'app.shared.buttons.consult' | translate }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -15,9 +15,9 @@
|
||||
|
||||
<div class="col-xs-12 col-sm-12 col-md-4 b-t hide-b-md">
|
||||
<section class="heading-actions wrapper">
|
||||
<a ng-click="reserveTraining(training, $event)" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs" ng-if="!isAuthorized('admin')" translate>{{ 'book_this_training' }}</a>
|
||||
<a ng-click="reserveTraining(training, $event)" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs" ng-if="!isAuthorized('admin')" translate>{{ 'app.public.training_show.book_this_training' }}</a>
|
||||
|
||||
<a ui-sref="app.admin.trainings_edit({id: training.id})" ng-if="isAuthorized('admin')" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs"><i class="fa fa-edit"></i> {{ 'edit' | translate }}</a>
|
||||
<a ui-sref="app.admin.trainings_edit({id: training.id})" ng-if="isAuthorized('admin')" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs"><i class="fa fa-edit"></i> {{ 'app.shared.buttons.edit' | translate }}</a>
|
||||
<a ng-click="delete(training)" ng-if="isAuthorized('admin')" class="btn btn-lg btn-danger b-2x rounded no-b m-t-xs"><i class="fa fa-trash-o"></i></a>
|
||||
</section>
|
||||
</div>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div class="col-sm-4 text-center">
|
||||
<h4 translate ng-if="view !== 'member_edit'">{{'your_wallet_amount'}}</h4>
|
||||
<h4 translate ng-if="view === 'member_edit'">{{'wallet_amount'}}</h4>
|
||||
<h4 translate ng-if="view !== 'member_edit'">{{'app.shared.wallet.your_wallet_amount'}}</h4>
|
||||
<h4 translate ng-if="view === 'member_edit'">{{'app.shared.wallet.wallet_amount'}}</h4>
|
||||
<div class="wallet-amount-container">
|
||||
<div class="wallet-amount">{{wallet.amount | currency}}</div>
|
||||
</div>
|
||||
|
@ -2,18 +2,18 @@
|
||||
<table class="table" ng-if="transactions.length > 0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width:25%" translate>{{ 'date' }}</th>
|
||||
<th style="width:25%" translate>{{ 'operation' }}</th>
|
||||
<th style="width:25%" translate>{{ 'operator' }}</th>
|
||||
<th style="width:25%" translate>{{ 'amount' }}</th>
|
||||
<th style="width:25%" translate>{{ 'app.shared.wallet.date' }}</th>
|
||||
<th style="width:25%" translate>{{ 'app.shared.wallet.operation' }}</th>
|
||||
<th style="width:25%" translate>{{ 'app.shared.wallet.operator' }}</th>
|
||||
<th style="width:25%" translate>{{ 'app.shared.wallet.amount' }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="t in transactions">
|
||||
<td>{{ ::t.created_at | amDateFormat:'L' }}</td>
|
||||
<td>
|
||||
<span ng-if="t.transaction_type == 'credit'" translate>{{ 'credit' }}</span>
|
||||
<span ng-if="t.transaction_type == 'debit'" translate>{{ 'debit' }}</span>
|
||||
<span ng-if="t.transaction_type == 'credit'" translate>{{ 'app.shared.wallet.credit' }}</span>
|
||||
<span ng-if="t.transaction_type == 'debit'" translate>{{ 'app.shared.wallet.debit' }}</span>
|
||||
<a ng-href="api/invoices/{{t.invoice.id}}/download" target="_blank" ng-if="t.invoice.id">
|
||||
{{::t.invoice.reference}}
|
||||
</a>
|
||||
@ -27,5 +27,5 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p ng-if="transactions.length == 0" translate>{{ 'no_transactions_for_now' }}</p>
|
||||
<p ng-if="transactions.length == 0" translate>{{ 'app.shared.wallet.no_transactions_for_now' }}</p>
|
||||
</div>
|
||||
|
@ -6,11 +6,13 @@ class API::TranslationsController < API::ApiController
|
||||
|
||||
|
||||
def show
|
||||
@translations = I18n.t params[:state]
|
||||
if @translations.class.name == String.name && @translations.start_with?('translation missing')
|
||||
render json: { error: @translations }, status: :unprocessable_entity
|
||||
translations = I18n.t params[:state]
|
||||
if translations.class.name == String.name && translations.start_with?('translation missing')
|
||||
render json: { error: translations }, status: :unprocessable_entity
|
||||
else
|
||||
render json: @translations, status: :ok
|
||||
path = params[:state]
|
||||
res = path.split('.').reverse.reduce(translations) { |r, e| { e.to_sym => r } }
|
||||
render json: res, status: :ok
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -13,102 +13,100 @@ fr:
|
||||
|
||||
calendar:
|
||||
# gestion des créneaux machines et formations
|
||||
admin_calendar:
|
||||
calendar_management: "Gestion du calendrier"
|
||||
trainings: "Formations"
|
||||
machines: "Machines"
|
||||
spaces: "Espaces"
|
||||
events: "Évènements"
|
||||
availabilities: "Disponibilités"
|
||||
availabilities_notice: "Exporter dans un classeur Excel tous les créneaux ouverts à la réservation et leurs taux d'occupation."
|
||||
ongoing_reservations: "Réservations en cours"
|
||||
no_reservations: "Aucune réservation"
|
||||
confirmation_required: "Confirmation requise"
|
||||
do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION: "Êtes-vous {GENDER, select, female{sûre} other{sûr}} de vouloir annuler la réservation de {USER}, le {DATE} à {TIME}, concernant {RESERVATION} ?"
|
||||
reservation_was_successfully_cancelled: "La réservation a bien été annulée."
|
||||
reservation_cancellation_failed: "L'annulation de la réservation a échouée."
|
||||
unable_to_remove_the_last_machine_of_the_slot_delete_the_slot_rather: "Impossible de supprimer la dernière machine du créneau. Supprimez plutôt le créneau."
|
||||
do_you_really_want_to_remove_MACHINE_from_this_slot: "Êtes-vous {GENDER, select, female{sûre} other{sûr}} de vouloir retirer \"{MACHINE}\" de ce créneau ?"
|
||||
this_will_prevent_any_new_reservation_on_this_slot_but_wont_cancel_those_existing: "Ceci interdira toute nouvelle réservation de cette machine sur ce créneau mais n'annulera pas les réservation existantes."
|
||||
beware_this_cannot_be_reverted: "Attention : ceci n'est pas réversible."
|
||||
the_machine_was_successfully_removed_from_the_slot: "La machine a bien été supprimée du créneau."
|
||||
deletion_failed: "La suppression a échouée."
|
||||
DATE_slot: "Créneau du {DATE} :"
|
||||
what_kind_of_slot_do_you_want_to_create: "Quel type de créneau voulez-vous créer ?"
|
||||
training: "Formation"
|
||||
machine: "Machine"
|
||||
space: "Espace"
|
||||
next: "Suivant >"
|
||||
previous: "< Précédent"
|
||||
select_some_machines: "Sélectionnez des machines"
|
||||
number_of_tickets: "Nombre de places : "
|
||||
adjust_the_opening_hours: "Ajuster l'horaire"
|
||||
to_time: "à" # context: time. eg. "from 18:00 to 21:00"
|
||||
restrict_this_slot_with_labels_optional: "Restreindre ce créneau avec des étiquettes (optionnel)"
|
||||
recurrence: "Récurrence"
|
||||
enabled: "Activée"
|
||||
period: "Période"
|
||||
week: "Semaine"
|
||||
month: "Mois"
|
||||
number_of_periods: "Nombre de périodes"
|
||||
end_date: "Date de fin"
|
||||
summary: "Récapitulatif"
|
||||
select_period: "Veuillez choisir une période pour la récurrence"
|
||||
select_nb_period: "Veuillez choisir un nombre de périodes pour la récurrence"
|
||||
select_end_date: "Veuillez choisir la date de dernière occurrence"
|
||||
about_to_create: "Vous vous apprêtez à créer {NUMBER, plural, one{le créneau} other{les créneaux}} {TYPE, select, machines{machine} training{formation} space{espace} other{autre}} suivant :"
|
||||
reservable: "Réservable(s) :"
|
||||
labels: "Étiquette(s) :"
|
||||
none: "Aucune"
|
||||
slot_successfully_deleted: "Le créneau {START} - {END} a bien été supprimé"
|
||||
slots_deleted: "Le créneau du {START}, ainsi {COUNT, plural, =1{qu'un autre créneau} other{que {COUNT} autres créneaux}}}, ont été supprimés"
|
||||
unable_to_delete_the_slot: "Le créneau {START} - {END} n'a pu être supprimé, probablement car il est déjà réservé par un membre"
|
||||
slots_not_deleted: "Sur {TOTAL} créneaux, {COUNT, plural, =1{un n'a pas pu être supprimé} other{{COUNT} n'ont pas pu être supprimés}}. Il est possible que des réservations existent sur {COUNT, plural, =1{celui-ci} other{ceux-ci}}."
|
||||
you_should_select_at_least_a_machine: "Vous devriez sélectionner au moins une machine pour ce créneau."
|
||||
export_is_running_you_ll_be_notified_when_its_ready: "L'export est en cours. Vous serez notifié lorsqu'il sera prêt."
|
||||
actions: "Actions"
|
||||
block_reservations: "Bloquer les réservations"
|
||||
do_you_really_want_to_block_this_slot: "Êtes vous sur de vouloir bloquer les nouvelles réservations sur ce créneau ? Il deviendra alors invisible pour les utilisateurs."
|
||||
locking_success: "Le créneau a bien été verrouillé, il n'apparaitra plus dans le calendrier utilisateur"
|
||||
locking_failed: "Une erreur est survenue. Le verrouillage du créneau a échoué"
|
||||
allow_reservations: "Autoriser les réservations"
|
||||
do_you_really_want_to_allow_reservations: "Êtes vous sur de vouloir autoriser de nouveau la prise de réservations sur ce créneau ? Il deviendra alors visible pour les utilisateurs."
|
||||
unlocking_success: "Le créneau a bien été déverrouillé, il apparaîtra de nouveau dans le calendrier utilisateur"
|
||||
unlocking_failed: "Une erreur est survenue. Le déverrouillage du créneau a échoué"
|
||||
reservations_locked: "Réservations bloquées"
|
||||
unlockable_because_reservations: "Impossible de bloquer les réservations sur ce créneau car il existe des réservations non annulées sur celui-ci."
|
||||
delete_slot: "Supprimer le créneau"
|
||||
do_you_really_want_to_delete_this_slot: "Êtes vous sur de vouloir supprimer ce créneau ?"
|
||||
delete_recurring_slot: "Vous êtes sur le point de supprimer un créneau périodique. Que voulez-vous supprimer ?"
|
||||
delete_this_slot: "Uniquement ce créneau"
|
||||
delete_this_and_next: "Ce créneau et tous les suivants"
|
||||
delete_all: "Tous les créneaux"
|
||||
event_in_the_past: "Impossible de créer un créneau dans le passé."
|
||||
edit_event: "Modifier l'évènement"
|
||||
view_reservations: "Voir les réservations"
|
||||
legend: "Légende"
|
||||
calendar_management: "Gestion du calendrier"
|
||||
trainings: "Formations"
|
||||
machines: "Machines"
|
||||
spaces: "Espaces"
|
||||
events: "Évènements"
|
||||
availabilities: "Disponibilités"
|
||||
availabilities_notice: "Exporter dans un classeur Excel tous les créneaux ouverts à la réservation et leurs taux d'occupation."
|
||||
ongoing_reservations: "Réservations en cours"
|
||||
no_reservations: "Aucune réservation"
|
||||
confirmation_required: "Confirmation requise"
|
||||
do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION: "Êtes-vous {GENDER, select, female{sûre} other{sûr}} de vouloir annuler la réservation de {USER}, le {DATE} à {TIME}, concernant {RESERVATION} ?"
|
||||
reservation_was_successfully_cancelled: "La réservation a bien été annulée."
|
||||
reservation_cancellation_failed: "L'annulation de la réservation a échouée."
|
||||
unable_to_remove_the_last_machine_of_the_slot_delete_the_slot_rather: "Impossible de supprimer la dernière machine du créneau. Supprimez plutôt le créneau."
|
||||
do_you_really_want_to_remove_MACHINE_from_this_slot: "Êtes-vous {GENDER, select, female{sûre} other{sûr}} de vouloir retirer \"{MACHINE}\" de ce créneau ?"
|
||||
this_will_prevent_any_new_reservation_on_this_slot_but_wont_cancel_those_existing: "Ceci interdira toute nouvelle réservation de cette machine sur ce créneau mais n'annulera pas les réservation existantes."
|
||||
beware_this_cannot_be_reverted: "Attention : ceci n'est pas réversible."
|
||||
the_machine_was_successfully_removed_from_the_slot: "La machine a bien été supprimée du créneau."
|
||||
deletion_failed: "La suppression a échouée."
|
||||
DATE_slot: "Créneau du {DATE} :"
|
||||
what_kind_of_slot_do_you_want_to_create: "Quel type de créneau voulez-vous créer ?"
|
||||
training: "Formation"
|
||||
machine: "Machine"
|
||||
space: "Espace"
|
||||
next: "Suivant >"
|
||||
previous: "< Précédent"
|
||||
select_some_machines: "Sélectionnez des machines"
|
||||
number_of_tickets: "Nombre de places : "
|
||||
adjust_the_opening_hours: "Ajuster l'horaire"
|
||||
to_time: "à" # context: time. eg. "from 18:00 to 21:00"
|
||||
restrict_this_slot_with_labels_optional: "Restreindre ce créneau avec des étiquettes (optionnel)"
|
||||
recurrence: "Récurrence"
|
||||
enabled: "Activée"
|
||||
period: "Période"
|
||||
week: "Semaine"
|
||||
month: "Mois"
|
||||
number_of_periods: "Nombre de périodes"
|
||||
end_date: "Date de fin"
|
||||
summary: "Récapitulatif"
|
||||
select_period: "Veuillez choisir une période pour la récurrence"
|
||||
select_nb_period: "Veuillez choisir un nombre de périodes pour la récurrence"
|
||||
select_end_date: "Veuillez choisir la date de dernière occurrence"
|
||||
about_to_create: "Vous vous apprêtez à créer {NUMBER, plural, one{le créneau} other{les créneaux}} {TYPE, select, machines{machine} training{formation} space{espace} other{autre}} suivant :"
|
||||
reservable: "Réservable(s) :"
|
||||
labels: "Étiquette(s) :"
|
||||
none: "Aucune"
|
||||
slot_successfully_deleted: "Le créneau {START} - {END} a bien été supprimé"
|
||||
slots_deleted: "Le créneau du {START}, ainsi {COUNT, plural, =1{qu'un autre créneau} other{que {COUNT} autres créneaux}}}, ont été supprimés"
|
||||
unable_to_delete_the_slot: "Le créneau {START} - {END} n'a pu être supprimé, probablement car il est déjà réservé par un membre"
|
||||
slots_not_deleted: "Sur {TOTAL} créneaux, {COUNT, plural, =1{un n'a pas pu être supprimé} other{{COUNT} n'ont pas pu être supprimés}}. Il est possible que des réservations existent sur {COUNT, plural, =1{celui-ci} other{ceux-ci}}."
|
||||
you_should_select_at_least_a_machine: "Vous devriez sélectionner au moins une machine pour ce créneau."
|
||||
export_is_running_you_ll_be_notified_when_its_ready: "L'export est en cours. Vous serez notifié lorsqu'il sera prêt."
|
||||
actions: "Actions"
|
||||
block_reservations: "Bloquer les réservations"
|
||||
do_you_really_want_to_block_this_slot: "Êtes vous sur de vouloir bloquer les nouvelles réservations sur ce créneau ? Il deviendra alors invisible pour les utilisateurs."
|
||||
locking_success: "Le créneau a bien été verrouillé, il n'apparaitra plus dans le calendrier utilisateur"
|
||||
locking_failed: "Une erreur est survenue. Le verrouillage du créneau a échoué"
|
||||
allow_reservations: "Autoriser les réservations"
|
||||
do_you_really_want_to_allow_reservations: "Êtes vous sur de vouloir autoriser de nouveau la prise de réservations sur ce créneau ? Il deviendra alors visible pour les utilisateurs."
|
||||
unlocking_success: "Le créneau a bien été déverrouillé, il apparaîtra de nouveau dans le calendrier utilisateur"
|
||||
unlocking_failed: "Une erreur est survenue. Le déverrouillage du créneau a échoué"
|
||||
reservations_locked: "Réservations bloquées"
|
||||
unlockable_because_reservations: "Impossible de bloquer les réservations sur ce créneau car il existe des réservations non annulées sur celui-ci."
|
||||
delete_slot: "Supprimer le créneau"
|
||||
do_you_really_want_to_delete_this_slot: "Êtes vous sur de vouloir supprimer ce créneau ?"
|
||||
delete_recurring_slot: "Vous êtes sur le point de supprimer un créneau périodique. Que voulez-vous supprimer ?"
|
||||
delete_this_slot: "Uniquement ce créneau"
|
||||
delete_this_and_next: "Ce créneau et tous les suivants"
|
||||
delete_all: "Tous les créneaux"
|
||||
event_in_the_past: "Impossible de créer un créneau dans le passé."
|
||||
edit_event: "Modifier l'évènement"
|
||||
view_reservations: "Voir les réservations"
|
||||
legend: "Légende"
|
||||
|
||||
icalendar:
|
||||
icalendar:
|
||||
icalendar_import: "Import iCalendar"
|
||||
intro: "Fab-manager vous permet d'importer automatiquement des évènements de calendrier, au format iCalendar RFC 5545, depuis des URL externes. Ces URL seront synchronisée toutes les nuits et les évènements seront affichés dans le calendrier publique."
|
||||
new_import: "Nouvel import ICS"
|
||||
color: "Couleur"
|
||||
text_color: "Couleur du texte"
|
||||
url: "URL"
|
||||
name: "Nom"
|
||||
example: "Exemple"
|
||||
display: "Affichage"
|
||||
hide_text: "Cacher le texte"
|
||||
hidden: "Caché"
|
||||
shown: "Affiché"
|
||||
create_error: "Impossible de créer l'import iCalendar. Veuillez réessayer ultérieurement"
|
||||
delete_failed: "Impossible de supprimer l'import iCalendar. Veuillez réessayer ultérieurement"
|
||||
refresh: "Mise à jour en cours..."
|
||||
sync_failed: "Impossible de synchroniser l'URL. Veuillez réessayer ultérieurement"
|
||||
confirmation_required: "Confirmation requise"
|
||||
confirm_delete_import: "Êtes-vous sur de vouloir supprimer cet import iCalendar ?"
|
||||
delete_success: "L'import iCalendar a bien été supprimé"
|
||||
icalendar_import: "Import iCalendar"
|
||||
intro: "Fab-manager vous permet d'importer automatiquement des évènements de calendrier, au format iCalendar RFC 5545, depuis des URL externes. Ces URL seront synchronisée toutes les nuits et les évènements seront affichés dans le calendrier publique."
|
||||
new_import: "Nouvel import ICS"
|
||||
color: "Couleur"
|
||||
text_color: "Couleur du texte"
|
||||
url: "URL"
|
||||
name: "Nom"
|
||||
example: "Exemple"
|
||||
display: "Affichage"
|
||||
hide_text: "Cacher le texte"
|
||||
hidden: "Caché"
|
||||
shown: "Affiché"
|
||||
create_error: "Impossible de créer l'import iCalendar. Veuillez réessayer ultérieurement"
|
||||
delete_failed: "Impossible de supprimer l'import iCalendar. Veuillez réessayer ultérieurement"
|
||||
refresh: "Mise à jour en cours..."
|
||||
sync_failed: "Impossible de synchroniser l'URL. Veuillez réessayer ultérieurement"
|
||||
confirmation_required: "Confirmation requise"
|
||||
confirm_delete_import: "Êtes-vous sur de vouloir supprimer cet import iCalendar ?"
|
||||
delete_success: "L'import iCalendar a bien été supprimé"
|
||||
|
||||
project_elements:
|
||||
# gestion des éléments constituant les projets
|
||||
@ -122,16 +120,21 @@ fr:
|
||||
|
||||
trainings:
|
||||
# suivre et surveiller les formations
|
||||
training: "Formation"
|
||||
trainings_monitoring: "Suivi formations"
|
||||
trainings: "Formations"
|
||||
add_a_new_training: "Ajouter une nouvelle formation"
|
||||
name: "Nom"
|
||||
associated_machines: "Machines associées"
|
||||
number_of_tickets: "Nombre de places"
|
||||
select_a_training: "Sélectionnez une formation"
|
||||
training: "Formation"
|
||||
date: "Date"
|
||||
year_NUMBER: "Année {NUMBER}"
|
||||
month_of_NAME: "Mois de {NAME}"
|
||||
NUMBER_reservation: "{NUMBER} {NUMBER, plural, =0{réservation} one{réservation} other{réservations}}"
|
||||
none: "Aucune"
|
||||
training_validation: "Validation formation"
|
||||
training_of_the_ : "Formation du " # context: date. eg. "training of the september 1st 2012"
|
||||
training_of_the_DATE_TIME_html : "Formation du <strong>{DATE} - {TIME}</strong>"
|
||||
you_can_validate_the_training_of_the_following_members: "Vous pouvez valider la formation des membres suivants :"
|
||||
deleted_user: "Utilisateur supprimé"
|
||||
no_reservation: "Aucune réservation"
|
||||
@ -558,12 +561,16 @@ fr:
|
||||
# gestion des utilisateurs, des groupes, des étiquettes, etc.
|
||||
users_management: "Gestion des utilisateurs"
|
||||
members: "Membres"
|
||||
subscriptions: "Abonnements"
|
||||
search_for_an_user: "Recherchez un utilisateur"
|
||||
add_a_new_member: "Ajouter un nouveau membre"
|
||||
reservations: "Réservations"
|
||||
surname: "Nom"
|
||||
first_name: "Prénom"
|
||||
email: "Courriel"
|
||||
phone: "Tel."
|
||||
user_type: "Type utilisateur"
|
||||
subscription: "Abonnement"
|
||||
display_more_users: "Afficher plus d'utilisateurs ..."
|
||||
administrators: "Administrateurs"
|
||||
search_for_an_administrator: "Recherchez un administrateur"
|
||||
@ -579,6 +586,7 @@ fr:
|
||||
unable_to_delete_the_administrator: "L'administrateur n'a pas pu être supprimé."
|
||||
changes_successfully_saved: "Les modifications ont bien été enregistrées."
|
||||
an_error_occurred_while_saving_changes: "Une erreur est survenue lors de l'enregistrement des modifications."
|
||||
tags: "Étiquettes"
|
||||
add_a_tag: "Ajouter une étiquette"
|
||||
tag_name: "Nom de l'étiquette"
|
||||
new_tag_successfully_saved: "La nouvelle étiquette a bien été enregistrée."
|
||||
|
@ -32,73 +32,86 @@ fr:
|
||||
profile:
|
||||
empty: ''
|
||||
settings:
|
||||
edit_profile:
|
||||
# tableau de bord : éditer mon profil
|
||||
last_activity_on_: "Dernière activité le"
|
||||
i_want_to_change_group: "Je veux changer de groupe !"
|
||||
your_subscription_expires_on_: "Votre abonnement expire le"
|
||||
no_subscriptions: "Aucun abonnement"
|
||||
i_want_to_subscribe: "Je veux m'abonner !"
|
||||
to_come: "à venir"
|
||||
approved: "validée"
|
||||
projects: "Projets"
|
||||
no_projects: "Aucun projet"
|
||||
labels: "Étiquettes"
|
||||
no_labels: "Aucune étiquette"
|
||||
cookies: "Cookies"
|
||||
cookies_accepted: "Vous avez accepté les cookies"
|
||||
cookies_declined: "Vous avez refusé les cookies"
|
||||
cookies_unset: "Vous n'avez pas encore choisi"
|
||||
reset_cookies: "Modifier mon choix"
|
||||
delete_my_account: "Supprimer mon compte"
|
||||
edit_my_profile: "Éditer votre profil"
|
||||
your_group_has_been_successfully_changed: "Votre groupe a bien été changé."
|
||||
an_unexpected_error_prevented_your_group_from_being_changed: "Une erreur inattendue a empêché votre changement de groupe."
|
||||
confirm_delete_your_account: "Êtes-vous sûr de vouloir supprimer votre compte ?"
|
||||
all_data_will_be_lost: "Toutes vos données seront détruites et ne pourront pas être récupérées."
|
||||
invoicing_data_kept: "Conformément à la réglementation, les données relatives à vos facturations seront conservées de manière séparée pendant 10 ans."
|
||||
statistic_data_anonymized: "Certaines données (sexe, date de naissance, groupe) seront anonymisées et conservées à des fins statistiques."
|
||||
no_further_access_to_projects: "Vos projets publiés seront anonymisés et vous n'aurez plus de possibilité de les modifier."
|
||||
your_user_account_has_been_successfully_deleted_goodbye: "Votre compte utilisateur a bien été supprimé. Au revoir."
|
||||
an_error_occured_preventing_your_account_from_being_deleted: "Une erreur est survenue qui a empêché la suppression de votre compte."
|
||||
used_for_statistics: "Cette donnée sera utilisée à des fins statistiques"
|
||||
used_for_invoicing: "Cette donnée sera utilisée à des fins de facturation"
|
||||
used_for_reservation: "Cette donnée sera utilisée en cas de changement sur une de vos réservations"
|
||||
used_for_profile: "Cette donnée sera seulement affichée sur votre profil"
|
||||
used_for_pricing_stats: "Cette donné sera utilisée pour déterminer les prix auxquels vous avez droit, ainsi qu'a des fins statistiques"
|
||||
public_profile: "Vous aurez un profil public et les autres utilisateurs pourront vous associer à leurs projets"
|
||||
trainings: "Formations"
|
||||
no_trainings: "Aucune formation"
|
||||
subscription: "Abonnement"
|
||||
group: "Groupe"
|
||||
or: "ou"
|
||||
confirm_changes: "Valider les modifications"
|
||||
change_my_data: "Modifier mes données"
|
||||
sync_my_profile: "Synchroniser mon profil"
|
||||
once_your_data_are_up_to_date_: "Une fois vos données à jour,"
|
||||
_click_on_the_synchronization_button_opposite_: "cliquez sur le bouton de synchronisation ci-contre"
|
||||
_disconnect_then_reconnect_: "déconnectez-vous puis re-connectez vous"
|
||||
_for_your_changes_to_take_effect: "pour que les modifications soient prises en compte."
|
||||
# tableau de bord : éditer mon profil
|
||||
last_activity_on_: "Dernière activité le {DATE}"
|
||||
i_want_to_change_group: "Je veux changer de groupe !"
|
||||
your_subscription_expires_on_: "Votre abonnement expire le"
|
||||
no_subscriptions: "Aucun abonnement"
|
||||
i_want_to_subscribe: "Je veux m'abonner !"
|
||||
to_come: "à venir"
|
||||
approved: "validée"
|
||||
projects: "Projets"
|
||||
no_projects: "Aucun projet"
|
||||
labels: "Étiquettes"
|
||||
no_labels: "Aucune étiquette"
|
||||
cookies: "Cookies"
|
||||
cookies_accepted: "Vous avez accepté les cookies"
|
||||
cookies_declined: "Vous avez refusé les cookies"
|
||||
cookies_unset: "Vous n'avez pas encore choisi"
|
||||
reset_cookies: "Modifier mon choix"
|
||||
delete_my_account: "Supprimer mon compte"
|
||||
edit_my_profile: "Éditer votre profil"
|
||||
your_group_has_been_successfully_changed: "Votre groupe a bien été changé."
|
||||
an_unexpected_error_prevented_your_group_from_being_changed: "Une erreur inattendue a empêché votre changement de groupe."
|
||||
confirm_delete_your_account: "Êtes-vous sûr de vouloir supprimer votre compte ?"
|
||||
all_data_will_be_lost: "Toutes vos données seront détruites et ne pourront pas être récupérées."
|
||||
invoicing_data_kept: "Conformément à la réglementation, les données relatives à vos facturations seront conservées de manière séparée pendant 10 ans."
|
||||
statistic_data_anonymized: "Certaines données (sexe, date de naissance, groupe) seront anonymisées et conservées à des fins statistiques."
|
||||
no_further_access_to_projects: "Vos projets publiés seront anonymisés et vous n'aurez plus de possibilité de les modifier."
|
||||
your_user_account_has_been_successfully_deleted_goodbye: "Votre compte utilisateur a bien été supprimé. Au revoir."
|
||||
an_error_occured_preventing_your_account_from_being_deleted: "Une erreur est survenue qui a empêché la suppression de votre compte."
|
||||
used_for_statistics: "Cette donnée sera utilisée à des fins statistiques"
|
||||
used_for_invoicing: "Cette donnée sera utilisée à des fins de facturation"
|
||||
used_for_reservation: "Cette donnée sera utilisée en cas de changement sur une de vos réservations"
|
||||
used_for_profile: "Cette donnée sera seulement affichée sur votre profil"
|
||||
used_for_pricing_stats: "Cette donné sera utilisée pour déterminer les prix auxquels vous avez droit, ainsi qu'a des fins statistiques"
|
||||
public_profile: "Vous aurez un profil public et les autres utilisateurs pourront vous associer à leurs projets"
|
||||
trainings: "Formations"
|
||||
no_trainings: "Aucune formation"
|
||||
subscription: "Abonnement"
|
||||
group: "Groupe"
|
||||
or: "ou"
|
||||
confirm_changes: "Valider les modifications"
|
||||
change_my_data: "Modifier mes données"
|
||||
sync_my_profile: "Synchroniser mon profil"
|
||||
once_your_data_are_up_to_date_: "Une fois vos données à jour,"
|
||||
_click_on_the_synchronization_button_opposite_: "cliquez sur le bouton de synchronisation ci-contre"
|
||||
_disconnect_then_reconnect_: "déconnectez-vous puis re-connectez vous"
|
||||
_for_your_changes_to_take_effect: "pour que les modifications soient prises en compte."
|
||||
projects:
|
||||
# tableau de bord : mes projets
|
||||
you_dont_have_any_projects: "Vous n'avez aucun projet."
|
||||
add_a_project: "Ajouter un projet"
|
||||
author: "Auteur"
|
||||
collaborator: "Collaborateur"
|
||||
rough_draft: "Brouillon"
|
||||
description: "Description"
|
||||
machines_and_materials: "Machines et matériaux"
|
||||
machines: "Machines"
|
||||
materials: "Matériaux"
|
||||
collaborators: "Les collaborateurs"
|
||||
trainings:
|
||||
# tableau de bord : mes formations
|
||||
your_next_trainings: "Vos prochaines formations"
|
||||
your_previous_trainings: "Vos formations passées"
|
||||
your_approved_trainings: "Vos formations validées"
|
||||
no_trainings: "Aucune formation"
|
||||
events:
|
||||
# tableau de bord : mes évènements
|
||||
your_next_events: "Vos prochains évènements"
|
||||
no_events_to_come: "Aucun évènement à venir"
|
||||
your_previous_events: "Vos évènements passés"
|
||||
no_passed_events: "Aucun évènement passé"
|
||||
NUMBER_normal_places_reserved: "{NUMBER} {NUMBER, plural, =0{} =1{place normale réservée} other{places normales réservées}}"
|
||||
NUMBER_of_NAME_places_reserved: "{NUMBER} {NUMBER, plural, =0{} =1{place {NAME} réservée} other{places {NAME} réservées}}"
|
||||
invoices:
|
||||
# tableau de bord : mes factures
|
||||
reference_number: "Référence"
|
||||
date: "Date"
|
||||
price: "Prix"
|
||||
download_the_invoice: "Télécharger la facture"
|
||||
download_the_credit_note: "Télécharger l'avoir"
|
||||
no_invoices_for_now: "Aucune facture pour le moment."
|
||||
|
||||
members_show:
|
||||
# profil public d'un membre
|
||||
@ -110,6 +123,9 @@ fr:
|
||||
display_more_members: "Afficher plus de membres ..."
|
||||
no_members_for_now: "Pas de membres pour le moment"
|
||||
avatar: "Avatar"
|
||||
user: "Utilisateur"
|
||||
pseudonym: "Pseudonyme"
|
||||
email_address: "Adresse électronique"
|
||||
|
||||
projects_new:
|
||||
# ajouter un nouveau projet
|
||||
@ -154,6 +170,7 @@ fr:
|
||||
notifications:
|
||||
notifications_center: "Centre de notifications"
|
||||
mark_all_as_read: "Tout marquer comme lu"
|
||||
date: "Date"
|
||||
notif_title: "Intitulé"
|
||||
no_new_notifications: "Aucune nouvelle notification."
|
||||
archives: "Archives"
|
||||
|
@ -45,7 +45,6 @@ fr:
|
||||
|
||||
# menu de gauche (partie admin)
|
||||
trainings_monitoring: "Suivi formations"
|
||||
select_a_training: "Sélectionnez une formation"
|
||||
manage_the_calendar: "Gérer le calendrier"
|
||||
manage_the_users: "Gérer les utilisateurs"
|
||||
manage_the_invoices: "Gérer les factures"
|
||||
@ -161,23 +160,22 @@ fr:
|
||||
|
||||
projects_list:
|
||||
# galerie des projets
|
||||
projects_list:
|
||||
the_fablab_projects: "Les projets du FabLab"
|
||||
add_a_project: "Ajouter un projet"
|
||||
search_over_the_whole_network: "Chercher sur tout le réseau Fab Manager"
|
||||
tooltip_openlab_projects_switch: "La recherche sur tout le réseau vous permet de rechercher parmis les projets de tous les Fab-managers utilisant cette fonctionnalité !"
|
||||
openlab_search_not_available_at_the_moment: "La recherche sur tout le réseau n'est pas disponible pour le moment. Vous pouvez cependant effectuer une recherche parmis les projets de cette plateforme."
|
||||
project_search_result_is_empty: "Il n'y a pas de projets correspondant à vos critères de recherche."
|
||||
reset_all_filters: "Réinitialiser tous les filtres"
|
||||
search: "Rechercher"
|
||||
all_projects: "Tous les projets"
|
||||
my_projects: "Mes projets"
|
||||
projects_to_whom_i_take_part_in: "Les projets auxquels je collabore"
|
||||
all_machines: "Toutes les machines"
|
||||
all_themes: "Toutes les thématiques"
|
||||
all_materials: "Tous les matériaux"
|
||||
load_next_projects: "Charger les projets suivants"
|
||||
rough_draft: "Brouillon"
|
||||
the_fablab_projects: "Les projets du FabLab"
|
||||
add_a_project: "Ajouter un projet"
|
||||
search_over_the_whole_network: "Chercher sur tout le réseau Fab Manager"
|
||||
tooltip_openlab_projects_switch: "La recherche sur tout le réseau vous permet de rechercher parmis les projets de tous les Fab-managers utilisant cette fonctionnalité !"
|
||||
openlab_search_not_available_at_the_moment: "La recherche sur tout le réseau n'est pas disponible pour le moment. Vous pouvez cependant effectuer une recherche parmis les projets de cette plateforme."
|
||||
project_search_result_is_empty: "Il n'y a pas de projets correspondant à vos critères de recherche."
|
||||
reset_all_filters: "Réinitialiser tous les filtres"
|
||||
search: "Rechercher"
|
||||
all_projects: "Tous les projets"
|
||||
my_projects: "Mes projets"
|
||||
projects_to_whom_i_take_part_in: "Les projets auxquels je collabore"
|
||||
all_machines: "Toutes les machines"
|
||||
all_themes: "Toutes les thématiques"
|
||||
all_materials: "Tous les matériaux"
|
||||
load_next_projects: "Charger les projets suivants"
|
||||
rough_draft: "Brouillon"
|
||||
|
||||
projects_show:
|
||||
# détails d'un projet
|
||||
@ -204,18 +202,18 @@ fr:
|
||||
|
||||
machines_list:
|
||||
# liste des machines
|
||||
machines_list:
|
||||
the_fablab_s_machines: "Les machines du FabLab"
|
||||
add_a_machine: "Ajouter une machine"
|
||||
book: "Réserver"
|
||||
_or_the_: " ou la "
|
||||
status_enabled: "Actives"
|
||||
status_disabled: "Désactivées"
|
||||
status_all: "Toutes"
|
||||
the_fablab_s_machines: "Les machines du FabLab"
|
||||
add_a_machine: "Ajouter une machine"
|
||||
book: "Réserver"
|
||||
_or_the_: " ou la "
|
||||
status_enabled: "Actives"
|
||||
status_disabled: "Désactivées"
|
||||
status_all: "Toutes"
|
||||
|
||||
machines_show:
|
||||
# détail d'une machine
|
||||
book_this_machine: "Réserver cette machine"
|
||||
technical_specifications: "Caractéristiques techniques"
|
||||
files_to_download: "Fichiers à télécharger"
|
||||
projects_using_the_machine: "Projets utilisant la machine"
|
||||
_or_the_: " ou la "
|
||||
@ -225,6 +223,7 @@ fr:
|
||||
|
||||
trainings_list:
|
||||
# liste des formations
|
||||
book: "Réserver"
|
||||
the_trainings: "Les formations"
|
||||
|
||||
training_show:
|
||||
@ -246,9 +245,14 @@ fr:
|
||||
his_group: "Son groupe"
|
||||
he_wants_to_change_group: "{ROLE, select, admin{L'utilisateur veut} other{Je veux}} changer de groupe"
|
||||
change_my_group: "Changer {ROLE, select, admin{son} other{mon}} groupe"
|
||||
summary: "Résumé"
|
||||
your_subscription_has_expired_on_the_DATE: "Votre abonnement a expiré au {DATE}"
|
||||
you_ve_just_payed_the_: "Vous venez de régler l'"
|
||||
subscription_price: "Coût de l'abonnement"
|
||||
you_ve_just_selected_a_subscription_html: "Vous venez de sélectionner un <strong>abonnement</strong> :"
|
||||
confirm_and_pay: "Valider et payer"
|
||||
you_ve_just_payed_the_subscription_html: "Vous venez de régler <strong>l'abonnement</strong> :"
|
||||
thank_you_your_subscription_is_successful: "Merci. Votre abonnement a bien été pris en compte !"
|
||||
your_invoice_will_be_available_soon_from_your_dashboard: "Votre facture sera bientôt disponible depuis votre tableau de bord"
|
||||
your_group_was_successfully_changed: "Votre groupe a bien été changé."
|
||||
the_user_s_group_was_successfully_changed: "Le groupe de l'utilisateur a bien été changé."
|
||||
an_error_prevented_your_group_from_being_changed: "Une erreur a empêché votre changement de groupe."
|
||||
@ -256,6 +260,7 @@ fr:
|
||||
an_error_occured_during_the_payment_process_please_try_again_later: "Il y a eu un problème lors de la procédure de paiement. Veuillez réessayer plus tard."
|
||||
subscription_confirmation: "Validation de l'abonnement"
|
||||
here_is_the_NAME_subscription_summary: "Voici le récapitulatif de l'abonnement de {NAME} :"
|
||||
confirm_payment_of_html: "{ROLE, select, admin{Encaisser} other{Payer}} : {AMOUNT}" # (contexte : valider un paiement de 20,00 €)
|
||||
|
||||
events_list:
|
||||
# liste des évènements du fablab
|
||||
@ -267,6 +272,10 @@ fr:
|
||||
free_admission: "Gratuit"
|
||||
still_available: "place(s) disponible(s)"
|
||||
free_entry: "Accès libre"
|
||||
add_an_event: "Ajouter un évènement"
|
||||
load_the_next_events: "Charger les évènements suivants ..."
|
||||
full_price_: "Plein tarif :"
|
||||
to_date: "au" # context: date. eg: "from 01/01 to 01/05"
|
||||
|
||||
events_show:
|
||||
# détails d'un événement et réservation
|
||||
@ -301,34 +310,31 @@ fr:
|
||||
|
||||
calendar:
|
||||
# calendrier publique
|
||||
calendar:
|
||||
calendar: "Calendrier"
|
||||
show_unavailables: "Afficher les créneaux non disponibles"
|
||||
filter_calendar: "Filtrer le calendrier"
|
||||
trainings: "Formations"
|
||||
machines: "Machines"
|
||||
spaces: "Espaces"
|
||||
events: "Évènements"
|
||||
externals: "Autres calendriers"
|
||||
calendar: "Calendrier"
|
||||
show_unavailables: "Afficher les créneaux non disponibles"
|
||||
filter_calendar: "Filtrer le calendrier"
|
||||
trainings: "Formations"
|
||||
machines: "Machines"
|
||||
spaces: "Espaces"
|
||||
events: "Évènements"
|
||||
externals: "Autres calendriers"
|
||||
|
||||
spaces_list:
|
||||
# liste des espaces
|
||||
spaces_list:
|
||||
the_spaces: "Les espaces"
|
||||
add_a_space: "Ajouter un espace"
|
||||
status_enabled: "Activés"
|
||||
status_disabled: "Désactivés"
|
||||
status_all: "Tous"
|
||||
book: "Réserver"
|
||||
the_spaces: "Les espaces"
|
||||
add_a_space: "Ajouter un espace"
|
||||
status_enabled: "Activés"
|
||||
status_disabled: "Désactivés"
|
||||
status_all: "Tous"
|
||||
book: "Réserver"
|
||||
|
||||
space_show:
|
||||
# affichage des détails d'un espace
|
||||
space_show:
|
||||
book_this_space: "Réserver cet espace"
|
||||
unauthorized_operation: "Opération non autorisée"
|
||||
confirmation_required: "Confirmation requise"
|
||||
do_you_really_want_to_delete_this_space: "Voulez-vous vraiment supprimer cet espace ?"
|
||||
the_space_cant_be_deleted_because_it_is_already_reserved_by_some_users: "L'espace ne peut pas être supprimé car il a déjà été réservé par des utilisateurs."
|
||||
characteristics: "Caractéristiques"
|
||||
files_to_download: "Fichiers à télécharger"
|
||||
projects_using_the_space: "Projets utilisant l'espace"
|
||||
book_this_space: "Réserver cet espace"
|
||||
unauthorized_operation: "Opération non autorisée"
|
||||
confirmation_required: "Confirmation requise"
|
||||
do_you_really_want_to_delete_this_space: "Voulez-vous vraiment supprimer cet espace ?"
|
||||
the_space_cant_be_deleted_because_it_is_already_reserved_by_some_users: "L'espace ne peut pas être supprimé car il a déjà été réservé par des utilisateurs."
|
||||
characteristics: "Caractéristiques"
|
||||
files_to_download: "Fichiers à télécharger"
|
||||
projects_using_the_space: "Projets utilisant l'espace"
|
||||
|
@ -22,19 +22,8 @@ fr:
|
||||
elements:
|
||||
# traductions variées utilisées à plusieurs reprises dans l'application
|
||||
group: "Groupe"
|
||||
subscription: "Abonnement"
|
||||
trainings: "Formations"
|
||||
no_trainings: "Aucune formation"
|
||||
confirmation_required: "Confirmation requise"
|
||||
description: "Description"
|
||||
machines: "Machines"
|
||||
events: "Évènements"
|
||||
materials: "Matériaux"
|
||||
date: "Date"
|
||||
price: "Prix"
|
||||
download_the_invoice: "Télécharger la facture"
|
||||
download_the_credit_note: "Télécharger l'avoir"
|
||||
no_invoices_for_now: "Aucune facture pour le moment."
|
||||
email_address: "Adresse de courriel"
|
||||
user: "Utilisateur"
|
||||
pseudonym: "Pseudonyme"
|
||||
@ -42,41 +31,20 @@ fr:
|
||||
reservation_was_successfully_cancelled: "La réservation a bien été annulée."
|
||||
title: "Titre"
|
||||
total_: "TOTAL :"
|
||||
full_price_: "Plein tarif :"
|
||||
rough_draft: "Brouillon"
|
||||
machines_and_materials: "Machines et matériaux"
|
||||
collaborators: "Les collaborateurs"
|
||||
summary: "Résumé"
|
||||
you_ve_just_selected_a_: "Vous venez de sélectionner un" # you_ve_just_selected_a_ + _subscription
|
||||
_subscription: "abonnement"
|
||||
confirm_and_pay: "Valider et payer"
|
||||
your_invoice_will_be_available_soon_from_your_: "Votre facture sera bientôt disponible depuis votre"
|
||||
add_an_event: "Ajouter un évènement"
|
||||
load_the_next_events: "Charger les évènements suivants ..."
|
||||
no_passed_events: "Aucun évènement passé"
|
||||
dates: "Dates"
|
||||
thank_you_your_payment_has_been_successfully_registered: "Merci. Votre paiement a bien été pris en compte !"
|
||||
surname: "Nom"
|
||||
first_name: "Prénom"
|
||||
address: "Adresse"
|
||||
interests: "Centres d'intérêts"
|
||||
CAD_softwares_mastered: "Logiciels de conception maîtrisés"
|
||||
name: "Nom"
|
||||
step_N: "Étape {INDEX}"
|
||||
themes: "Thématiques"
|
||||
tags: "Étiquettes"
|
||||
technical_specifications: "Caractéristiques techniques"
|
||||
online_payment: "Paiement en ligne"
|
||||
type: "Type"
|
||||
partner: "Partenaire"
|
||||
standard: "Standard"
|
||||
year: "Année"
|
||||
month: "Mois"
|
||||
subscription_price: "Coût de l'abonnement"
|
||||
model: "Modèle"
|
||||
from_date: "Du" # context: date. eg: "from 01/01 to 01/05"
|
||||
from_time: "De" # context: time. eg. "from 18:00 to 21:00"
|
||||
to_date: "au" # context: date. eg: "from 01/01 to 01/05"
|
||||
to_time: "à" # context: time. eg. "from 18:00 to 21:00"
|
||||
or: "ou"
|
||||
and: "et"
|
||||
@ -86,15 +54,12 @@ fr:
|
||||
_click_on_the_synchronization_button_opposite_: "cliquez sur le bouton de synchronisation ci-contre"
|
||||
_disconnect_then_reconnect_: "déconnectez-vous puis re-connectez vous"
|
||||
_for_your_changes_to_take_effect: "pour que les modifications soient prises en compte."
|
||||
add_a_project: "Ajouter un projet"
|
||||
illustration: "Visuel"
|
||||
add_an_illustration: "Ajouter un visuel"
|
||||
book: "Réserver"
|
||||
description_is_required: "La description est requise."
|
||||
name_is_required: "Le nom est requis."
|
||||
all_themes: "Toutes les thématiques"
|
||||
filter: 'Filtre'
|
||||
confirm_payment_of_html: "{ROLE, select, admin{Paiement sur place} other{Payer}} : {AMOUNT}" # (contexte : valider mon paiement de 20,00 €)
|
||||
export_is_running_you_ll_be_notified_when_its_ready: "L'export est en cours. Vous serez notifié lorsqu'il sera prêt."
|
||||
share_on_facebook: "Partager sur Facebook"
|
||||
share_on_twitter: "Partager sur Twitter"
|
||||
@ -110,11 +75,21 @@ fr:
|
||||
|
||||
user:
|
||||
# formulaire d'édition du profil utilisateur
|
||||
man: "Homme"
|
||||
woman: "Femme"
|
||||
add_an_avatar: "Ajouter un avatar"
|
||||
pseudonym: "Pseudonyme"
|
||||
pseudonym_is_required: "Le pseudonyme est requis."
|
||||
first_name: "Votre prénom"
|
||||
first_name_is_required: "Le prénom est requis."
|
||||
surname: "Votre nom"
|
||||
surname_is_required: "Le nom est requis."
|
||||
email_address: "Votre adresse de courriel"
|
||||
email_address_is_required: "L'adresse de courriel est requise."
|
||||
change_password: "Changer de mot de passe"
|
||||
new_password: "Nouveau mot de passe"
|
||||
password_is_required: "Le mot de passe est requis."
|
||||
password_is_too_short: "Le mot de passe est trop court (au moins 8 caractères)"
|
||||
confirmation_of_new_password: "Confirmation du nouveau mot de passe"
|
||||
confirmation_of_password_is_required: "La confirmation du mot de passe est requise."
|
||||
confirmation_of_password_is_too_short: "La confirmation du mot de passe est trop courte (au moins 8 caractères)."
|
||||
@ -125,6 +100,19 @@ fr:
|
||||
date_of_birth_is_required: "La date de naissance est requise."
|
||||
website: "Site web"
|
||||
job: "Profession"
|
||||
interests: "Centres d'intérêts"
|
||||
CAD_softwares_mastered: "Logiciels de conception maîtrisés"
|
||||
birthday: "Date de naissance"
|
||||
birthday_is_required: "La date de naissance est requise."
|
||||
address: "Adresse"
|
||||
phone_number: "Numéro de téléphone"
|
||||
phone_number_is_required: "Le numéro de téléphone est requis."
|
||||
i_authorize_Fablab_users_registered_on_the_site_to_contact_me: "J'autorise les utilisateurs du Fab Lab inscrits sur le site à me contacter"
|
||||
i_accept_to_receive_information_from_the_fablab: "J'accepte de recevoir des informations du Fab Lab"
|
||||
used_for_statistics: "Cette donnée sera utilisée à des fins statistiques"
|
||||
used_for_invoicing: "Cette donnée sera utilisée à des fins de facturation"
|
||||
used_for_reservation: "Cette donnée sera utilisée en cas de changement sur une de vos réservations"
|
||||
used_for_profile: "Cette donnée sera seulement affichée sur votre profil"
|
||||
|
||||
project:
|
||||
# formulaire d'étition d'un projet
|
||||
@ -170,8 +158,7 @@ fr:
|
||||
member_select:
|
||||
# admin : choisir un membre avec lequel interagir
|
||||
select_a_member: "Sélectionnez un membre"
|
||||
start_typing: "Commencez à taper ..."
|
||||
please_select_a_member_first: "Veuillez tout d'abord sélectionner un membre"
|
||||
start_typing: "Commencez à écrire ..."
|
||||
|
||||
stripe:
|
||||
# fenêtre de paiement stripe
|
||||
@ -247,19 +234,18 @@ fr:
|
||||
|
||||
trainings:
|
||||
# formulaire d'édition d'une formation
|
||||
trainings_form:
|
||||
name: "Nom"
|
||||
name_is_required: "Le nom est requis."
|
||||
illustration: "Visuel"
|
||||
add_an_illustration: "Ajouter un visuel"
|
||||
description: "Description"
|
||||
description_is_required: "La description est requise."
|
||||
add_a_new_training: "Ajouter une nouvelle formation"
|
||||
validate_your_training: "Valider votre formation"
|
||||
associated_machines: "Machines associées"
|
||||
number_of_tickets: "Nombre de places"
|
||||
public_page: "Afficher dans la liste de formation"
|
||||
disable_training: "Désactiver la formation"
|
||||
name: "Nom"
|
||||
name_is_required: "Le nom est requis."
|
||||
illustration: "Visuel"
|
||||
add_an_illustration: "Ajouter un visuel"
|
||||
description: "Description"
|
||||
description_is_required: "La description est requise."
|
||||
add_a_new_training: "Ajouter une nouvelle formation"
|
||||
validate_your_training: "Valider votre formation"
|
||||
associated_machines: "Machines associées"
|
||||
number_of_tickets: "Nombre de places"
|
||||
public_page: "Afficher dans la liste de formation"
|
||||
disable_training: "Désactiver la formation"
|
||||
|
||||
user_admin:
|
||||
# formulaire partiel d'édition/création utilisateur (vue admin)
|
||||
@ -325,8 +311,7 @@ fr:
|
||||
|
||||
public_profile:
|
||||
# profil publique d'un utilisateur
|
||||
last_activity_: "Dernière activité"
|
||||
_on_: "le"
|
||||
last_activity_html: "Dernière activité <br><strong>le {DATE}</strong>"
|
||||
to_come: "à venir"
|
||||
approved: "validée"
|
||||
projects: "Projets"
|
||||
@ -334,6 +319,11 @@ fr:
|
||||
author: "Auteur"
|
||||
collaborator: "Collaborateur"
|
||||
private_profile: "Profil privé"
|
||||
interests: "Centres d'intérêts"
|
||||
CAD_softwares_mastered: "Logiciels de conception maîtrisés"
|
||||
email_address: "Adresse électronique"
|
||||
trainings: "Formations"
|
||||
no_trainings: "Aucune formation"
|
||||
|
||||
wallet:
|
||||
# porte-monnaie
|
||||
@ -341,6 +331,7 @@ fr:
|
||||
your_wallet_amount: 'Votre montant disponible'
|
||||
wallet_amount: 'Montant disponible'
|
||||
no_transactions_for_now: 'Aucune transaction pour le moment'
|
||||
date: "Date"
|
||||
operation: 'Opération'
|
||||
operator: 'Opérateur'
|
||||
amount: 'Montant'
|
||||
|
Loading…
Reference in New Issue
Block a user