Exemple #1
0
    def put(self, request, app_label=None, actor=None):
        ui = settings.SITE.ui
        rpt = requested_actor(app_label, actor)
        PUT = http.QueryDict(request.body)  # raw_post_data before Django 1.4
        gc = dict(
            widths=[int(x)
                    for x in PUT.getlist(ext_requests.URL_PARAM_WIDTHS)],
            columns=[str(x)
                     for x in PUT.getlist(ext_requests.URL_PARAM_COLUMNS)],
            hiddens=[(x == 'true')
                     for x in PUT.getlist(ext_requests.URL_PARAM_HIDDENS)],
            #~ hidden_cols=[str(x) for x in PUT.getlist('hidden_cols')],
        )

        filter = PUT.get('filter', None)
        if filter is not None:
            filter = json.loads(filter)
            gc['filters'] = [ext_requests.dict2kw(flt) for flt in filter]

        name = PUT.get('name', None)
        if name is None:
            name = ext_elems.DEFAULT_GC_NAME
        else:
            name = int(name)

        gc.update(label=PUT.get('label', "Standard"))
        try:
            msg = rpt.save_grid_config(name, gc)
        except IOError, e:
            msg = _("Error while saving GC for %(table)s: %(error)s") % dict(
                table=rpt, error=e)
            return settings.SITE.ui.error(None, msg, alert=True)
Exemple #2
0
 def delete(self, request, app_label=None, actor=None, pk=None):
     #~ ui = settings.SITE.ui
     rpt = requested_actor(app_label, actor)
     #~ a = rpt.default_action
     #~ elem = rpt.get_row_by_pk(pk)
     ar = rpt.request(request=request)
     ar.set_selected_pks(pk)
     return delete_element(ar, ar.selected_rows[0])
Exemple #3
0
 def get(self, request, app_label=None, actor=None, pk=None):
     rpt = requested_actor(app_label, actor)
     assert pk is None, 20120814
     ar = rpt.request(request=request)
     rh = ar.ah
     rows = [
         rh.store.row2dict(ar, row, rh.store.list_fields)
         for row in ar.sliced_data_iterator]
     kw = dict(count=ar.get_total_count(), rows=rows)
     kw.update(title=unicode(ar.get_title()))
     return json_response(kw)
Exemple #4
0
 def get(self, request, app_label=None, actor=None, an=None, field=None, **kw):
     actor = requested_actor(app_label, actor)
     ba = actor.get_url_action(an)
     if ba is None:
         raise Exception("Unknown action %r for %s" % (an, actor))
     field = ba.action.get_param_elem(field)
     qs, row2dict = choices_for_field(request, actor, field)
     if field.blank:
         emptyValue = '<br/>'
     else:
         emptyValue = None
     return choices_response(request, qs, row2dict, emptyValue)
Exemple #5
0
    def put(self, request, app_label=None, actor=None, pk=None):
        rpt = requested_actor(app_label, actor)
        ar = rpt.request(request=request)
        ar.set_selected_pks(pk)
        elem = ar.selected_rows[0]
        rh = ar.ah

        data = http.QueryDict(request.body).get('rows')
        data = json.loads(data)
        a = rpt.get_url_action(rpt.default_list_action_name)
        ar = rpt.request(request=request, action=a)
        ar.renderer = settings.SITE.ui.extjs_renderer
        ar.form2obj_and_save(data, elem, False)
        # Ext.ensible needs list_fields, not detail_fields
        ar.set_response(
            rows=[rh.store.row2dict(ar, elem, rh.store.list_fields)])
        return json_response(ar.response)
Exemple #6
0
 def get(self, request, app_label=None, actor=None, pk=None):
     #~ ui = settings.SITE.ui
     rpt = requested_actor(app_label, actor)
     #~ a = rpt.default_action
     assert pk is None, 20120814
     #~ if pk is None:
         #~ elem = None
     #~ else:
         #~ elem = rpt.get_row_by_pk(pk)
     ar = rpt.request(request=request)
     rh = ar.ah
     rows = [
         rh.store.row2dict(ar, row, rh.store.list_fields)
         for row in ar.sliced_data_iterator]
     kw = dict(count=ar.get_total_count(), rows=rows)
     kw.update(title=unicode(ar.get_title()))
     return json_response(kw)
