Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
a89042ab
Commit
a89042ab
authored
Nov 14, 2017
by
Tasawer Nawaz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
integrate zendesk with new single support form
LEARNER-2736
parent
3a005c49
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
24 additions
and
18 deletions
+24
-18
lms/djangoapps/support/static/support/jsx/file_upload.jsx
+6
-6
lms/djangoapps/support/static/support/jsx/single_support_form.jsx
+9
-11
lms/djangoapps/support/views/contact_us.py
+4
-1
lms/envs/aws.py
+1
-0
lms/envs/common.py
+1
-0
lms/templates/support/contact_us.html
+3
-0
No files found.
lms/djangoapps/support/static/support/jsx/file_upload.jsx
View file @
a89042ab
...
...
@@ -23,12 +23,11 @@ class FileUpload extends React.Component {
e
.
preventDefault
();
const
fileToken
=
e
.
target
.
id
,
$this
=
this
,
url
=
`https://arbisoft.zendesk.com/api/v2/uploads/
${
fileToken
}
.json`
,
accessToken
=
'd6ed06821334b6584dd9607d04007c281007324ed07e087879c9c44835c684da'
,
url
=
`
${
this
.
props
.
zendeskApiHost
}
/api/v2/uploads/
${
fileToken
}
.json`
,
request
=
new
XMLHttpRequest
();
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
.
send
();
...
...
@@ -43,13 +42,12 @@ class FileUpload extends React.Component {
}
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
(),
request
=
new
XMLHttpRequest
(),
errorList
=
[],
$this
=
this
,
file
=
e
.
target
.
files
[
0
],
accessToken
=
'd6ed06821334b6584dd9607d04007c281007324ed07e087879c9c44835c684da'
,
maxFileSize
=
5000000
,
// 5mb is max limit
allowedFileTypes
=
[
'gif'
,
'png'
,
'jpg'
,
'jpeg'
,
'pdf'
];
...
...
@@ -68,7 +66,7 @@ class FileUpload extends React.Component {
}
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'
);
fileReader
.
readAsArrayBuffer
(
file
);
...
...
@@ -166,5 +164,7 @@ class FileUpload extends React.Component {
FileUpload
.
propTypes
=
{
setErrorState
:
PropTypes
.
func
.
isRequired
,
zendeskApiHost
:
PropTypes
.
string
.
isRequired
,
accessToken
:
PropTypes
.
string
.
isRequired
,
};
export
default
FileUpload
;
lms/djangoapps/support/static/support/jsx/single_support_form.jsx
View file @
a89042ab
...
...
@@ -12,11 +12,6 @@ import LoggedInUser from './logged_in_user';
import
LoggedOutUser
from
'./logged_out_user'
;
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
{
constructor
(
props
)
{
...
...
@@ -24,7 +19,7 @@ class RenderForm extends React.Component {
this
.
state
=
{
currentRequest
:
null
,
errorList
:
[],
success
:
tru
e
,
success
:
fals
e
,
};
this
.
submitForm
=
this
.
submitForm
.
bind
(
this
);
this
.
setErrorState
=
this
.
setErrorState
.
bind
(
this
);
...
...
@@ -37,11 +32,10 @@ class RenderForm extends React.Component {
}
submitForm
()
{
const
url
=
'https://example.zendesk.com/api/v2/tickets.json'
,
const
url
=
`
${
this
.
props
.
context
.
zendeskApiHost
}
/api/v2/tickets.json`
,
$userInfo
=
$
(
'.user-info'
),
request
=
new
XMLHttpRequest
(),
$course
=
$
(
'#course'
),
accessToken
=
'abc000'
,
data
=
{
subject
:
$
(
'#subject'
).
val
(),
comment
:
{
...
...
@@ -64,13 +58,13 @@ class RenderForm extends React.Component {
}
data
.
custom_fields
=
[{
id
:
'114099484092'
,
id
:
this
.
props
.
context
.
customFields
.
course
,
value
:
course
,
}];
if
(
this
.
validateData
(
data
))
{
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
.
send
(
JSON
.
stringify
({
...
...
@@ -197,7 +191,11 @@ class RenderForm extends React.Component {
</
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=
"col-sm-12"
>
...
...
lms/djangoapps/support/views/contact_us.py
View file @
a89042ab
...
...
@@ -16,7 +16,10 @@ class ContactUsView(View):
def
get
(
self
,
request
):
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
():
context
[
'user_enrollments'
]
=
CourseEnrollment
.
enrollments_for_user
(
request
.
user
)
...
...
lms/envs/aws.py
View file @
a89042ab
...
...
@@ -594,6 +594,7 @@ MAILCHIMP_NEW_USER_LIST_ID = ENV_TOKENS.get("MAILCHIMP_NEW_USER_LIST_ID")
# Zendesk
ZENDESK_USER
=
AUTH_TOKENS
.
get
(
"ZENDESK_USER"
)
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
EDX_API_KEY
=
AUTH_TOKENS
.
get
(
"EDX_API_KEY"
)
...
...
lms/envs/common.py
View file @
a89042ab
...
...
@@ -1113,6 +1113,7 @@ FEEDBACK_SUBMISSION_EMAIL = None
ZENDESK_URL
=
None
ZENDESK_USER
=
None
ZENDESK_API_KEY
=
None
ZENDESK_OAUTH_ACCESS_TOKEN
=
None
ZENDESK_CUSTOM_FIELDS
=
{}
##### EMBARGO #####
...
...
lms/templates/support/contact_us.html
View file @
a89042ab
...
...
@@ -33,6 +33,9 @@ from openedx.core.djangolib.js_utils import js_escaped_string
'loginQuery': "/login${login_query() | n, js_escaped_string}",
'dashboardUrl': "${reverse('dashboard') | 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():
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment