Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
itminedu
synnefo
Commits
c54b3b65
Commit
c54b3b65
authored
Jan 03, 2013
by
Kostas Papadimitriou
Browse files
Projects list/search refactoring
parent
7ad374bd
Changes
7
Hide whitespace changes
Inline
Side-by-side
snf-astakos-app/astakos/im/models.py
View file @
c54b3b65
...
...
@@ -1100,6 +1100,13 @@ class ProjectApplicationManager(models.Manager):
return
self
.
filter
(
Q
(
owner
=
user
)
|
Q
(
applicant
=
user
)
|
\
Q
(
project__in
=
user
.
projectmembership_set
.
filter
()))
def
search_by_name
(
self
,
*
search_strings
):
q
=
Q
()
for
s
in
search_strings
:
q
=
q
|
Q
(
name__icontains
=
s
)
return
self
.
filter
(
q
)
class
ProjectApplication
(
models
.
Model
):
PENDING
,
APPROVED
,
REPLACED
,
UNKNOWN
=
'Pending'
,
'Approved'
,
'Replaced'
,
'Unknown'
applicant
=
models
.
ForeignKey
(
...
...
@@ -1153,7 +1160,7 @@ class ProjectApplication(models.Model):
try
:
membership
=
self
.
project
.
projectmembership_set
.
get
(
person
=
user
)
status
=
membership
.
state
except
Project
.
DoesNotExist
:
except
Project
Membership
.
DoesNotExist
:
status
=
-
1
return
status
...
...
snf-astakos-app/astakos/im/tables.py
View file @
c54b3b65
...
...
@@ -3,6 +3,7 @@ import django_tables2 as tables
from
django.utils.translation
import
ugettext
as
_
from
django_tables2
import
A
from
astakos.im.models
import
*
from
django.utils.safestring
import
mark_safe
DEFAULT_DATE_FORMAT
=
"d/m/Y"
...
...
@@ -35,7 +36,8 @@ class UserProjectApplicationsTable(tables.Table):
issue_date
=
tables
.
DateColumn
(
format
=
DEFAULT_DATE_FORMAT
)
start_date
=
tables
.
DateColumn
(
format
=
DEFAULT_DATE_FORMAT
)
state
=
tables
.
Column
(
verbose_name
=
"Status"
)
members_count
=
tables
.
Column
(
verbose_name
=
"Enrolled"
,
default
=
0
)
members_count
=
tables
.
Column
(
verbose_name
=
"Enrolled"
,
default
=
0
,
sortable
=
False
)
membership_status
=
tables
.
Column
(
verbose_name
=
"My status"
,
empty_values
=
(),
orderable
=
False
)
...
...
snf-astakos-app/astakos/im/templates/im/projects
_
in
dex
.html
→
snf-astakos-app/astakos/im/templates/im/projects
/
in
tro
.html
View file @
c54b3b65
File moved
snf-astakos-app/astakos/im/templates/im/projects/project_list.html
View file @
c54b3b65
...
...
@@ -9,12 +9,14 @@
<div
class=
"projects"
>
<h2>
PROJECTS
</h2>
{% if form %}
{% include "im/projects
_list
.html" %}
{% include "im/projects
/search_form
.html" %}
{% else %}
{% include "im/projects
_
in
dex
.html" %}
{% include "im/projects
/
in
tro
.html" %}
</div>
{% endif %}
{% render_table table %}
{% endif %}
{% if table %}
{% render_table table %}
{% endif %}
</div>
</div>
{% endblock %}
snf-astakos-app/astakos/im/templates/im/projects
_
search_form.html
→
snf-astakos-app/astakos/im/templates/im/projects
/
search_form.html
View file @
c54b3b65
<p>
Search for existing Projects and join the ones you like. Please search by Project name.
</p>
<form
action=
"{% url project_search %}"
method=
"post"
class=
"withlabels signup submit-inline"
>
{% csrf_token %}
{% include "im/form_render.html" %}
{% include "im/form_render.html" %}
<div
class=
"form-row submit"
>
<input
type=
"submit"
class=
"submit altcol"
value=
"SEARCH"
/>
{% if q %}
<a
href=
"{% url project_search %}"
>
clear
</a>
{% endif %}
<input
type=
"submit"
class=
"submit altcol"
value=
"SEARCH"
/>
{% if q %}
<a
href=
"{% url project_search %}"
>
clear
</a>
{% endif %}
</div>
</form>
snf-astakos-app/astakos/im/templates/im/projects_list.html
deleted
100644 → 0
View file @
7ad374bd
{% extends "im/account_base.html" %}
{% load astakos_tags %}
{% load filters %}
{% load django_tables2 %}
{% block page.body %}
<div
class=
"maincol {% block innerpage.class %}{% endblock %}"
>
<div
class=
"projects"
>
<h2>
PROJECTS
</h2>
{% if form %}
{% include "im/projects_list.html" %}
{% else %}
{% include "im/projects_index.html" %}
</div>
{% endif %}
{% render_table table %}
</div>
</div>
{% endblock %}
snf-astakos-app/astakos/im/views.py
View file @
c54b3b65
...
...
@@ -41,6 +41,8 @@ from urllib import quote
from
functools
import
wraps
from
datetime
import
datetime
from
django_tables2
import
RequestConfig
from
django.shortcuts
import
get_object_or_404
from
django.contrib
import
messages
from
django.contrib.auth.decorators
import
login_required
...
...
@@ -1086,7 +1088,7 @@ def _update_object(request, model=None, object_id=None, slug=None,
def
project_add
(
request
):
result
=
callpoint
.
list_resources
()
details_fields
=
[
"name"
,
"homepage"
,
"description"
,
"start_date"
,
"end_date"
,
"comments"
]
membership_fields
=
[
"member_join_policy"
,
"member_leave_policy"
,
"limit_on_members_number"
]
membership_fields
=
[
"member_join_policy"
,
"member_leave_policy"
,
"limit_on_members_number"
]
if
not
result
.
is_success
:
messages
.
error
(
request
,
...
...
@@ -1097,7 +1099,7 @@ def project_add(request):
extra_context
=
{
'resource_catalog'
:
resource_catalog
,
'show_form'
:
True
,
'details_fields'
:
details_fields
,
'membership_fields'
:
membership_fields
}
return
_create_object
(
request
,
template_name
=
'im/projects/projectapplication_form.html'
,
extra_context
=
extra_context
,
post_save_redirect
=
reverse
(
'project_list'
),
form_class
=
ProjectApplicationForm
)
form_class
=
ProjectApplicationForm
)
@
require_http_methods
([
"GET"
])
...
...
@@ -1106,7 +1108,7 @@ def project_add(request):
def
project_list
(
request
):
projects
=
ProjectApplication
.
objects
.
user_projects
(
request
.
user
).
select_related
()
table
=
tables
.
UserProjectApplicationsTable
(
projects
,
user
=
request
.
user
,
prefix
=
"my_projects"
)
table
.
paginate
(
page
=
request
.
GET
.
get
(
'my_projectspage'
,
1
),
per_page
=
PAGINATE_BY
)
RequestConfig
(
request
).
configure
(
table
)
return
object_list
(
request
,
...
...
@@ -1124,7 +1126,7 @@ def project_list(request):
def
project_update
(
request
,
application_id
):
result
=
callpoint
.
list_resources
()
details_fields
=
[
"name"
,
"homepage"
,
"description"
,
"start_date"
,
"end_date"
,
"comments"
]
membership_fields
=
[
"member_join_policy"
,
"member_leave_policy"
,
"limit_on_members_number"
]
membership_fields
=
[
"member_join_policy"
,
"member_leave_policy"
,
"limit_on_members_number"
]
if
not
result
.
is_success
:
messages
.
error
(
request
,
...
...
@@ -1132,7 +1134,9 @@ def project_update(request, application_id):
)
else
:
resource_catalog
=
result
.
data
extra_context
=
{
'resource_catalog'
:
resource_catalog
,
'show_form'
:
True
,
'details_fields'
:
details_fields
,
'membership_fields'
:
membership_fields
}
extra_context
=
{
'resource_catalog'
:
resource_catalog
,
'show_form'
:
True
,
'details_fields'
:
details_fields
,
'membership_fields'
:
membership_fields
}
return
_update_object
(
request
,
object_id
=
application_id
,
...
...
@@ -1213,43 +1217,35 @@ def project_detail(request, application_id):
@
login_required
def
project_search
(
request
):
q
=
request
.
GET
.
get
(
'q'
,
''
)
queryset
=
ProjectApplication
.
objects
.
filter
()
form
=
ProjectSearchForm
()
q
=
q
.
strip
()
if
request
.
method
==
'GET'
:
form
=
ProjectSearchForm
()
q
=
q
.
strip
()
queryset
=
queryset
.
filter
(
~
Q
(
project__last_approval_date__isnull
=
True
))
queryset
=
queryset
.
filter
(
name__contains
=
q
)
else
:
if
request
.
method
==
"POST"
:
form
=
ProjectSearchForm
(
request
.
POST
)
if
form
.
is_valid
():
q
=
form
.
cleaned_data
[
'q'
].
strip
()
queryset
=
queryset
.
filter
(
~
Q
(
project__last_approval_date__isnull
=
True
))
queryset
=
queryset
.
filter
(
name__contains
=
q
)
else
:
queryset
=
queryset
.
none
()
q
=
None
if
q
is
None
:
projects
=
ProjectApplication
.
objects
.
none
()
else
:
projects
=
ProjectApplication
.
objects
.
search_by_name
(
q
)
projects
=
projects
.
filter
(
~
Q
(
project__last_approval_date__isnull
=
True
))
table
=
tables
.
UserProjectApplicationsTable
(
projects
,
user
=
request
.
user
,
prefix
=
"my_projects"
)
RequestConfig
(
request
).
configure
(
table
)
sorting
=
'name'
# validate sorting
sort_form
=
ProjectSortForm
(
request
.
GET
)
if
sort_form
.
is_valid
():
sorting
=
sort_form
.
cleaned_data
.
get
(
'sorting'
)
queryset
=
queryset
.
order_by
(
sorting
)
return
object_list
(
request
,
queryset
,
paginate_by
=
PAGINATE_BY_ALL
,
page
=
request
.
GET
.
get
(
'page'
)
or
1
,
projects
,
template_name
=
'im/projects/project_list.html'
,
extra_context
=
dict
(
form
=
form
,
is_search
=
True
,
sorting
=
sorting
,
q
=
q
,
)
)
extra_context
=
{
'form'
:
form
,
'is_search'
:
True
,
'q'
:
q
,
'table'
:
table
})
@
require_http_methods
([
"POST"
])
@
signed_terms_required
...
...
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