Exemple #7
0
    def put(self, request, app_label=None, actor=None, pk=None):
        #~ ui = settings.SITE.ui
        rpt = requested_actor(app_label, actor)
        #~ a = rpt.default_action
        #~ elem = rpt.get_row_by_pk(pk)
        ar = rpt.request(request=request)
        ar.set_selected_pks(pk)
        elem = ar.selected_rows[0]
        rh = ar.ah

        # raw_post_data before Django 1.4
        data = http.QueryDict(request.body).get('rows')
        data = json.loads(data)
        a = rpt.get_url_action(rpt.default_list_action_name)
        ar = rpt.request(request=request, action=a)
        ar.renderer = settings.SITE.ui.extjs_renderer
        # force_update=True)
        return form2obj_and_save(ar, data, elem, False, True)
Exemple #8
0
    def post(self, request, app_label=None, actor=None, pk=None):
        rpt = requested_actor(app_label, actor)
        ar = rpt.request(request=request)

        instance = ar.create_instance()
        # store uploaded files.
        # html forms cannot send files with PUT or GET, only with POST
        if ar.actor.handle_uploaded_files is not None:
            ar.actor.handle_uploaded_files(instance, request)

        data = request.POST.get('rows')
        data = json.loads(data)
        ar.form2obj_and_save(data, instance, True)

        # Ext.ensible needs list_fields, not detail_fields
        ar.set_response(
            rows=[ar.ah.store.row2dict(
                ar, instance, ar.ah.store.list_fields)])
        return json_response(ar.response)
Exemple #9
0
    def post(self, request, app_label=None, actor=None, pk=None):
        #~ ui = settings.SITE.ui
        rpt = requested_actor(app_label, actor)
        #~ if pk is None:
            #~ elem = None
        #~ else:
            #~ elem = rpt.get_row_by_pk(pk)
        ar = rpt.request(request=request)

        instance = ar.create_instance()
        # store uploaded files.
        # html forms cannot send files with PUT or GET, only with POST
        if ar.actor.handle_uploaded_files is not None:
            ar.actor.handle_uploaded_files(instance, request)

        data = request.POST.get('rows')
        #~ logger.info("20111217 Got POST %r",data)
        data = json.loads(data)
        #~ data = self.rest2form(request,rh,data)
        return form2obj_and_save(ar, data, instance, True, True)
Exemple #10
0
    def get(self, request, app_label=None, rptname=None, fldname=None, **kw):
        """
        Return a JSON object with two attributes `count` and `rows`,
        where `rows` is a list of `(display_text,value)` tuples.
        Used by ComboBoxes or similar widgets.
        If `fldname` is not specified, returns the choices for
        the `record_selector` widget.
        """
        rpt = requested_actor(app_label, rptname)
        emptyValue = None
        if fldname is None:
            ar = rpt.request(request=request)  # ,rpt.default_action)
            #~ rh = rpt.get_handle(self)
            #~ ar = ViewReportRequest(request,rh,rpt.default_action)
            #~ ar = dbtables.TableRequest(self,rpt,request,rpt.default_action)
            #~ rh = ar.ah
            #~ qs = ar.get_data_iterator()
            qs = ar.data_iterator
            #~ qs = rpt.request(self).get_queryset()

            def row2dict(obj, d):
                d[ext_requests.CHOICES_TEXT_FIELD] = unicode(obj)
                # getattr(obj,'pk')
                d[ext_requests.CHOICES_VALUE_FIELD] = obj.pk
                return d
        else:
            """
            NOTE: if you define a *parameter* with the same name
            as some existing *data element* name, then the parameter
            will override the data element. At least here in choices view.
            """
            #~ field = find_field(rpt.model,fldname)
            field = rpt.get_param_elem(fldname)
            if field is None:
                field = rpt.get_data_elem(fldname)
            if field.blank:
                #~ logger.info("views.Choices: %r is blank",field)
                emptyValue = '<br/>'
            qs, row2dict = choices_for_field(request, rpt, field)

        return choices_response(request, qs, row2dict, emptyValue)
