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
a7e746d3
Commit
a7e746d3
authored
Jan 26, 2012
by
David Ormsbee
Browse files
Options
Browse Files
Download
Plain Diff
Merge
parents
63cb53c9
f6ad9d51
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
119 additions
and
29 deletions
+119
-29
courseware/module_render.py
+12
-11
courseware/progress.py
+19
-0
courseware/views.py
+2
-2
simplewiki/models.py
+24
-1
simplewiki/views.py
+62
-15
No files found.
courseware/module_render.py
View file @
a7e746d3
...
...
@@ -107,17 +107,17 @@ def render_x_module(user, request, xml_module, module_object_preload):
module_id
=
xml_module
.
get
(
'id'
)
#module_class.id_attribute) or ""
# Grab state from database
#
s = object_cache(module_object_preload,
#
user,
#
module_type,
#
module_id)
s
=
StudentModule
.
objects
.
filter
(
student
=
request
.
user
,
module_id
=
module_id
,
module_type
=
module_type
)
if
len
(
s
)
==
0
:
s
=
None
else
:
s
=
s
[
0
]
s
=
object_cache
(
module_object_preload
,
user
,
module_type
,
module_id
)
#
s = StudentModule.objects.filter(student=request.user,
#
module_id=module_id,
#
module_type = module_type)
#
if len(s) == 0:
#
s=None
#
else:
#
s=s[0]
if
s
==
None
:
# If nothing in the database...
state
=
None
...
...
@@ -141,6 +141,7 @@ def render_x_module(user, request, xml_module, module_object_preload):
module_id
=
module_id
,
state
=
instance
.
get_state
())
smod
.
save
()
# This may be optional (at least in the case of no instance in the dB)
module_object_preload
.
append
(
smod
)
# Grab content
content
=
{
'content'
:
instance
.
get_html
(),
"destroy_js"
:
instance
.
get_destroy_js
(),
...
...
courseware/progress.py
0 → 100644
View file @
a7e746d3
class
completion
(
object
):
def
__init__
(
self
,
d
=
None
):
self
.
dict
=
dict
()
if
d
:
self
.
dict
.
update
(
d
)
def
__getitem__
(
self
,
key
):
return
self
.
dict
[
key
]
def
__setitem__
(
self
,
key
,
value
):
self
.
dict
[
key
]
=
value
def
__add__
(
self
,
other
):
result
=
dict
()
dict
.
update
(
self
.
dict
)
dict
.
update
(
other
.
dict
)
def
__contains__
(
self
,
key
):
pass
courseware/views.py
View file @
a7e746d3
...
...
@@ -132,8 +132,8 @@ def index(request, course="6.002 Spring 2012", chapter="Using the System", secti
module_ids
=
dom
.
xpath
(
"//course[@name=$course]/chapter[@name=$chapter]//section[@name=$section]//@id"
,
course
=
course
,
chapter
=
chapter
,
section
=
section
)
module_object_preload
=
StudentModule
.
objects
.
filter
(
student
=
user
,
module_id__in
=
module_ids
)
module_object_preload
=
list
(
StudentModule
.
objects
.
filter
(
student
=
user
,
module_id__in
=
module_ids
)
)
module
=
render_module
(
user
,
request
,
module
,
module_object_preload
)
...
...
simplewiki/models.py
View file @
a7e746d3
...
...
@@ -85,6 +85,8 @@ class Article(models.Model):
def
can_read
(
self
,
user
):
""" Check read permissions and return True/False."""
if
user
.
is_superuser
:
return
True
if
self
.
permissions
:
perms
=
self
.
permissions
.
can_read
.
all
()
return
perms
.
count
()
==
0
or
(
user
in
perms
)
...
...
@@ -93,6 +95,8 @@ class Article(models.Model):
def
can_write
(
self
,
user
):
""" Check write permissions and return True/False."""
if
user
.
is_superuser
:
return
True
if
self
.
permissions
:
perms
=
self
.
permissions
.
can_write
.
all
()
return
perms
.
count
()
==
0
or
(
user
in
perms
)
...
...
@@ -101,6 +105,8 @@ class Article(models.Model):
def
can_write_l
(
self
,
user
):
"""Check write permissions and locked status"""
if
user
.
is_superuser
:
return
True
return
not
self
.
locked
and
self
.
can_write
(
user
)
def
can_attach
(
self
,
user
):
...
...
@@ -220,13 +226,25 @@ class Revision(models.Model):
counter
=
models
.
IntegerField
(
verbose_name
=
_
(
'Revision#'
),
default
=
1
,
editable
=
False
)
previous_revision
=
models
.
ForeignKey
(
'self'
,
blank
=
True
,
null
=
True
,
editable
=
False
)
# Deleted has three values. 0 is normal, non-deleted. 1 is if it was deleted by a normal user. It should
# be a NEW revision, so that it appears in the history. 2 is a special flag that can be applied or removed
# from a normal revision. It means it has been admin-deleted, and can only been seen by an admin. It doesn't
# show up in the history.
deleted
=
models
.
IntegerField
(
verbose_name
=
_
(
'Deleted group'
),
default
=
0
)
def
get_user
(
self
):
return
self
.
revision_user
if
self
.
revision_user
else
_
(
'Anonymous'
)
# Called after the deleted fied has been changed (between 0 and 2). This bypasses the normal checks put in
# save that update the revision or reject the save if contents haven't changed
def
adminSetDeleted
(
self
,
deleted
):
self
.
deleted
=
deleted
super
(
Revision
,
self
)
.
save
()
def
save
(
self
,
**
kwargs
):
# Check if contents have changed... if not, silently ignore save
if
self
.
article
and
self
.
article
.
current_revision
:
if
self
.
article
.
current_revision
.
contents
==
self
.
contents
:
if
self
.
deleted
==
0
and
self
.
article
.
current_revision
.
contents
==
self
.
contents
:
return
else
:
import
datetime
...
...
@@ -242,6 +260,7 @@ class Revision(models.Model):
self
.
counter
=
previous_revision
[
0
]
.
counter
+
1
else
:
self
.
counter
=
1
if
(
self
.
article
.
current_revision
and
self
.
article
.
current_revision
.
deleted
==
0
):
self
.
previous_revision
=
self
.
article
.
current_revision
# Create pre-parsed contents - no need to parse on-the-fly
...
...
@@ -274,6 +293,10 @@ class Revision(models.Model):
super
(
Revision
,
self
)
.
delete
(
**
kwargs
)
def
get_diff
(
self
):
if
(
self
.
deleted
==
1
):
yield
"Article Deletion"
return
if
self
.
previous_revision
:
previous
=
self
.
previous_revision
.
contents
.
splitlines
(
1
)
else
:
...
...
simplewiki/views.py
View file @
a7e746d3
...
...
@@ -32,12 +32,13 @@ def view(request, wiki_url):
if
err
:
return
err
perm_err
=
check_permissions
(
request
,
article
,
check_read
=
True
)
perm_err
=
check_permissions
(
request
,
article
,
check_read
=
True
,
check_deleted
=
True
)
if
perm_err
:
return
perm_err
d
=
{
'wiki_article'
:
article
,
'wiki_write'
:
article
.
can_write_l
(
request
.
user
),
'wiki_attachments_write'
:
article
.
can_attach
(
request
.
user
),
'wiki_current_revision_deleted'
:
not
(
article
.
current_revision
.
deleted
==
0
),
}
d
.
update
(
csrf
(
request
))
return
render_to_response
(
'simplewiki_view.html'
,
d
)
...
...
@@ -80,7 +81,7 @@ def create(request, wiki_url):
d
.
update
(
csrf
(
request
))
return
render_to_response
(
'simplewiki_error.html'
,
d
)
perm_err
=
check_permissions
(
request
,
path
[
-
1
],
check_locked
=
False
,
check_write
=
True
)
perm_err
=
check_permissions
(
request
,
path
[
-
1
],
check_locked
=
False
,
check_write
=
True
,
check_deleted
=
True
)
if
perm_err
:
return
perm_err
# Ensure doesn't already exist
...
...
@@ -135,7 +136,7 @@ def edit(request, wiki_url):
return
err
# Check write permissions
perm_err
=
check_permissions
(
request
,
article
,
check_write
=
True
,
check_locked
=
True
)
perm_err
=
check_permissions
(
request
,
article
,
check_write
=
True
,
check_locked
=
True
,
check_deleted
=
False
)
if
perm_err
:
return
perm_err
...
...
@@ -149,9 +150,15 @@ def edit(request, wiki_url):
if
f
.
is_valid
():
new_revision
=
f
.
save
(
commit
=
False
)
new_revision
.
article
=
article
# Check that something has actually been changed...
if
not
new_revision
.
get_diff
():
return
(
None
,
HttpResponseRedirect
(
reverse
(
'wiki_view'
,
args
=
(
article
.
get_url
(),))))
if
request
.
POST
.
__contains__
(
'delete'
):
if
(
article
.
current_revision
.
deleted
==
1
):
#This article has already been deleted. Redirect
return
HttpResponseRedirect
(
reverse
(
'wiki_view'
,
args
=
(
article
.
get_url
(),)))
new_revision
.
contents
=
""
new_revision
.
deleted
=
1
elif
not
new_revision
.
get_diff
():
return
HttpResponseRedirect
(
reverse
(
'wiki_view'
,
args
=
(
article
.
get_url
(),)))
if
not
request
.
user
.
is_anonymous
():
new_revision
.
revision_user
=
request
.
user
new_revision
.
save
()
...
...
@@ -160,7 +167,9 @@ def edit(request, wiki_url):
new_revision
.
article
.
save
()
return
HttpResponseRedirect
(
reverse
(
'wiki_view'
,
args
=
(
article
.
get_url
(),)))
else
:
f
=
EditForm
({
'contents'
:
article
.
current_revision
.
contents
,
'title'
:
article
.
title
})
startContents
=
article
.
current_revision
.
contents
if
(
article
.
current_revision
.
deleted
==
0
)
else
'Headline
\n
===
\n\n
'
f
=
EditForm
({
'contents'
:
startContents
,
'title'
:
article
.
title
})
d
=
{
'wiki_form'
:
f
,
'wiki_write'
:
True
,
'wiki_article'
:
article
,
...
...
@@ -178,8 +187,9 @@ def history(request, wiki_url, page=1):
if
err
:
return
err
perm_err
=
check_permissions
(
request
,
article
,
check_read
=
True
)
perm_err
=
check_permissions
(
request
,
article
,
check_read
=
True
,
check_deleted
=
False
)
if
perm_err
:
print
"returned error "
,
perm_err
return
perm_err
page_size
=
10
...
...
@@ -192,18 +202,41 @@ def history(request, wiki_url, page=1):
history
=
Revision
.
objects
.
filter
(
article__exact
=
article
)
.
order_by
(
'-counter'
)
if
request
.
method
==
'POST'
:
if
request
.
POST
.
__contains__
(
'revision'
):
if
request
.
POST
.
__contains__
(
'revision'
):
#They selected a version, but they can be either deleting or changing the version
perm_err
=
check_permissions
(
request
,
article
,
check_write
=
True
,
check_locked
=
True
)
if
perm_err
:
return
perm_err
try
:
r
=
int
(
request
.
POST
[
'revision'
])
article
.
current_revision
=
Revision
.
objects
.
get
(
id
=
r
)
revision
=
Revision
.
objects
.
get
(
id
=
r
)
if
request
.
POST
.
__contains__
(
'change'
):
article
.
current_revision
=
revision
article
.
save
()
elif
request
.
POST
.
__contains__
(
'delete'
)
and
request
.
user
.
is_superuser
:
if
(
revision
.
deleted
==
0
):
revision
.
adminSetDeleted
(
2
)
elif
request
.
POST
.
__contains__
(
'restore'
)
and
request
.
user
.
is_superuser
:
if
(
revision
.
deleted
==
2
):
revision
.
adminSetDeleted
(
0
)
elif
request
.
POST
.
__contains__
(
'delete_all'
)
and
request
.
user
.
is_superuser
:
Revision
.
objects
.
filter
(
article__exact
=
article
,
deleted
=
0
)
.
update
(
deleted
=
2
)
elif
request
.
POST
.
__contains__
(
'lock_article'
):
print
"changing locked article "
,
article
.
locked
article
.
locked
=
not
article
.
locked
print
"changed locked article "
,
article
.
locked
article
.
save
()
except
:
pass
finally
:
return
HttpResponseRedirect
(
reverse
(
'wiki_view'
,
args
=
(
article
.
get_url
(),)))
#
#
# <input type="submit" name="delete" value="Delete revision"/>
# <input type="submit" name="restore" value="Restore revision"/>
# <input type="submit" name="delete_all" value="Delete all revisions">
# %else:
# <input type="submit" name="delete_article" value="Delete all revisions">
#
page_count
=
(
history
.
count
()
+
(
page_size
-
1
))
/
page_size
if
p
>
page_count
:
...
...
@@ -219,7 +252,8 @@ def history(request, wiki_url, page=1):
'wiki_write'
:
article
.
can_write_l
(
request
.
user
),
'wiki_attachments_write'
:
article
.
can_attach
(
request
.
user
),
'wiki_article'
:
article
,
'wiki_history'
:
history
[
beginItem
:
beginItem
+
page_size
],}
'wiki_history'
:
history
[
beginItem
:
beginItem
+
page_size
],
'show_delete_revision'
:
request
.
user
.
is_superuser
,}
d
.
update
(
csrf
(
request
))
return
render_to_response
(
'simplewiki_history.html'
,
d
)
...
...
@@ -254,11 +288,16 @@ def search_articles(request):
# Need to throttle results by splitting them into pages...
results
=
Article
.
objects
.
all
()
if
request
.
user
.
is_superuser
:
results
=
results
.
order_by
(
'current_revision__deleted'
)
else
:
results
=
results
.
filter
(
current_revision__deleted
=
0
)
if
results
.
count
()
==
1
and
querystring
:
return
HttpResponseRedirect
(
reverse
(
'wiki_view'
,
args
=
(
results
[
0
]
.
get_url
(),)))
else
:
d
=
{
'wiki_search_results'
:
results
,
'wiki_search_query'
:
querystring
}
'wiki_search_query'
:
querystring
,
}
d
.
update
(
csrf
(
request
))
return
render_to_response
(
'simplewiki_searchresults.html'
,
d
)
...
...
@@ -394,16 +433,24 @@ def fetch_from_url(request, url):
return
(
article
,
path
,
err
)
def
check_permissions
(
request
,
article
,
check_read
=
False
,
check_write
=
False
,
check_locked
=
False
):
def
check_permissions
(
request
,
article
,
check_read
=
False
,
check_write
=
False
,
check_locked
=
False
,
check_deleted
=
False
):
read_err
=
check_read
and
not
article
.
can_read
(
request
.
user
)
write_err
=
check_write
and
not
article
.
can_write
(
request
.
user
)
locked_err
=
check_locked
and
article
.
locked
if
read_err
or
write_err
or
locked_err
:
deleted_err
=
check_deleted
and
not
(
article
.
current_revision
.
deleted
==
0
)
if
(
request
.
user
.
is_superuser
):
deleted_err
=
False
locked_err
=
False
if
read_err
or
write_err
or
locked_err
or
deleted_err
:
d
=
{
'wiki_article'
:
article
,
'wiki_err_noread'
:
read_err
,
'wiki_err_nowrite'
:
write_err
,
'wiki_err_locked'
:
locked_err
,}
'wiki_err_locked'
:
locked_err
,
'wiki_err_deleted'
:
deleted_err
,}
d
.
update
(
csrf
(
request
))
# TODO: Make this a little less jarring by just displaying an error
# on the current page? (no such redirect happens for an anon upload yet)
...
...
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