Commit a89042ab by Tasawer Nawaz

integrate zendesk with new single support form

LEARNER-2736
parent 3a005c49
...@@ -23,12 +23,11 @@ class FileUpload extends React.Component { ...@@ -23,12 +23,11 @@ class FileUpload extends React.Component {
e.preventDefault(); e.preventDefault();
const fileToken = e.target.id, const fileToken = e.target.id,
$this = this, $this = this,
url = `https://arbisoft.zendesk.com/api/v2/uploads/${fileToken}.json`, url = `${this.props.zendeskApiHost}/api/v2/uploads/${fileToken}.json`,
accessToken = 'd6ed06821334b6584dd9607d04007c281007324ed07e087879c9c44835c684da',
request = new XMLHttpRequest(); request = new XMLHttpRequest();
request.open('DELETE', url, true); request.open('DELETE', url, true);
request.setRequestHeader('Authorization', `Bearer ${accessToken}`); request.setRequestHeader('Authorization', `Bearer ${this.props.accessToken}`);
request.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); request.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
request.send(); request.send();
...@@ -43,13 +42,12 @@ class FileUpload extends React.Component { ...@@ -43,13 +42,12 @@ class FileUpload extends React.Component {
} }
uploadFile(e) { uploadFile(e) {
const url = 'https://arbisoft.zendesk.com/api/v2/uploads.json?filename=', const url = `${this.props.zendeskApiHost}/api/v2/uploads.json?filename=`,
fileReader = new FileReader(), fileReader = new FileReader(),
request = new XMLHttpRequest(), request = new XMLHttpRequest(),
errorList = [], errorList = [],
$this = this, $this = this,
file = e.target.files[0], file = e.target.files[0],
accessToken = 'd6ed06821334b6584dd9607d04007c281007324ed07e087879c9c44835c684da',
maxFileSize = 5000000, // 5mb is max limit maxFileSize = 5000000, // 5mb is max limit
allowedFileTypes = ['gif', 'png', 'jpg', 'jpeg', 'pdf']; allowedFileTypes = ['gif', 'png', 'jpg', 'jpeg', 'pdf'];
...@@ -68,7 +66,7 @@ class FileUpload extends React.Component { ...@@ -68,7 +66,7 @@ class FileUpload extends React.Component {
} }
request.open('POST', (url + file.name), true); request.open('POST', (url + file.name), true);
request.setRequestHeader('Authorization', `Bearer ${accessToken}`); request.setRequestHeader('Authorization', `Bearer ${this.props.accessToken}`);
request.setRequestHeader('Content-Type', 'application/binary'); request.setRequestHeader('Content-Type', 'application/binary');
fileReader.readAsArrayBuffer(file); fileReader.readAsArrayBuffer(file);
...@@ -166,5 +164,7 @@ class FileUpload extends React.Component { ...@@ -166,5 +164,7 @@ class FileUpload extends React.Component {
FileUpload.propTypes = { FileUpload.propTypes = {
setErrorState: PropTypes.func.isRequired, setErrorState: PropTypes.func.isRequired,
zendeskApiHost: PropTypes.string.isRequired,
accessToken: PropTypes.string.isRequired,
}; };
export default FileUpload; export default FileUpload;
...@@ -12,11 +12,6 @@ import LoggedInUser from './logged_in_user'; ...@@ -12,11 +12,6 @@ import LoggedInUser from './logged_in_user';
import LoggedOutUser from './logged_out_user'; import LoggedOutUser from './logged_out_user';
import Success from './success'; import Success from './success';
// TODO
// edx zendesk APIs
// access token
// custom fields ids
// https://openedx.atlassian.net/browse/LEARNER-2736
class RenderForm extends React.Component { class RenderForm extends React.Component {
constructor(props) { constructor(props) {
...@@ -24,7 +19,7 @@ class RenderForm extends React.Component { ...@@ -24,7 +19,7 @@ class RenderForm extends React.Component {
this.state = { this.state = {
currentRequest: null, currentRequest: null,
errorList: [], errorList: [],
success: true, success: false,
}; };
this.submitForm = this.submitForm.bind(this); this.submitForm = this.submitForm.bind(this);
this.setErrorState = this.setErrorState.bind(this); this.setErrorState = this.setErrorState.bind(this);
...@@ -37,11 +32,10 @@ class RenderForm extends React.Component { ...@@ -37,11 +32,10 @@ class RenderForm extends React.Component {
} }
submitForm() { submitForm() {
const url = 'https://example.zendesk.com/api/v2/tickets.json', const url = `${this.props.context.zendeskApiHost}/api/v2/tickets.json`,
$userInfo = $('.user-info'), $userInfo = $('.user-info'),
request = new XMLHttpRequest(), request = new XMLHttpRequest(),
$course = $('#course'), $course = $('#course'),
accessToken = 'abc000',
data = { data = {
subject: $('#subject').val(), subject: $('#subject').val(),
comment: { comment: {
...@@ -64,13 +58,13 @@ class RenderForm extends React.Component { ...@@ -64,13 +58,13 @@ class RenderForm extends React.Component {
} }
data.custom_fields = [{ data.custom_fields = [{
id: '114099484092', id: this.props.context.customFields.course,
value: course, value: course,
}]; }];
if (this.validateData(data)) { if (this.validateData(data)) {
request.open('POST', url, true); request.open('POST', url, true);
request.setRequestHeader('Authorization', `Bearer ${accessToken}`); request.setRequestHeader('Authorization', `Bearer ${this.props.context.accessToken}`);
request.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); request.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
request.send(JSON.stringify({ request.send(JSON.stringify({
...@@ -197,7 +191,11 @@ class RenderForm extends React.Component { ...@@ -197,7 +191,11 @@ class RenderForm extends React.Component {
</div> </div>
</div> </div>
<FileUpload setErrorState={this.setErrorState} /> <FileUpload
setErrorState={this.setErrorState}
zendeskApiHost={this.props.context.zendeskApiHost}
accessToken={this.props.context.accessToken}
/>
<div className="row"> <div className="row">
<div className="col-sm-12"> <div className="col-sm-12">
......
...@@ -16,7 +16,10 @@ class ContactUsView(View): ...@@ -16,7 +16,10 @@ class ContactUsView(View):
def get(self, request): def get(self, request):
context = { context = {
'platform_name': helpers.get_value('platform_name', settings.PLATFORM_NAME) 'platform_name': helpers.get_value('platform_name', settings.PLATFORM_NAME),
'zendesk_api_host': settings.ZENDESK_URL,
'access_token': settings.ZENDESK_OAUTH_ACCESS_TOKEN,
'custom_fields': settings.ZENDESK_CUSTOM_FIELDS
} }
if request.user.is_authenticated(): if request.user.is_authenticated():
context['user_enrollments'] = CourseEnrollment.enrollments_for_user(request.user) context['user_enrollments'] = CourseEnrollment.enrollments_for_user(request.user)
......
...@@ -594,6 +594,7 @@ MAILCHIMP_NEW_USER_LIST_ID = ENV_TOKENS.get("MAILCHIMP_NEW_USER_LIST_ID") ...@@ -594,6 +594,7 @@ MAILCHIMP_NEW_USER_LIST_ID = ENV_TOKENS.get("MAILCHIMP_NEW_USER_LIST_ID")
# Zendesk # Zendesk
ZENDESK_USER = AUTH_TOKENS.get("ZENDESK_USER") ZENDESK_USER = AUTH_TOKENS.get("ZENDESK_USER")
ZENDESK_API_KEY = AUTH_TOKENS.get("ZENDESK_API_KEY") ZENDESK_API_KEY = AUTH_TOKENS.get("ZENDESK_API_KEY")
ZENDESK_OAUTH_ACCESS_TOKEN = AUTH_TOKENS.get("ZENDESK_OAUTH_ACCESS_TOKEN")
# API Key for inbound requests from Notifier service # API Key for inbound requests from Notifier service
EDX_API_KEY = AUTH_TOKENS.get("EDX_API_KEY") EDX_API_KEY = AUTH_TOKENS.get("EDX_API_KEY")
......
...@@ -1113,6 +1113,7 @@ FEEDBACK_SUBMISSION_EMAIL = None ...@@ -1113,6 +1113,7 @@ FEEDBACK_SUBMISSION_EMAIL = None
ZENDESK_URL = None ZENDESK_URL = None
ZENDESK_USER = None ZENDESK_USER = None
ZENDESK_API_KEY = None ZENDESK_API_KEY = None
ZENDESK_OAUTH_ACCESS_TOKEN = None
ZENDESK_CUSTOM_FIELDS = {} ZENDESK_CUSTOM_FIELDS = {}
##### EMBARGO ##### ##### EMBARGO #####
......
...@@ -33,6 +33,9 @@ from openedx.core.djangolib.js_utils import js_escaped_string ...@@ -33,6 +33,9 @@ from openedx.core.djangolib.js_utils import js_escaped_string
'loginQuery': "/login${login_query() | n, js_escaped_string}", 'loginQuery': "/login${login_query() | n, js_escaped_string}",
'dashboardUrl': "${reverse('dashboard') | n, js_escaped_string}", 'dashboardUrl': "${reverse('dashboard') | n, js_escaped_string}",
'homepageUrl': "${marketing_link('ROOT') | n, js_escaped_string}", 'homepageUrl': "${marketing_link('ROOT') | n, js_escaped_string}",
'zendeskApiHost': "${zendeskApiHost | n, js_escaped_string}",
'accessToken': "${access_token | n, js_escaped_string}",
'customFields': "${custom_fields | n, js_escaped_string}",
} }
% if user.is_authenticated(): % if user.is_authenticated():
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment