Commit 867541758865f7767920ad2435e049bc09d0fd1b

Authored by Zambom
1 parent 84f2c8a9

Adding webpage update form (Changes to be made, may not work properly)

webpage/forms.py
... ... @@ -21,7 +21,7 @@ class WebpageForm(forms.ModelForm):
21 21 self.subject = kwargs['initial'].get('subject', None)
22 22  
23 23 if self.instance.id:
24   - self.subject = self.instance.subject
  24 + self.subject = self.instance.topic.subject
25 25 self.initial['tags'] = ", ".join(self.instance.tags.all().values_list("name", flat = True))
26 26  
27 27 self.initial['control_subject'] = self.subject.id
... ...
webpage/templates/webpages/list.html
... ... @@ -25,7 +25,7 @@
25 25 <i class="fa fa-ellipsis-v" aria-hidden="true"></i>
26 26 </a>
27 27 <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="moreResources">
28   - <li><a href="{% url 'topics:update' subject.slug topic.slug %}"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i>{% trans 'Edit' %}</a></li>
  28 + <li><a href="{% url 'webpages:update' topic.slug resource.slug %}"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i>{% trans 'Edit' %}</a></li>
29 29 <li><a href="javascript:delete_topic('{% url 'topics:delete' topic.slug %}')"><i class="fa fa-trash fa-fw" aria-hidden="true"></i>{% trans 'Remove' %}</a></li>
30 30 </ul>
31 31 </span>
... ...
webpage/templates/webpages/update.html 0 → 100644
... ... @@ -0,0 +1,37 @@
  1 +{% extends 'subjects/view.html' %}
  2 +
  3 +{% load static i18n django_bootstrap_breadcrumbs %}
  4 +
  5 +{% block style %}
  6 + {{block.super}}
  7 + <link rel="stylesheet" type="text/css" href="{% static "css/bootstrap-tagsinput.css" %}">
  8 +{% endblock %}
  9 +
  10 +{% block javascript %}
  11 + {{block.super}}
  12 + <script type="text/javascript" src="{% static "js/bootstrap-tagsinput.js" %} "></script>
  13 + <script type="text/javascript" src="{% static "js/jquery.formset.js" %} "></script>
  14 +{% endblock %}
  15 +
  16 +{% block breadcrumbs %}
  17 + {{ block.super }}
  18 +
  19 + {% breadcrumb topic 'subjects:view' topic.subject.slug %}
  20 +
  21 + {% trans 'Edit: ' as bread %}
  22 + {% with bread|add:webpage.name as bread_slug %}
  23 + {% breadcrumb bread_slug 'webpages:update' topic.slug webpage.slug %}
  24 + {% endwith %}
  25 +{% endblock %}
  26 +
  27 +{% block content %}
  28 + <div class="card">
  29 + <div class="card-content">
  30 + <div class="card-body">
  31 + {% include 'webpages/_form.html' %}
  32 + </div>
  33 + </div>
  34 + </div>
  35 + <br clear="all" />
  36 + <br clear="all" />
  37 +{% endblock %}
