-
- {this.props.organisation.languages.map((lang) => (
-
-
-
-
-
this.updateEventTextField("description", e, lang.code)}
- value={updatedEvent.description[lang.code]}
- />
+
+ {this.props.organisation.languages.map((lang) => (
+
+
+
+ this.updateEventTextField("name", e, lang.code)}
+ value={updatedEvent.name[lang.code]}
+ />
+
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ this.updateEventTextField("key", e)}
+ value={updatedEvent.key}
+ />
+
+
+
+ {this.props.organisation.languages.map((lang) => (
+
+
+
+
+ this.updateEventTextField("description", e, lang.code)}
+ value={updatedEvent.description[lang.code]}
+ />
+
+
+ ))}
+
+
+
+
+
+ this.updateEventTextField("email_from", e)}
+ />
+
+
+
+
+
+
+
+ this.updateEventTextField("url", e)}
+ />
+
+
+
+ {updatedEvent.event_type && this.renderDatePickerTable()}
+
+
+
+
+
+
+
+
+ {t("Cancel")}
+
+
+
+
+ {isNewEvent ? (
+
+ ) :
+ (
+
+ )}
- ))}
-
-
-
-
-
- this.updateEventTextField("email_from", e)}
- />
-
-
-
-
-
-
-
-
this.updateEventTextField("url", e)}
- />
+
+
+ {errors && showErrors && this.getErrorMessages(errors)}
-
- {updatedEvent.event_type && this.renderDatePickerTable()}
-
-
-
-
-
-
-
-
- {t("Cancel")}
-
-
-
-
- {isNewEvent ? (
-
- ) :
- (
-
- )}
-
-
-
-
- {errors && showErrors && this.getErrorMessages(errors)}
-
-
- );
+ );
}
}
diff --git a/webapp/src/pages/eventHome/EventHome.js b/webapp/src/pages/eventHome/EventHome.js
index a63fec540..7a876d0c6 100755
--- a/webapp/src/pages/eventHome/EventHome.js
+++ b/webapp/src/pages/eventHome/EventHome.js
@@ -23,7 +23,7 @@ import Offer from "../offer";
import OfferAdmin from "../offerAdmin";
import { InvoiceAdminList } from "../invoices";
import EventStatus from "../../components/EventStatus";
-import { isEventAdmin } from "../../utils/user";
+import { isEventAdmin, isEventResponseEditorOnly, isEventResponseViewerOnly} from "../../utils/user";
import ResponseList from "../ResponseList/ResponseList";
import ResponsePage from "../ResponsePage/ResponsePage";
import ReviewDashboard from "../reviewDashboard";
@@ -48,7 +48,7 @@ class EventInfo extends Component {
{event.description}
- {isEventAdmin(this.props.user, this.props.event)
+ {isEventAdmin(this.props.user, this.props.event)
&& }
);
@@ -127,159 +127,200 @@ class EventHome extends Component {
);
}
- return (
-
-
}
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
+ if (!isEventResponseViewerOnly(this.props.user, this.props.event) && !isEventResponseEditorOnly(this.props.user, this.props.event)) {
+ return (
+
+
}
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
}
- />
- }
- />
- }
- />
- }
- />
- }
- />
- }
- />
+ path={`${match.path}/eventAttendance`}
+ render={(props) => }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
-
- );
+
+ );
+ }
+ else{
+ return (
+
+
}
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+ }
+ />
+
+ );
+ }
}
}
diff --git a/webapp/src/pages/home/Home.js b/webapp/src/pages/home/Home.js
index c22485e0d..790f10900 100644
--- a/webapp/src/pages/home/Home.js
+++ b/webapp/src/pages/home/Home.js
@@ -5,6 +5,7 @@ import { eventService } from "../../services/events/events.service";
import { organisationService } from "../../services/organisation/organisation.service";
import EventStatus from "../../components/EventStatus";
import { withTranslation } from 'react-i18next';
+import { isEventResponseEditorOnly, isEventResponseViewerOnly, isEventReadOnly } from '../../utils/user';
class Home extends Component {
@@ -15,6 +16,7 @@ class Home extends Component {
awards: null,
journals: null,
organisation: null,
+ event: null,
errors: []
}
}
@@ -37,7 +39,8 @@ class Home extends Component {
journals: response.events.filter(e => e.event_type === 'JOURNAL'),
calls: response.events.filter(e => e.event_type === "CALL" && (e.is_event_opening || e.is_event_open)),
programmes: response.events.filter(e => e.event_type === "PROGRAMME" && (e.is_event_opening || e.is_event_open)),
- attended: response.events.filter(e => !e.is_event_opening)
+ attended: response.events.filter(e => !e.is_event_opening),
+ event: response.events
});
}
});
@@ -63,12 +66,15 @@ class Home extends Component {
}
statusDisplay(e) {
- if (e.event_type === 'JOURNAL') {
- return
;
+ if (!isEventResponseViewerOnly(this.props.user, e) &&
+ !isEventResponseEditorOnly(this.props.user, e)) {
+ if (e.event_type === 'JOURNAL') {
+ return
;
+ }
+ else {
+ return
;
+ }
}
- else {
- return
;
- }
}
dateDisplay = (e) => {
@@ -114,7 +120,7 @@ class Home extends Component {
if (this.state.organisation && this.state.organisation.name === "AI4D Africa" && this.props.i18n.language === "fr") {
logo = "ai4d_logo_fr.png";
}
-
+
return (
@@ -131,8 +137,10 @@ class Home extends Component {
}
- {this.props.user && this.props.user.is_admin &&
-
{this.props.t("Create New Event")}
+ {!isEventResponseEditorOnly(this.props.user, this.state.event) &&
+ !isEventResponseViewerOnly(this.props.user, this.state.event) &&
+ this.props.user && this.props.user.is_admin &&
+
{this.props.t("Create New Event")}
}
{this.renderEventTable(this.state.upcomingEvents, "Upcoming Events")}
diff --git a/webapp/src/utils/user.js b/webapp/src/utils/user.js
index 1939905b2..fa86217e1 100644
--- a/webapp/src/utils/user.js
+++ b/webapp/src/utils/user.js
@@ -11,6 +11,30 @@ export const isEventAdmin = (user, event) => {
);
};
+ export const isEventResponseViewerOnly = (user, event) => {
+ if (!user) {
+ return false;
+ }
+ return (
+ (user.roles &&
+ user.roles.some(
+ r => r.role === "response-viewer" && event && r.event_id === event.id
+ ))
+ );
+ };
+
+ export const isEventResponseEditorOnly = (user, event) => {
+ if (!user) {
+ return false;
+ }
+ return (
+ (user.roles &&
+ user.roles.some(
+ r => r.role === "response-editor" && event && r.event_id === event.id
+ ))
+ );
+ };
+
export const isRegistrationAdmin = (user, event) => {
if (!user) {
return false;