Exemple #11
0
        def get(self, request,
                app_label=None, actor=None,
                pk=None, fldname=None, tplname=None, **kw):

            if request.method == 'GET':

                rpt = requested_actor(app_label, actor)
                elem = rpt.get_row_by_pk(None, pk)
                if elem is None:
                    raise http.Http404("%s %s does not exist." % (rpt, pk))

                TextFieldTemplate = settings.SITE.\
                    modules.system.TextFieldTemplate
                if tplname:
                    tft = TextFieldTemplate.objects.get(pk=int(tplname))
                    if settings.SITE.trusted_templates:
                        #~ return http.HttpResponse(tft.text)
                        template = JinjaTemplate(tft.text)
                        context = dict(request=request,
                                       instance=elem, **settings.SITE.modules)
                        return http.HttpResponse(template.render(**context))
                    else:
                        return http.HttpResponse(tft.text)

                teams = [o.group for o in
                         request.user.users_membership_set_by_user.all()]
                flt = models.Q(team__isnull=True) | models.Q(team__in=teams)
                qs = TextFieldTemplate.objects.filter(flt).order_by('name')

                templates = []
                for obj in qs:
                    url = settings.SITE.build_admin_url(
                        'templates',
                        app_label, actor, pk, fldname, unicode(obj.pk))
                    templates.append([
                        unicode(obj.name), url, unicode(obj.description)])
                js = "var tinyMCETemplateList = %s;" % py2js(templates)
                return http.HttpResponse(js, content_type='text/json')
            raise http.Http404("Method %r not supported" % request.method)
Exemple #12
0
 def old_delete(self, request, app_label=None, actor=None, pk=None):
     rpt = requested_actor(app_label, actor)
     ar = rpt.request(request=request)
     ar.set_selected_pks(pk)
     elem = ar.selected_rows[0]
     return delete_element(ar, elem)
Exemple #13
0
    def get(self, request, app_label=None, actor=None, pk=None):
        ui = settings.SITE.ui
        rpt = requested_actor(app_label, actor)

        action_name = request.GET.get(ext_requests.URL_PARAM_ACTION_NAME,
                                      rpt.default_elem_action_name)
        ba = rpt.get_url_action(action_name)
        if ba is None:
            raise http.Http404("%s has no action %r" % (rpt, action_name))

        if pk and pk != '-99999' and pk != '-99998':
            #~ ar = ba.request(request=request,selected_pks=[pk])
            #~ print 20131004, ba.actor
            ar = ba.request(request=request)

            ar.set_selected_pks(pk)
            elem = ar.selected_rows[0]
            if elem is None:
                raise http.Http404(
                    "%s has no row with primary key %r" % (rpt, pk))
        else:
            ar = ba.request(request=request)
            elem = None

        ar.renderer = ui.extjs_renderer
        ah = ar.ah

        fmt = request.GET.get(
            ext_requests.URL_PARAM_FORMAT, ba.action.default_format)

        if ba.action.opens_a_window:

            if fmt == ext_requests.URL_FORMAT_JSON:
                if pk == '-99999':
                    elem = ar.create_instance()
                    datarec = ar.elem2rec_insert(ah, elem)
                elif pk == '-99998':
                    elem = ar.create_instance()
                    datarec = elem2rec_empty(ar, ah, elem)
                else:
                    datarec = ar.elem2rec_detailed(elem)

                return json_response(datarec)

            after_show = ar.get_status(record_id=pk)

            tab = request.GET.get(ext_requests.URL_PARAM_TAB, None)
            if tab is not None:
                tab = int(tab)
                after_show.update(active_tab=tab)

            return http.HttpResponse(
                ui.extjs_renderer.html_page(
                    request, ba.action.label,
                    on_ready=ui.extjs_renderer.action_call(
                        request, ba, after_show)))

        if isinstance(ba.action, actions.RedirectAction):
            target = ba.action.get_target_url(elem)
            if target is None:
                raise http.Http404("%s failed for %r" % (ba, elem))
            return http.HttpResponseRedirect(target)

        if pk == '-99998':
            assert elem is None
            elem = ar.create_instance()
            ar.selected_rows = [elem]

        return settings.SITE.ui.run_action(ar)