... ...
webpage/urls.py
... ... @@ -5,6 +5,7 @@ from . import views
5 5  
6 6 urlpatterns = [
7 7 url(r'^create/(?P<slug>[\w_-]+)/$', views.CreateView.as_view(), name = 'create'),
  8 + url(r'^update/(?P<topic_slug>[\w_-]+)/(?P<slug>[\w_-]+)/$', views.UpdateView.as_view(), name = 'update'),
8 9 url(r'^window_view/(?P<slug>[\w_-]+)/$', views.NewWindowView.as_view(), name = 'window_view'),
9 10 url(r'^view/(?P<slug>[\w_-]+)/$', views.InsideView.as_view(), name = 'view'),
10 11 ]
... ...
webpage/views.py
... ... @@ -155,4 +155,103 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView):
155 155  
156 156 success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug})
157 157  
  158 + return success_url
  159 +
  160 +class UpdateView(LoginRequiredMixin, generic.UpdateView):
  161 + login_url = reverse_lazy("users:login")
  162 + redirect_field_name = 'next'
  163 +
  164 + template_name = 'webpages/update.html'
  165 + model = Webpage
  166 + form_class = WebpageForm
  167 +
  168 + def dispatch(self, request, *args, **kwargs):
  169 + slug = self.kwargs.get('topic_slug', '')
  170 + topic = get_object_or_404(Topic, slug = slug)
  171 +
  172 + if not has_subject_permissions(request.user, topic.subject):
  173 + return redirect(reverse_lazy('subjects:home'))
  174 +
  175 + return super(UpdateView, self).dispatch(request, *args, **kwargs)
  176 +
  177 + # def get(self, request, *args, **kwargs):
  178 + # self.object = self.get_queryset()
  179 +
  180 + # form_class = self.get_form_class()
  181 + # form = self.get_form(form_class)
  182 +
  183 + # slug = self.kwargs.get('topic_slug', '')
  184 + # topic = get_object_or_404(Topic, slug = slug)
  185 +
  186 + # pendencies_form = InlinePendenciesFormset(instance = self.object)
  187 +
  188 + # return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form))
  189 +
  190 + def post(self, request, *args, **kwargs):
  191 + self.object = None
  192 +
  193 + form_class = self.get_form_class()
  194 + form = self.get_form(form_class)
  195 +
  196 + slug = self.kwargs.get('topic_slug', '')
  197 + topic = get_object_or_404(Topic, slug = slug)
  198 +
  199 + pendencies_form = InlinePendenciesFormset(self.request.POST, initial = [{'subject': topic.subject}])
  200 +
  201 + if (form.is_valid() and pendencies_form.is_valid()):
  202 + return self.form_valid(form, pendencies_form)
  203 + else:
  204 + return self.form_invalid(form, pendencies_form)
  205 +
  206 + def form_invalid(self, form, pendencies_form):
  207 + return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form))
  208 +
  209 + def form_valid(self, form, pendencies_form):
  210 + self.object = form.save(commit = False)
  211 +
  212 + slug = self.kwargs.get('topic_slug', '')
  213 + topic = get_object_or_404(Topic, slug = slug)
  214 +
  215 + self.object.topic = topic
  216 + self.object.order = topic.resource_topic.count() + 1
  217 +
  218 + self.object.save()
  219 +
  220 + pendencies_form.instance = self.object
  221 + pendencies_form.save()
  222 +
  223 + return redirect(self.get_success_url())
  224 +
  225 + def get_context_data(self, **kwargs):
  226 + context = super(UpdateView, self).get_context_data(**kwargs)
  227 +
  228 + context['title'] = _('Update Webpage')
  229 +
  230 + slug = self.kwargs.get('topic_slug', '')
  231 + topic = get_object_or_404(Topic, slug = slug)
  232 +
  233 + context['topic'] = topic
  234 + context['subject'] = topic.subject
  235 +
  236 + if self.request.POST:
  237 + context['form'] = WebpageForm(self.request.POST, instance=self.object, initial = {'subject': topic.subject})
  238 + context['pendencies_form'] = InlinePendenciesFormset(self.request.POST, instance=self.object)
  239 + else:
  240 + context['form'] = WebpageForm(instance=self.object, initial = {'subject': topic.subject})
  241 + context['pendencies_form'] = InlinePendenciesFormset(instance=self.object)
  242 +
  243 + return context
  244 +
  245 + def get_success_url(self):
  246 + messages.success(self.request, _('The Webpage "%s" was added to the Topic "%s" of the virtual environment "%s" successfully!')%(self.object.name, self.object.topic.name, self.object.topic.subject.name))
  247 +
  248 + success_url = reverse_lazy('webpages:view', kwargs = {'slug': self.object.slug})
  249 +
  250 + if self.object.show_window:
  251 + self.request.session['resources'] = {}
  252 + self.request.session['resources']['new_page'] = True
  253 + self.request.session['resources']['new_page_url'] = reverse('webpages:window_view', kwargs = {'slug': self.object.slug})
  254 +
  255 + success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug})
  256 +
158 257 return success_url
159 258 \ No newline at end of file
... ...