Skip to content
Snippets Groups Projects
Commit 5e6ffd3e authored by Martin Burchell's avatar Martin Burchell
Browse files

Merge branch 'make_view_edit_view_into_tab' of...

Merge branch 'make_view_edit_view_into_tab' of github.com:aptivate/internewshid into make_view_edit_view_into_tab

Conflicts:
	django/website/hid/views.py
parents 33604769 075b887f
Branches
No related tags found
1 merge request!26Make view edit view into tab
Showing
with 142 additions and 51 deletions
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
def create_initial_view_and_edit_page(apps, schema_editor):
TabbedPage = apps.get_model("tabbed_page", "TabbedPage")
TabInstance = apps.get_model("tabbed_page", "TabInstance")
main, created = TabbedPage.objects.get_or_create(name='main')
all_tab, created = TabInstance.objects.get_or_create(
name='all',
page=main,
defaults={
'tab_type': 'view-and-edit-table',
'default': True,
'position': 0,
'label': 'All',
'settings': {
"columns": ["select_item", "created", "timestamp", "body"],
"label": "All"
}
}
)
question_tab, created = TabInstance.objects.get_or_create(
name='questions',
page=main,
defaults={
'tab_type': 'view-and-edit-table',
'default': False,
'position': 1,
'label': 'Questions',
'settings': {
'columns': ['select_item', 'created', 'timestamp', 'body',
'category'],
'label': 'Questions',
'source': 'geopoll',
'categories': ['ebola-questions'],
'filters': {
'terms': ['item-types:question']
}
}
}
)
rumours_tab, created = TabInstance.objects.get_or_create(
name='rumors',
page=main,
defaults={
'tab_type': 'view-and-edit-table',
'default': False,
'position': 1,
'label': 'Rumors',
'settings': {
'columns': ['select_item', 'created', 'timestamp', 'body',
'network_provider'],
'label': 'Rumors',
'source': 'rapidpro',
'filters': {
'terms': ['item-types:rumor']
}
}
}
)
class Migration(migrations.Migration):
dependencies = [
('hid', '0004_item_types'),
('tabbed_page', '0003_auto_20150807_1023')
]
operations = [
migrations.RunPython(create_initial_view_and_edit_page)
]
......@@ -181,6 +181,7 @@ class ViewAndEditTableTab(object):
'table': table,
'upload_form': upload_form,
'actions': actions,
'has_categories': len(question_types) > 0,
'next': reverse('tabbed-page', kwargs={
'name': tab_instance.page.name,
'tab_name': tab_instance.name
......@@ -274,7 +275,10 @@ def view_and_edit_table_form_process_items(request):
# Find the tab to redirect to
redirect_url = request.POST.get('next')
if not redirect_url:
redirect_url = reverse('data-view')
redirect_url = reverse('tabbed-page', kwargs={
'name': 'main',
'tab_name': 'all'
})
return HttpResponseRedirect(redirect_url)
......
......@@ -13,7 +13,9 @@
{% endfor %}
</select>
{% bootstrap_button "Apply action" button_type="submit" name="action" value="batchupdate-"|add:button_placement button_class="btn btn-default btn-sm table-submit" %}
<div class="pull-right">
{% bootstrap_button "Save changes" button_type="submit" name="action" value="save-"|add:button_placement button_class="btn btn-success btn-sm table-submit" %}
</div>
{% if has_categories %}
<div class="pull-right">
{% bootstrap_button "Save changes" button_type="submit" name="action" value="save-"|add:button_placement button_class="btn btn-success btn-sm table-submit" %}
</div>
{% endif %}
</div>
......@@ -12,7 +12,7 @@
class="auto-upload-file">
{% csrf_token %}
{% bootstrap_form upload_form show_label=False %}
<a class="btn item-source-upload btn-block btn-primary upload-button" type="button" value="Upload" href="{% url "data-view" %}"><span class="fa fa-upload fa-fw"></span>{% blocktrans %}Upload {{ type_label }}{% endblocktrans %}</a>
<a class="btn item-source-upload btn-block btn-primary upload-button" type="button" value="Upload" href="{% url "tabbed-page" name="main" tab_name="all" %}"><span class="fa fa-upload fa-fw"></span>{% blocktrans %}Upload {{ type_label }}{% endblocktrans %}</a>
</form>
</div>
</div>
......
......@@ -94,7 +94,10 @@ def test_process_items_deletes_items(request_item):
def test_empty_process_items_redirects_to_data_view():
url = reverse('data-view-process')
redirect_url = reverse('data-view')
redirect_url = reverse('tabbed-page', kwargs={
'name': 'main',
'tab_name': 'all'
})
request = ReqFactory.get(url)
......
......@@ -4,7 +4,7 @@ from django.contrib.auth.decorators import login_required
from dashboard.views import DashboardView
from .views import (
view_and_edit_table, UploadSpreadsheetView, ListSources, ViewSingleItem
UploadSpreadsheetView, ListSources, ViewSingleItem
)
from hid.tabs.view_and_edit_table import view_and_edit_table_form_process_items
......@@ -13,7 +13,6 @@ urlpatterns = patterns('',
url(r'^sources/(?P<label>\w+)/$', login_required(ListSources.as_view()), name='sources-edit'),
url(r'^sources/$', login_required(ListSources.as_view()), name='sources'),
url(r'^process-items/$', login_required(view_and_edit_table_form_process_items), name="data-view-process"),
url(r'^view/$', login_required(view_and_edit_table), name="data-view"),
url(r'^view/(?P<id>\d+)$', login_required(ViewSingleItem.as_view())),
url(r'^$', login_required(DashboardView.as_view()), name='dashboard'),
)
from django.contrib import messages
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect, HttpResponse
from django.template import RequestContext
from django.template.loader import render_to_string
from django.http import HttpResponseRedirect
from django.utils.translation import ungettext
from django.views.generic import FormView
from django.views.generic.base import TemplateView
from chn_spreadsheet.importer import Importer, SheetImportException
from hid.tabs.view_and_edit_table import ViewAndEditTableTab
from .forms import UploadForm, get_spreadsheet_choices
def view_and_edit_table(request):
""" Placeholder view that renders the view&edit tab as a single
page.
Args:
request (Request): Current request
Returns:
HttpResponse: The rendered HTML
"""
table = ViewAndEditTableTab()
context = table.get_context_data(
request,
label='Questions',
per_page=25,
categories=['ebola-questions'],
columns=['select_item', 'created', 'timestamp',
'body', 'category']
)
html = render_to_string(
table.template_name, context, RequestContext(request)
)
page_html = render_to_string('hid/outer_page.html', {'body': html})
return HttpResponse(page_html)
class ListSources(TemplateView):
template_name = "hid/sources.html"
......
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('tabbed_page', '0002_auto_20150805_1521'),
]
operations = [
migrations.RenameField(
model_name='tabinstance',
old_name='view_name',
new_name='tab_type',
),
migrations.AlterField(
model_name='tabbedpage',
name='name',
field=models.SlugField(unique=True, max_length=128),
),
migrations.AlterField(
model_name='tabinstance',
name='name',
field=models.SlugField(max_length=128),
),
migrations.AlterField(
model_name='tabinstance',
name='page',
field=models.ForeignKey(related_name='tabs', to='tabbed_page.TabbedPage'),
),
]
......@@ -3,7 +3,7 @@ from jsonfield import JSONField
class TabbedPage(models.Model):
name = models.CharField(
name = models.SlugField(
max_length=128,
unique=True
)
......@@ -14,9 +14,9 @@ class TabbedPage(models.Model):
class TabInstance(models.Model):
settings = JSONField(blank=True)
view_name = models.CharField(max_length=128)
tab_type = models.CharField(max_length=128)
page = models.ForeignKey(TabbedPage, related_name='tabs')
name = models.CharField(max_length=128)
name = models.SlugField(max_length=128, unique=False)
default = models.BooleanField(default=False)
position = models.PositiveIntegerField(default=0)
label = models.CharField(max_length=128)
......
......@@ -24,14 +24,14 @@ def render_tab(context, tab_instance):
def _get_rendering_details(context, tab_instance):
try:
tab = get_tab(tab_instance.view_name)
tab = get_tab(tab_instance.tab_type)
except MissingTabError as e:
return _get_error_details(e.message)
try:
template_name = tab.template_name
except AttributeError:
return _get_error_details('Missing template for %s' % tab_instance.view_name)
return _get_error_details('Missing template for %s' % tab_instance.tab_type)
if tab_instance.settings:
settings = tab_instance.settings
......
......@@ -7,6 +7,7 @@ from ..models import TabbedPage, TabInstance
class TabbedPageFactory(DjangoModelFactory):
class Meta:
model = TabbedPage
django_get_or_create = ('name',)
name = fuzzy.FuzzyText()
......
......@@ -35,7 +35,7 @@ def test_uses_template_name(mock_render):
page = TabbedPageFactory()
tab_instance = TabInstanceFactory(
page=page, view_name='basic-html-tab')
page=page, tab_type='basic-html-tab')
render_tab({}, tab_instance)
......@@ -55,7 +55,7 @@ def test_uses_context(mock_render):
register_tab('basic-html-tab', tab)
page = TabbedPageFactory()
tab_instance = TabInstanceFactory(page=page, view_name='basic-html-tab')
tab_instance = TabInstanceFactory(page=page, tab_type='basic-html-tab')
render_tab({}, tab_instance)
......@@ -73,7 +73,7 @@ def test_uses_request(mock_render):
tab_instance = TabInstanceFactory(
page=page,
view_name='basic-html-tab')
tab_type='basic-html-tab')
request = Mock()
context = {'request': request}
......@@ -89,7 +89,7 @@ def test_missing_widget_handled(mock_render):
page = TabbedPageFactory()
tab_instance = TabInstanceFactory(
page=page,
view_name='basic-html-tab')
tab_type='basic-html-tab')
context = {}
render_tab(context, tab_instance)
......@@ -109,7 +109,7 @@ def test_missing_template_handled(mock_render):
page = TabbedPageFactory()
tab_instance = TabInstanceFactory(
page=page,
view_name='basic-html-tab')
tab_type='basic-html-tab')
context = {}
......@@ -133,7 +133,7 @@ def test_settings_passed_to_widget_get_context_data(render_to_string_method):
tab_instance = TabInstanceFactory(
page=page,
view_name='basic-html-tab',
tab_type='basic-html-tab',
settings=settings)
context = {}
......@@ -154,7 +154,7 @@ def test_request_passed_to_widget_get_context_data(render_to_string_method):
tab_instance = TabInstanceFactory(
page=page,
view_name='basic-html-tab')
tab_type='basic-html-tab')
request = Mock()
context = {'request': request}
......@@ -175,7 +175,7 @@ def test_tab_instance_passed_to_widget_get_context_data(render_to_string_method)
tab_instance = TabInstanceFactory(
page=page,
view_name='basic-html-tab')
tab_type='basic-html-tab')
request = Mock()
context = {'request': request}
......
......@@ -8,7 +8,7 @@
<ul class="nav" id="side-menu">
<li><a class="active" href="{% url "dashboard" %}"><span class="fa fa-dashboard fa-fw"></span> Dashboard</a></li>
{# <li><a href="{% url "sources" %}"><span class="fa fa-download fa-fw"></span> Sources</a></li> #}
<li><a href="{% url "data-view" %}"><span class="fa fa-pencil fa-fw"></span> View &amp; Edit</a></li>
<li><a href="{% url "tabbed-page" name="main" tab_name="all" %}"><span class="fa fa-pencil fa-fw"></span> View &amp; Edit</a></li>
</ul>
</nav>
<!-- /.sidebar-collapse -->
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment