示例#1
0
	def edit(self):
		request = self.request
		user = request.user

		if not user.SuperUserGlobal:
			self._security_failure()

		CM_ID = self._get_cmid()
		is_add = not CM_ID

		edit_values = self._get_edit_info(CM_ID, is_add)
		if is_add:
			is_alt_area = not not request.params.get('altarea')
		else:
			is_alt_area = edit_values.community.AlternativeArea

		data = request.model_state.form.data
		data['community'] = edit_values.community
		data['descriptions'] = edit_values.descriptions
		data['alt_names'] = edit_values.alt_names
		data['alt_areas'] = [str(x.Search_CM_ID) for x in edit_values.alt_areas]

		title = _('Manage Communities', request)
		return self._create_response_namespace(
			title, title,
			dict(
				community=edit_values.community, CM_ID=CM_ID, is_add=is_add,
				is_alt_area=is_alt_area, prov_state=edit_values.prov_state,
				alt_area_name_map=edit_values.alt_area_name_map,
				shown_cultures=edit_values.shown_cultures,
				record_cultures=syslanguage.active_record_cultures()),
			no_index=True)
示例#2
0
    def _get_request_info(self, chk_type, SuperUserGlobal, only_mine,
                          only_other, title_template):
        log.debug(
            "SuperUserGlobal, only_mine, only_other: %s,%s,%s",
            SuperUserGlobal,
            only_mine,
            only_other,
        )
        request = self.request

        chkitems, chkusage = self._get_edit_info(chk_type, only_mine,
                                                 only_other,
                                                 not SuperUserGlobal)

        record_cultures = syslanguage.active_record_cultures()
        domain, shown_cultures = viewbase.get_domain_and_show_cultures(
            request.params)

        title = (chk_type.CheckListName if request.viewdata.PrintMode else
                 title_template.format(chk_type.CheckListName))
        return self._create_response_namespace(
            title,
            title,
            dict(
                chkitems=chkitems,
                SuperUserGlobal=SuperUserGlobal,
                record_cultures=record_cultures,
                shown_cultures=shown_cultures,
                chkusage=chkusage,
                chk_type=chk_type,
            ),
            no_index=True,
        )
示例#3
0
    def edit(self):
        request = self.request
        user = request.user

        if not user.SuperUserGlobal:
            self._security_failure()

        model_state = request.model_state
        model_state.validators = {"MAP_ID": ciocvalidators.IDValidator()}
        model_state.method = None

        if not model_state.validate():
            # XXX invalid MAP_ID

            self._error_page(_("Invalid ID", request))

        MAP_ID = model_state.form.data.get("MAP_ID")
        is_add = not MAP_ID

        mapping = None
        mapping_descriptions = {}

        if not is_add:
            with request.connmgr.get_connection("admin") as conn:
                cursor = conn.execute("EXEC dbo.sp_GBL_MappingSystem_s ?",
                                      MAP_ID)
                mapping = cursor.fetchone()
                if mapping:
                    cursor.nextset()
                    for lng in cursor.fetchall():
                        mapping_descriptions[lng.Culture.replace("-",
                                                                 "_")] = lng

                cursor.close()

            if not mapping:
                # not found
                self._error_page(_("Mapping System Not Found", request))

        domain, shown_cultures = viewbase.get_domain_and_show_cultures(
            request.params)

        model_state.form.data["mapping"] = mapping
        model_state.form.data["descriptions"] = mapping_descriptions

        title = _("Manage Mapping Systems", request)
        return self._create_response_namespace(
            title,
            title,
            dict(
                mapping=mapping,
                MAP_ID=MAP_ID,
                is_add=is_add,
                shown_cultures=shown_cultures,
                record_cultures=syslanguage.active_record_cultures(),
            ),
            no_index=True,
        )
示例#4
0
    def edit(self):
        request = self.request
        user = request.user

        if not user.SuperUserGlobal:
            self._security_failure()

        model_state = request.model_state
        model_state.validators = {"SM_ID": ciocvalidators.IDValidator()}
        model_state.method = None

        if not model_state.validate():
            # XXX invalid SM_ID

            self._error_page(_("Invalid ID", request))

        SM_ID = model_state.form.data.get("SM_ID")
        is_add = not SM_ID

        socialmedia = None
        socialmedia_descriptions = {}

        if not is_add:
            with request.connmgr.get_connection("admin") as conn:
                cursor = conn.execute("EXEC dbo.sp_GBL_SocialMedia_s ?", SM_ID)
                socialmedia = cursor.fetchone()
                if socialmedia:
                    cursor.nextset()
                    for lng in cursor.fetchall():
                        socialmedia_descriptions[lng.Culture.replace(
                            "-", "_")] = lng

                cursor.close()

            if not socialmedia:
                # not found
                self._error_page(_("Social Media Type Not Found", request))

        domain, shown_cultures = viewbase.get_domain_and_show_cultures(
            request.params)

        model_state.form.data["socialmedia"] = socialmedia
        model_state.form.data["descriptions"] = socialmedia_descriptions

        title = _("Manage Social Media Types", request)
        return self._create_response_namespace(
            title,
            title,
            dict(
                socialmedia=socialmedia,
                SM_ID=SM_ID,
                is_add=is_add,
                shown_cultures=shown_cultures,
                record_cultures=syslanguage.active_record_cultures(),
            ),
            no_index=True,
        )
示例#5
0
	def _get_edit_info(self, num, BTPBID, number, base_params):
		request = self.request
		user = request.user

		publication = None
		publication_descriptions = {}

		fullorg = None
		generalheadings = []
		taxonomyheadings = []
		feedback = []


		with request.connmgr.get_connection('admin') as conn:
			sql = 'EXEC dbo.sp_CIC_NUMPub_s ?, ?, ?'
			cursor = conn.execute(sql, BTPBID, user.User_ID, request.viewdata.cic.ViewType)

			errordata = cursor.fetchone()

			if not errordata.Error:
				cursor.nextset()

				fullorg = cursor.fetchone().ORG_NAME_FULL

				cursor.nextset()

				publication = cursor.fetchone()

				cursor.nextset()

				for lng in cursor.fetchall():
					publication_descriptions[lng.Culture.replace('-', '_')] = lng

				cursor.nextset()

				generalheadings = cursor.fetchall()

				cursor.nextset()

				taxonomyheadings = cursor.fetchall()

				cursor.nextset()

				feedback = cursor.fetchall()

			cursor.close()

		if errordata.Error:

			self._error_page(errordata.ErrMsg or _('An unknown error occurred.', request))

		linked_headings = set(unicode(x.GH_ID) for x in generalheadings if x.SELECTED)

		record_cultures = [x for x in syslanguage.active_record_cultures() 
						if x.replace('-', '_') in publication_descriptions]

		return EditValues(publication, publication_descriptions, linked_headings, fullorg, generalheadings, taxonomyheadings, feedback, num, BTPBID, number, record_cultures)
示例#6
0
    def index(self):
        request = self.request
        user = request.user

        if not user.SuperUser:
            self._security_failure()

        domain, shown_cultures = viewbase.get_domain_and_show_cultures(
            request.params)
        if not domain:
            return self._go_to_page("~/admin/setup.asp")

        if (domain.id == const.DM_CIC
                and not user.cic.SuperUser) or (domain.id == const.DM_VOL
                                                and not user.vol.SuperUser):

            self._security_failure()

        fields = []
        with request.connmgr.get_connection("admin") as conn:
            cursor = conn.execute(
                "EXEC sp_%s_FieldOption_l_Hide ?" %
                ("GBL" if domain.id == const.DM_CIC else domain.str),
                request.MemberID,
            )
            fields = cursor.fetchall()
            cursor.close()

        for field in fields:
            field.Descriptions = self._culture_dict_from_xml(
                field.Descriptions, "DESC")

        # raise Exception

        record_cultures = syslanguage.active_record_cultures()

        request.model_state.form.data["HideField"] = [
            str(f.FieldID) for f in fields if f.InactiveByMember
        ]

        title = _("Manage Hidden Fields", request)
        return self._create_response_namespace(
            title,
            title,
            dict(
                fields=fields,
                record_cultures=record_cultures,
                domain=domain,
                shown_cultures=shown_cultures,
            ),
            no_index=True,
        )
示例#7
0
	def edit(self):
		request = self.request
		user = request.user

		if not user.SuperUserGlobal:
			self._security_failure()

		model_state = request.model_state
		model_state.validators = {
			'SM_ID': ciocvalidators.IDValidator()
		}
		model_state.method = None

		if not model_state.validate():
			# XXX invalid SM_ID

			self._error_page(_('Invalid ID', request))

		SM_ID = model_state.form.data.get('SM_ID')
		is_add = not SM_ID

		socialmedia = None
		socialmedia_descriptions = {}

		if not is_add:
			with request.connmgr.get_connection('admin') as conn:
				cursor = conn.execute('EXEC dbo.sp_GBL_SocialMedia_s ?', SM_ID)
				socialmedia = cursor.fetchone()
				if socialmedia:
					cursor.nextset()
					for lng in cursor.fetchall():
						socialmedia_descriptions[lng.Culture.replace('-', '_')] = lng

				cursor.close()

			if not socialmedia:
				# not found
				self._error_page(_('Social Media Type Not Found', request))

		domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)

		model_state.form.data['socialmedia'] = socialmedia
		model_state.form.data['descriptions'] = socialmedia_descriptions

		title = _('Manage Social Media Types', request)
		return self._create_response_namespace(
			title, title,
			dict(
				socialmedia=socialmedia, SM_ID=SM_ID, is_add=is_add,
				shown_cultures=shown_cultures,
				record_cultures=syslanguage.active_record_cultures()
			), no_index=True)
示例#8
0
	def _get_request_info(self, list_type, title_template):
		request = self.request

		listitems = self._get_edit_info(list_type)

		record_cultures = syslanguage.active_record_cultures()

		title = list_type.ListName if request.viewdata.PrintMode else title_template.format(list_type.ListName)
		return self._create_response_namespace(title, title,
				dict(
					listitems=listitems, SuperUserGlobal=request.context.SuperUserGlobal,
					record_cultures=record_cultures,
					list_type=list_type
				), no_index=True)
示例#9
0
    def index(self):
        request = self.request
        user = request.user

        if not user.SuperUser:
            self._security_failure()

        domain, shown_cultures = viewbase.get_domain_and_show_cultures(
            request.params)
        if not domain:
            return self._go_to_page("~/admin/setup.asp")

        if (domain.id == const.DM_CIC
                and not user.cic.SuperUser) or (domain.id == const.DM_VOL
                                                and not user.vol.SuperUser):
            self._security_failure()

        fields = []
        with request.connmgr.get_connection() as conn:
            cursor = conn.execute("EXEC sp_%s_Field_Radio_l" % domain.str)
            fields = cursor.fetchall()
            cursor.close()

        for field in fields:
            field.Descriptions = self._culture_dict_from_xml(
                field.Descriptions, "DESC")

        # raise Exception

        record_cultures = syslanguage.active_record_cultures()

        fieldinfo_map = {str(f.FieldID): f for f in fields}
        request.model_state.form.data["field"] = fields

        title = _("Change Field Yes/No Values", request)
        return self._create_response_namespace(
            title,
            title,
            dict(
                fields=fields,
                record_cultures=record_cultures,
                domain=domain,
                shown_cultures=shown_cultures,
                fieldinfo_map=fieldinfo_map,
            ),
            no_index=True,
        )
示例#10
0
	def _get_request_info(self, chk_type, SuperUserGlobal, only_mine, only_other, title_template):
		log.debug('SuperUserGlobal, only_mine, only_other: %s,%s,%s', SuperUserGlobal, only_mine, only_other)
		request = self.request

		chkitems, chkusage = self._get_edit_info(chk_type, only_mine, only_other, not SuperUserGlobal)

		record_cultures = syslanguage.active_record_cultures()
		domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)

		title = chk_type.CheckListName if request.viewdata.PrintMode else title_template.format(chk_type.CheckListName)
		return self._create_response_namespace(
			title, title,
			dict(
			chkitems=chkitems, SuperUserGlobal=SuperUserGlobal,
			record_cultures=record_cultures,
			shown_cultures=shown_cultures, chkusage=chkusage, chk_type=chk_type),
			no_index=True)
示例#11
0
    def _get_interest_info(self):
        request = self.request
        user = request.user

        if not user.vol.SuperUser:
            self._security_failure()

        with request.connmgr.get_connection("admin") as conn:
            cursor = conn.execute(
                "EXEC sp_VOL_Interest_lf ?", request.dboptions.MemberID
            )
            interests = cursor.fetchall()
            cursor.close()

        for interest in interests:
            interest.Descriptions = self._culture_dict_from_xml(
                interest.Descriptions, "DESC"
            )
            if interest.Groups is not None:
                interest.Groups = " ; ".join(
                    x["Name"]
                    for x in self._dict_list_from_xml(interest.Groups, "GROUP")
                    if x.get("Name")
                )

        request.model_state.form.data["ChkHide"] = [
            str(x.AI_ID) for x in interests if x.Hidden
        ]
        domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)
        record_cultures = syslanguage.active_record_cultures()

        title = _("Manage Areas of Interest", request)
        return self._create_response_namespace(
            title,
            title,
            dict(
                interests=interests,
                record_cultures=record_cultures,
                shown_cultures=shown_cultures,
            ),
            no_index=True,
        )
示例#12
0
    def _get_request_info(self, list_type, title_template):
        request = self.request

        listitems = self._get_edit_info(list_type)

        record_cultures = syslanguage.active_record_cultures()

        title = (list_type.ListName if request.viewdata.PrintMode else
                 title_template.format(list_type.ListName))
        return self._create_response_namespace(
            title,
            title,
            dict(
                listitems=listitems,
                SuperUserGlobal=request.context.SuperUserGlobal,
                record_cultures=record_cultures,
                list_type=list_type,
            ),
            no_index=True,
        )
示例#13
0
    def edit(self):
        request = self.request
        user = request.user

        if not user.SuperUserGlobal:
            self._security_failure()

        CM_ID = self._get_cmid()
        is_add = not CM_ID

        edit_values = self._get_edit_info(CM_ID, is_add)
        if is_add:
            is_alt_area = not not request.params.get("altarea")
        else:
            is_alt_area = edit_values.community.AlternativeArea

        data = request.model_state.form.data
        data["community"] = edit_values.community
        data["descriptions"] = edit_values.descriptions
        data["alt_names"] = edit_values.alt_names
        data["alt_areas"] = [
            str(x.Search_CM_ID) for x in edit_values.alt_areas
        ]

        title = _("Manage Communities", request)
        return self._create_response_namespace(
            title,
            title,
            dict(
                community=edit_values.community,
                CM_ID=CM_ID,
                is_add=is_add,
                is_alt_area=is_alt_area,
                prov_state=edit_values.prov_state,
                alt_area_name_map=edit_values.alt_area_name_map,
                shown_cultures=edit_values.shown_cultures,
                record_cultures=syslanguage.active_record_cultures(),
            ),
            no_index=True,
        )
示例#14
0
	def _get_interest_info(self):
		request = self.request
		user = request.user

		if not user.vol.SuperUser:
			self._security_failure()

		with request.connmgr.get_connection('admin') as conn:
			cursor = conn.execute('EXEC sp_VOL_Interest_lf ?', request.dboptions.MemberID)
			interests = cursor.fetchall()
			cursor.close()

		for interest in interests:
			interest.Descriptions = self._culture_dict_from_xml(interest.Descriptions, 'DESC')
			if interest.Groups is not None:
				interest.Groups = ' ; '.join(x['Name'] for x in self._dict_list_from_xml(interest.Groups, 'GROUP') if x.get('Name'))

		request.model_state.form.data['ChkHide'] = [unicode(x.AI_ID) for x in interests if x.Hidden]
		domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)
		record_cultures = syslanguage.active_record_cultures()

		title = _('Manage Areas of Interest', request)
		return self._create_response_namespace(title, title, dict(interests=interests, record_cultures=record_cultures, shown_cultures=shown_cultures), no_index=True)
示例#15
0
	def index(self):
		request = self.request
		user = request.user

		if not user.SuperUser:
			self._security_failure()

		domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)
		if not domain:
			return self._go_to_page('~/admin/setup.asp')

		if (domain.id == const.DM_CIC and not user.cic.SuperUser) or \
				(domain.id == const.DM_VOL and not user.vol.SuperUser):
			self._security_failure()

		fields = []
		with request.connmgr.get_connection() as conn:
			cursor = conn.execute('EXEC sp_%s_Field_Radio_l' % domain.str)
			fields = cursor.fetchall()
			cursor.close()

		
		for field in fields:
			field.Descriptions = self._culture_dict_from_xml(field.Descriptions, 'DESC')
			
		#raise Exception

		record_cultures = syslanguage.active_record_cultures()

		fieldinfo_map = dict((str(f.FieldID), f) for f in fields)
		request.model_state.form.data['field'] = fields

		title = _('Change Field Yes/No Values', request)
		return self._create_response_namespace(title, title,
				dict(fields=fields, record_cultures=record_cultures,
					domain=domain, shown_cultures=shown_cultures, fieldinfo_map=fieldinfo_map),
				no_index=True)
示例#16
0
	def index(self):
		request = self.request
		user = request.user

		if not user.SuperUser:
			self._security_failure()

		domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)
		if not domain:
			return self._go_to_page('~/admin/setup.asp')

		if (domain.id == const.DM_CIC and not user.cic.SuperUser) or \
				(domain.id == const.DM_VOL and not user.vol.SuperUser):

			self._security_failure()

		fields = []
		with request.connmgr.get_connection('admin') as conn:
			cursor = conn.execute('EXEC sp_%s_FieldOption_l_Hide ?' % ('GBL' if domain.id == const.DM_CIC else domain.str), request.MemberID)
			fields = cursor.fetchall()
			cursor.close()

		
		for field in fields:
			field.Descriptions = self._culture_dict_from_xml(field.Descriptions, 'DESC')
			
		#raise Exception

		record_cultures = syslanguage.active_record_cultures()

		request.model_state.form.data['HideField'] = [str(f.FieldID) for f in fields if f.InactiveByMember]

		title = _('Manage Hidden Fields', request)
		return self._create_response_namespace(title, title,
				dict(fields=fields, record_cultures=record_cultures,
					domain=domain, shown_cultures=shown_cultures),
				no_index=True)
示例#17
0
    def save(self):
        request = self.request
        user = request.user

        ViewType, domain, shown_cultures = self._basic_info()

        model_state = request.model_state
        model_state.schema = PostSchema()

        model_state.form.variable_decode = True

        if model_state.validate():
            # valid. Save changes and redirect

            root = ET.Element("GROUPS")
            for i, group in enumerate(model_state.form.data["group"]):
                if not group.get("DisplayFieldGroupID"):
                    continue

                if group.get("delete"):
                    continue

                if all(not v for k, v in group.items()
                       if not (k == "DisplayFieldGroupID" and v == "NEW")):
                    continue

                group_el = ET.SubElement(root, "GROUP")
                ET.SubElement(group_el, "CNT").text = str(i)

                for key, value in group.items():
                    if key == "DisplayFieldGroupID" and value == "NEW":
                        value = -1

                    if key != "Descriptions":
                        if value is not None:
                            ET.SubElement(group_el, key).text = str(value)
                        continue

                    descs = ET.SubElement(group_el, "DESCS")
                    for culture, data in value.items():
                        culture = culture.replace("_", "-")
                        if culture not in shown_cultures:
                            continue

                        desc = ET.SubElement(descs, "DESC")
                        ET.SubElement(desc, "Culture").text = culture
                        for key, value in data.items():
                            if value:
                                ET.SubElement(desc, key).text = value

            args = [
                ViewType,
                user.Mod,
                request.dboptions.MemberID,
                user.Agency,
                ET.tostring(root, encoding="unicode"),
            ]

            # raise Exception
            with request.connmgr.get_connection("admin") as conn:
                sql = ("""
                DECLARE @ErrMsg as nvarchar(500),
                @RC as int

                EXECUTE @RC = dbo.sp_%s_View_DisplayFieldGroup_u ?, ?, ?, ?, ?, @ErrMsg OUTPUT

                SELECT @RC as [Return], @ErrMsg AS ErrMsg
                """ % domain.str)

                cursor = conn.execute(sql, *args)
                result = cursor.fetchone()
                cursor.close()

            if not result.Return:

                self._go_to_route(
                    "admin_view",
                    action="fieldgroup",
                    _query=[
                        (
                            "InfoMsg",
                            _("The Field Groups were successfully updated.",
                              request),
                        ),
                        ("ShowCultures", shown_cultures),
                        ("DM", domain.id),
                        ("ViewType", ViewType),
                    ],
                )

            ErrMsg = _("Unable to save: ") + result.ErrMsg

        else:
            ErrMsg = _("There were validation errors.")

        groups = []
        with request.connmgr.get_connection("admin") as conn:
            groups = conn.execute(
                "EXEC sp_%s_View_DisplayFieldGroup_lf ?, ?, ?, 1" % domain.str,
                request.dboptions.MemberID,
                user.Agency,
                ViewType,
            ).fetchall()

        # errors = model_state.form.errors
        # raise Exception()
        # XXX should we refetch the basic info?

        groups = variabledecode.variable_decode(request.POST)["group"]
        model_state.form.data["group"] = groups

        record_cultures = syslanguage.active_record_cultures()

        title = _("Change Field Groups", request)
        return self._create_response_namespace(
            title,
            title,
            dict(
                groups=groups,
                record_cultures=record_cultures,
                domain=domain,
                shown_cultures=shown_cultures,
                ViewType=ViewType,
                ErrMsg=ErrMsg,
            ),
            no_index=True,
            print_table=False,
        )
示例#18
0
    def index(self):
        request = self.request
        user = request.user

        log.debug("before basic info: %s", user)
        ViewType, domain, shown_cultures = self._basic_info()
        log.debug("after basic info")

        groups = []
        viewinfo = None
        with request.connmgr.get_connection("admin") as conn:
            log.debug("before execute")
            cursor = conn.execute(
                "EXEC sp_%s_View_DisplayFieldGroup_lf ?, ?, ?" % domain.str,
                request.dboptions.MemberID,
                user.Agency,
                ViewType,
            )
            log.debug("cursor")

            viewinfo = cursor.fetchone()
            log.debug("viewinfo")
            if viewinfo:

                cursor.nextset()
                log.debug("nextset")

                groups = cursor.fetchall()

            log.debug("before close")
            cursor.close()

        if not viewinfo:  # not a valid view
            log.debug("redirect")
            self._error_page(_("View Not Found", request))

        log.debug("descriptions")
        for group in groups:
            group.Descriptions = self._culture_dict_from_xml(
                group.Descriptions, "DESC")

        log.debug("record_cultures")
        # raise Exception

        record_cultures = syslanguage.active_record_cultures()

        request.model_state.form.data["group"] = groups

        title = _("Field Groups (%s)", request) % viewinfo.ViewName

        return self._create_response_namespace(
            title,
            title,
            dict(
                groups=groups,
                record_cultures=record_cultures,
                ViewType=ViewType,
                domain=domain,
                shown_cultures=shown_cultures,
            ),
            no_index=True,
            print_table=False,
        )
示例#19
0
    def save(self):
        request = self.request
        user = request.user

        list_type = self.request.context.list_type
        self._check_security(list_type, True)

        extra_validators = {}
        if list_type.ID:
            extra_validators = {
                list_type.ID or "OldValue":
                Any(list_type.id_validator, validators.OneOf(["NEW"]))
            }

        extra_validators[list_type.NameField] = validators.UnicodeString(
            max=list_type.NameFieldMaxLength)

        for field in list_type.ExtraFields or []:
            extra_validators[field["field"]] = field["validator"]

        base_schema = ListBaseSchema(**extra_validators)
        schema_params = {"listitem": foreach.ForEach(base_schema)}
        schema = PostSchema(**schema_params)

        model_state = request.model_state
        model_state.schema = schema

        model_state.form.variable_decode = True

        if model_state.validate():
            # valid. Save changes and redirect

            root = ET.Element("CHECKLIST")
            for listitem in model_state.form.data["listitem"]:
                if list_type.ID and not listitem.get(list_type.ID):
                    continue

                if not listitem.get(list_type.NameField):
                    continue

                if list_type.CanDelete and listitem.get("delete"):
                    continue

                list_el = ET.SubElement(root, "CHK")

                for key, value in listitem.items():
                    if key == list_type.ID and value == "NEW":
                        value = -1

                    elif isinstance(value, bool):
                        value = int(value)

                    if value is not None:
                        ET.SubElement(list_el, key).text = str(value)

            if list_type.HasModified:
                args = [user.Mod, ET.tostring(root, encoding="unicode")]
            else:
                args = [ET.tostring(root, encoding="unicode")]

            with request.connmgr.get_connection("admin") as conn:
                sql = """
                    DECLARE @RC int, @ErrMsg nvarchar(500)
                    EXEC @RC = sp_{}_u {}, @ErrMsg OUTPUT
                    SELECT @RC AS [Return], @ErrMsg AS ErrMsg""".format(
                    list_type.Table,
                    ",".join("?" * len(args)),
                )
                cursor = conn.execute(sql, *args)
                result = cursor.fetchone()
                cursor.close()

            if not result.Return:

                self._go_to_route(
                    request.matched_route.name,
                    _query=(
                        (
                            "InfoMsg",
                            _("The record(s) were successfully updated.",
                              request),
                        ),
                        ("list", list_type.FieldCode),
                    ),
                )

            ErrMsg = _("Unable to save: ") + result.ErrMsg

        else:
            ErrMsg = _("There were validation errors.")

        listitems = self._get_edit_info(list_type)

        record_cultures = syslanguage.active_record_cultures()
        listitems = variabledecode.variable_decode(request.POST)["listitem"]
        model_state.form.data["listitem"] = listitems

        title_template = _(list_type.PageTitleTemplate, self.request)
        title = (list_type.ListName if request.viewdata.PrintMode else
                 title_template.format(list_type.ListName))
        return self._create_response_namespace(
            title,
            title,
            dict(
                listitems=listitems,
                record_cultures=record_cultures,
                SuperUserGlobal=request.context.SuperUserGlobal,
                list_type=list_type,
                ErrMsg=ErrMsg,
            ),
            no_index=True,
        )
示例#20
0
    def _get_edit_info(self, is_add, reminder_id, is_error=False):
        request = self.request

        reminder = None
        reminder_users = []
        reminder_agencies = []
        nums = []
        vnums = []

        agencies = []
        note_types = []

        with request.connmgr.get_connection("admin") as conn:
            if not is_add:
                sql = """EXEC sp_GBL_Reminder_s ?, ?"""
                cursor = conn.execute(sql, request.dboptions.MemberID, reminder_id)

                reminder = cursor.fetchone()

                if not reminder:
                    request.response.status = "404 Not Found"
                    return {
                        "ErrMsg": _("Reminder not found", request),
                        "ErrorPage": True,
                    }

                if not is_error:

                    cursor.nextset()
                    reminder_users = cursor.fetchall()

                    cursor.nextset()
                    reminder_agencies = cursor.fetchall()

                    cursor.nextset()
                    nums = cursor.fetchall()

                    cursor.nextset()
                    vnums = cursor.fetchall()

                cursor.close()

            cursor = conn.execute(
                """
                        EXEC sp_GBL_Agency_l ?, ?
                        EXEC sp_GBL_RecordNote_Type_l
                        """,
                request.dboptions.MemberID,
                False,
            )

            agencies = [x.AgencyCode for x in cursor.fetchall()]

            cursor.nextset()
            note_types = [
                (x[0], ("[ ! ] " if x[1] else "") + x[2]) for x in cursor.fetchall()
            ]

            cursor.close()

        org_names = ((x[0], x.ORG_NAME_FULL) for x in nums)
        org_names = {k: v for k, v in org_names if v}
        pos_titles = {str(k): v for k, v in vnums if v}

        data = request.model_state.form.data
        if not is_add:
            if not is_error:
                data["reminder"] = reminder
                data["reminder_user_ID"] = [str(x[0]) for x in reminder_users]
                data["reminder_agency_ID"] = [x[0] for x in reminder_agencies]
                data["NUM"] = [x[0] for x in nums]
                data["VNUM"] = [str(x[0]) for x in vnums]

        if is_add or is_error:
            data["NUM"] = request.params.getall("NUM")
            data["VNUM"] = request.params.getall("VNUM")

        if not is_add or is_error:
            val = request.model_state.value("reminder.DismissForAll")
            data["reminder.DismissForAll"] = dismiss_options_reverse.get(
                val, val if val is not None else "S"
            )

        namespace = {
            "_": lambda x: i18n.gettext(x, request),
            "format_date": lambda x: i18n.format_date(x, request),
            "reminder": reminder,
            "record_cultures": syslanguage.active_record_cultures(),
            "culture_map": syslanguage.culture_map(),
            "agencies": agencies,
            "note_types": note_types,
            "ReminderID": reminder_id,
            "reminder_users": reminder_users,
            "reminder_agencies": reminder_agencies,
            "org_names": org_names,
            "position_titles": pos_titles,
            "renderer": request.model_state.renderer,
        }
        return {"form": render(templateprefix + "edit_form.mak", namespace, request)}
示例#21
0
    def save(self):
        request = self.request
        user = request.user

        if not user.SuperUserGlobal:
            self._security_failure()

        is_alt_area = not not request.params.get("altarea")

        CM_ID = self._get_cmid()
        is_add = not CM_ID

        if not is_add and request.POST.get("Delete"):
            self._go_to_route("admin_community",
                              action="delete",
                              _query=[("CM_ID", CM_ID)])

        model_state = request.model_state
        model_state.form.variable_decode = True
        if is_alt_area:
            log.debug("alt area")
            model_state.schema = AltAreasSchema()
        else:
            log.debug("community")
            model_state.schema = CommunitySchema()

        domain, shown_cultures = viewbase.get_domain_and_show_cultures(
            request.params)

        if model_state.validate():
            # valid. Save changes and redirect
            data = model_state.form.data
            cm_data = data.get("community", {})
            args = [
                CM_ID,
                user.Mod,
                is_alt_area,
                cm_data.get("ParentCommunity"),
                cm_data.get("ProvinceState"),
            ]

            root = ET.Element("DESCS")

            for culture, description in (
                    model_state.form.data["descriptions"]).items():
                if culture.replace("_", "-") not in shown_cultures:
                    continue

                desc = ET.SubElement(root, "DESC")
                ET.SubElement(desc, "Culture").text = culture.replace("_", "-")
                for name, value in description.items():
                    if value:
                        ET.SubElement(desc, name).text = value

            args.append(ET.tostring(root, encoding="unicode"))

            root = ET.Element("NAMES")

            for name in model_state.form.data.get("alt_names") or []:
                if (name.get("Delete") or not name.get("AltName")
                        or (not name.get("New") and name["Culture"].replace(
                            "_", "-") not in shown_cultures)):
                    continue

                desc = ET.SubElement(root, "Name")
                ET.SubElement(desc, "Culture").text = name["Culture"]
                ET.SubElement(desc, "AltName").text = name["AltName"]

            args.append(ET.tostring(root, encoding="unicode"))

            if is_alt_area:
                root = ET.Element("ALTAREAS")
                for area in data.get("alt_areas") or []:
                    ET.SubElement(root, "CM_ID").text = str(area)

                args.append(ET.tostring(root, encoding="unicode"))

            else:
                args.append(None)

            root = ET.Element("ShownCultures")
            for culture in shown_cultures:
                ET.SubElement(root, "Culture").text = culture

            args.append(ET.tostring(root, encoding="unicode"))

            sql = """
                DECLARE @ErrMsg as nvarchar(500),
                @RC as int,
                @CM_ID as int

                SET @CM_ID = ?

                EXECUTE @RC = dbo.sp_GBL_Community_u @CM_ID OUTPUT, %s, @ErrMsg=@ErrMsg OUTPUT

                SELECT @RC as [Return], @ErrMsg AS ErrMsg, @CM_ID as CM_ID
                """ % ", ".join("?" * (len(args) - 1))
            with request.connmgr.get_connection("admin") as conn:
                result = conn.execute(sql, *args).fetchone()

            if not result.Return:
                CM_ID = result.CM_ID
                if is_alt_area:
                    if is_add:
                        msg = _(
                            "The Alternate Search Area was successfully added.",
                            request)
                    else:
                        msg = _(
                            "The Alternate Search Area was successfully updated.",
                            request,
                        )
                else:
                    if is_add:
                        msg = _("The Community was successfully added.",
                                request)
                    else:
                        msg = _("The Community was successfully updated.",
                                request)

                self._go_to_route(
                    "admin_community",
                    action="edit",
                    _query=[
                        ("InfoMsg", msg),
                        ("CM_ID", CM_ID),
                        ("ShowCultures", shown_cultures),
                    ],
                )

            ErrMsg = _("Unable to save: ") + result.ErrMsg

            alt_areas = data.get("alt_areas") or []

        else:
            ErrMsg = _("There were validation errors.")

            data = model_state.form.data
            decoded = variable_decode(request.POST)
            alt_areas = decoded.get("alt_areas") or []

            data["alt_areas"] = alt_areas
            data["alt_names"] = decoded.get("alt_names") or []

        edit_values = self._get_edit_info(CM_ID, is_add, alt_areas)

        record_cultures = syslanguage.active_record_cultures()

        # XXX should we refetch the basic info?
        title = _("Manage Communities", request)
        return self._create_response_namespace(
            title,
            title,
            dict(
                community=edit_values.community,
                CM_ID=CM_ID,
                is_alt_area=is_alt_area,
                prov_state=edit_values.prov_state,
                alt_area_name_map=edit_values.alt_area_name_map,
                shown_cultures=shown_cultures,
                record_cultures=record_cultures,
                is_add=is_add,
                ErrMsg=ErrMsg,
            ),
            no_index=True,
        )
示例#22
0
	def list(self):
		if self.record_cultures:
			return syslanguage.active_record_cultures()

		return syslanguage.active_cultures()
示例#23
0
    def save(self):
        request = self.request

        if request.POST.get("Delete"):
            self._go_to_route(
                "admin_interests",
                action="delete",
                _query=[("AI_ID", request.POST.get("AI_ID"))],
            )

        user = request.user

        if not user.vol.SuperUserGlobal:
            self._security_failure()

        model_state = request.model_state
        model_state.schema = InterestSchema()
        model_state.form.variable_decode = True

        validator = validators.IDValidator()
        try:
            AI_ID = validator.to_python(request.POST.get("AI_ID"))
        except validators.Invalid:
            self._error_page(_("Invalid Interest ID", request))

        is_add = not AI_ID

        domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)

        if model_state.validate():
            # valid. Save changes and redirect
            args = [AI_ID, user.Mod, model_state.value("Code")]

            root = ET.Element("DESCS")

            for culture, data in model_state.form.data["descriptions"].items():
                if culture.replace("_", "-") not in shown_cultures:
                    continue

                desc = ET.SubElement(root, "DESC")
                ET.SubElement(desc, "Culture").text = culture.replace("_", "-")
                for name, value in data.items():
                    if value:
                        ET.SubElement(desc, name).text = value

            args.append(ET.tostring(root, encoding="unicode"))

            root = ET.Element("GROUPS")
            for group_id in model_state.form.data["groups"]:
                ET.SubElement(root, "GROUP").text = str(group_id)

            args.append(ET.tostring(root, encoding="unicode"))

            with request.connmgr.get_connection("admin") as conn:
                sql = """
                DECLARE @ErrMsg as nvarchar(500),
                @RC as int,
                @AI_ID as int

                SET @AI_ID = ?

                EXECUTE @RC = dbo.sp_VOL_Interest_u @AI_ID OUTPUT, %s, @ErrMsg=@ErrMsg OUTPUT

                SELECT @RC as [Return], @ErrMsg AS ErrMsg, @AI_ID as AI_ID
                """ % ", ".join(
                    "?" * (len(args) - 1)
                )

                cursor = conn.execute(sql, *args)
                result = cursor.fetchone()
                cursor.close()

            if not result.Return:
                AI_ID = result.AI_ID

                self._go_to_route(
                    "admin_interests",
                    action="edit",
                    _query=[
                        (
                            "InfoMsg",
                            _("The Interests were successfully updated.", request),
                        ),
                        ("AI_ID", AI_ID),
                        ("ShowCultures", shown_cultures),
                    ],
                )

            ErrMsg = _("Unable to save: ") + result.ErrMsg

        else:

            ErrMsg = _("There were validation errors.")

        interest = None
        group_descs = []

        with request.connmgr.get_connection("admin") as conn:
            cursor = conn.execute("EXEC dbo.sp_VOL_Interest_s_FormLists")

            group_descs = cursor.fetchall()

            cursor.close()

            if not is_add:
                cursor = conn.execute("EXEC dbo.sp_VOL_Interest_s ?", AI_ID)

                interest = cursor.fetchone()

                cursor.close()

        record_cultures = syslanguage.active_record_cultures()
        model_state.form.data["groups"] = request.POST.getall("groups")

        title = _("Manage Areas of Interest", request)
        return self._create_response_namespace(
            title,
            title,
            dict(
                interest=interest,
                AI_ID=AI_ID,
                shown_cultures=shown_cultures,
                record_cultures=record_cultures,
                group_descs=group_descs,
                is_add=is_add,
                ErrMsg=ErrMsg,
            ),
            no_index=True,
        )
示例#24
0
	def save(self):
		request = self.request
		user = request.user

		if not user.SuperUserGlobal:
			self._security_failure()


		domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)
		if not domain:
			return self._go_to_page('~/admin/setup.asp')

		if (domain.id == const.DM_CIC and not user.cic.SuperUserGlobal) or \
				(domain.id == const.DM_VOL and not user.vol.SuperUserGlobal):

			self._security_failure()

		model_state = request.model_state
		model_state.schema = PostSchema()

		model_state.form.variable_decode = True


		if model_state.validate():
			# valid. Save changes and redirect

			root = ET.Element('FIELDS')
			for field in model_state.form.data['field']:
				field_el = ET.SubElement(root, 'Field')
				for key,value in field.iteritems():
					if not value:
						continue 

					if key != 'Descriptions':
						ET.SubElement(field_el, key).text = unicode(value)
						continue

					descs = ET.SubElement(field_el, 'DESCS')
					for culture, data in value.iteritems():
						culture = culture.replace('_', '-')
						if culture not in shown_cultures:
							continue 

						desc = ET.SubElement(descs, 'DESC')
						ET.SubElement(desc, 'Culture').text = culture.replace('_', '-')
						for key, value in data.iteritems():
							if value:
								ET.SubElement(desc, key).text = value



			args = [user.Mod, ET.tostring(root)]

			#raise Exception
			with request.connmgr.get_connection('admin') as conn:
				sql = '''
				DECLARE @ErrMsg as nvarchar(500), 
				@RC as int 

				EXECUTE @RC = dbo.sp_%s_Field_Radio_u ?, ?, @ErrMsg OUTPUT  

				SELECT @RC as [Return], @ErrMsg AS ErrMsg
				''' % domain.str

				cursor = conn.execute(sql, *args)
				result = cursor.fetchone()
				cursor.close()

			if not result.Return:

				self._go_to_route('admin_fieldradio', 
						_query=(('InfoMsg', _('The Yes/No values were updated successfully.', request)), 
							('ShowCultures', shown_cultures ), 
							('DM', domain.id)))

			ErrMsg = _('Unable to save: ') + result.ErrMsg

		else:
			ErrMsg = _('There were validation errors.')


		fields = []
		with request.connmgr.get_connection('admin') as conn:
			fields = conn.execute('EXEC sp_%s_Field_Radio_l 1' % domain.str).fetchall()

		#errors = model_state.form.errors
		#raise Exception()
		# XXX should we refetch the basic info?

		fieldinfo_map = dict((str(f.FieldID), f) for f in fields)

		fields = variabledecode.variable_decode(request.POST)['field']

		record_cultures = syslanguage.active_record_cultures()

		title = _('Change Field Yes/No Values', request)
		return self._create_response_namespace(title, title,
				dict(fields=fields, record_cultures=record_cultures,
					domain=domain, shown_cultures=shown_cultures, 
					fieldinfo_map=fieldinfo_map, ErrMsg=ErrMsg),
				no_index=True)
示例#25
0
    def list(self):
        if self.record_cultures:
            return syslanguage.active_record_cultures()

        return syslanguage.active_cultures()
示例#26
0
	def save(self):
		request = self.request
		user = request.user

		if not user.SuperUser:
			self._security_failure()

		

		domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)
		if not domain:
			return self._go_to_page('~/admin/setup.asp')

		if (domain.id == const.DM_CIC and not user.cic.SuperUser) or \
				(domain.id == const.DM_VOL and not user.vol.SuperUser):

			self._security_failure()

		model_state = request.model_state
		model_state.schema = PostSchema()
		model_state.form.variable_decode = True

		if model_state.validate():
			# valid. Save changes and redirect

			args = [request.dboptions.MemberID, ','.join(map(str,model_state.value('HideField') or []))]

			sql = '''
			DECLARE @ErrMsg as nvarchar(500), 
			@RC as int 

			EXECUTE @RC = dbo.sp_%s_Fields_u_InactiveByMember ?,?, @ErrMsg OUTPUT  

			SELECT @RC as [Return], @ErrMsg AS ErrMsg
			''' % domain.str

			#raise Exception
			with request.connmgr.get_connection('admin') as conn:

				cursor = conn.execute(sql, *args)
				result = cursor.fetchone()
				cursor.close()

			if not result.Return:

				self._go_to_route('admin_fieldhide', 
						_query=(('InfoMsg', _('The Fields were sucessfully updated.', request)), 
							('ShowCultures', shown_cultures ), 
							('DM', domain.id)))

			ErrMsg = _('Unable to save: ') + result.ErrMsg

		else:
			ErrMsg = _('There were validation errors.')


		fields = []
		with request.connmgr.get_connection('admin') as conn:
			fields = conn.execute('EXEC sp_%s_FieldOption_l_Hide ?' % ('GBL' if domain.id == const.DM_CIC else domain.str), request.MemberID).fetchall()

		#errors = model_state.form.errors
		#raise Exception()
		# XXX should we refetch the basic info?

		for field in fields:
			field.Descriptions = self._culture_dict_from_xml(field.Descriptions, 'DESC')

		record_cultures = syslanguage.active_record_cultures()

		title = _('Manage Hidden Fields', request)
		return self._create_response_namespace(title, title,
				dict(fields=fields, record_cultures=record_cultures,
					domain=domain, shown_cultures=shown_cultures, 
					ErrMsg=ErrMsg),
				no_index=True)
示例#27
0
    def save(self):
        request = self.request

        if request.POST.get("Delete"):
            self._go_to_route(
                "admin_socialmedia",
                action="delete",
                _query=[("SM_ID", request.POST.get("SM_ID"))],
            )

        user = request.user

        if not user.SuperUserGlobal:
            self._security_failure()

        model_state = request.model_state
        model_state.schema = SocialMediaSchema()
        model_state.form.variable_decode = True

        validator = ciocvalidators.IDValidator()
        try:
            SM_ID = validator.to_python(request.POST.get("SM_ID"))
        except validators.Invalid:
            self._error_page(_("Invalid Social Media Type ID", request))

        is_add = not SM_ID

        domain, shown_cultures = viewbase.get_domain_and_show_cultures(
            request.params)

        if model_state.validate():
            # valid. Save changes and redirect
            args = [SM_ID, user.Mod]
            socialmedia = model_state.form.data.get("socialmedia", {})
            args.extend(socialmedia.get(x) for x in socialmedia_fields)

            root = ET.Element("DESCS")

            for culture, data in model_state.form.data["descriptions"].items():
                if culture.replace("_", "-") not in shown_cultures:
                    continue

                desc = ET.SubElement(root, "DESC")
                ET.SubElement(desc, "Culture").text = culture.replace("_", "-")
                for name, value in data.items():
                    if value:
                        ET.SubElement(desc, name).text = value

            args.append(ET.tostring(root, encoding="unicode"))

            with request.connmgr.get_connection("admin") as conn:
                sql = """
                DECLARE @ErrMsg as nvarchar(500),
                @RC as int,
                @SM_ID as int

                SET @SM_ID = ?

                EXECUTE @RC = dbo.sp_GBL_SocialMedia_u @SM_ID OUTPUT, %s, @ErrMsg=@ErrMsg OUTPUT

                SELECT @RC as [Return], @ErrMsg AS ErrMsg, @SM_ID as SM_ID
                """ % ", ".join("?" * (len(args) - 1))

                cursor = conn.execute(sql, *args)
                result = cursor.fetchone()
                cursor.close()

            if not result.Return:
                SM_ID = result.SM_ID

                if is_add:
                    msg = _("The Social Media Type was successfully added.",
                            request)
                else:
                    msg = _("The Social Media Type was successfully updated.",
                            request)

                self._go_to_route(
                    "admin_socialmedia",
                    action="edit",
                    _query=[
                        ("InfoMsg", msg),
                        ("SM_ID", SM_ID),
                        ("ShowCultures", shown_cultures),
                    ],
                )

            ErrMsg = _("Unable to save: ") + result.ErrMsg

        else:

            ErrMsg = _("There were validation errors.")

        socialmedia = None

        if not is_add:
            with request.connmgr.get_connection("admin") as conn:
                cursor = conn.execute("EXEC dbo.sp_GBL_SocialMedia_s ?",
                                      model_state.value("SM_ID"))

                socialmedia = cursor.fetchone()

                cursor.close()

        record_cultures = syslanguage.active_record_cultures()

        # errors = model_state.form.errors
        # data = model_state.form.data
        # raise Exception
        # XXX should we refetch the basic info?
        title = _("Manage Social Media Types", request)
        return self._create_response_namespace(
            title,
            title,
            dict(
                socialmedia=socialmedia,
                SM_ID=model_state.value("SM_ID"),
                shown_cultures=shown_cultures,
                record_cultures=record_cultures,
                is_add=is_add,
                ErrMsg=ErrMsg,
            ),
            no_index=True,
        )
示例#28
0
    def save(self):
        request = self.request

        user = request.user

        if not user.SuperUser:
            self._security_failure()

        domain, shown_cultures = viewbase.get_domain_and_show_cultures(
            request.params)

        if (domain.id == const.DM_CIC
                and not user.cic.SuperUser) or (domain.id == const.DM_VOL
                                                and not user.vol.SuperUser):

            self._security_failure()

        SuperUserGlobal = (domain.id == const.DM_CIC
                           and user.cic.SuperUserGlobal) or (
                               domain.id == const.DM_VOL
                               and user.vol.SuperUserGlobal)

        model_state = request.model_state
        model_state.schema = FieldHelpSchema()
        model_state.form.variable_decode = True

        if model_state.validate():
            FieldID = model_state.form.data.get("FieldID")
            # valid. Save changes and redirect
            args = [
                FieldID, request.dboptions.MemberID, SuperUserGlobal, user.Mod
            ]

            root = ET.Element("DESCS")

            for culture, data in model_state.form.data["descriptions"].items():
                if culture.replace("_", "-") not in shown_cultures:
                    continue

                desc = ET.SubElement(root, "DESC")
                ET.SubElement(desc, "Culture").text = culture.replace("_", "-")
                for name, value in data.items():
                    if value:
                        ET.SubElement(desc, name).text = value

            args.append(ET.tostring(root, encoding="unicode"))

            with request.connmgr.get_connection("admin") as conn:
                sql = ("""
                DECLARE @ErrMsg as nvarchar(500),
                @RC as int

                EXEC @RC = dbo.sp_%s_FieldOption_u_Help ?, ?, ?, ?, ?, @ErrMsg=@ErrMsg OUTPUT

                SELECT @RC as [Return], @ErrMsg AS ErrMsg
                """ % domain.str)

                cursor = conn.execute(sql, *args)
                result = cursor.fetchone()
                cursor.close()

            if not result.Return:
                self._go_to_route(
                    "admin_fieldhelp",
                    action="edit",
                    _query=[
                        ("DM", domain.id),
                        (
                            "InfoMsg",
                            _("The Field Help was updated successfully.",
                              request),
                        ),
                        ("FieldID", FieldID),
                        ("ShowCultures", shown_cultures),
                    ],
                )

            ErrMsg = _("Unable to save: ") + result.ErrMsg

        else:

            ErrMsg = _("There were validation errors.")

        field = None

        with request.connmgr.get_connection("admin") as conn:
            cursor = conn.execute(
                "EXEC dbo.sp_%s_FieldOption_sf_Help ?, ?" % domain.str,
                model_state.value("FieldID"),
                request.dboptions.MemberID,
            )

            field = cursor.fetchone()

            cursor.close()

        record_cultures = syslanguage.active_record_cultures()

        title = _("Manage Field Help", request)
        return self._create_response_namespace(
            title,
            title,
            dict(
                SuperUserGlobal=SuperUserGlobal,
                domain=domain,
                field=field,
                FieldID=model_state.value("FieldID"),
                shown_cultures=shown_cultures,
                record_cultures=record_cultures,
                ErrMsg=ErrMsg,
            ),
            no_index=True,
        )
示例#29
0
    def edit(self):
        request = self.request
        user = request.user

        if not user.SuperUser:
            self._security_failure()

        domain, shown_cultures = viewbase.get_domain_and_show_cultures(
            request.params)
        if not domain:
            return self._go_to_page("~/admin/setup.asp")

        if (domain.id == const.DM_CIC
                and not user.cic.SuperUser) or (domain.id == const.DM_VOL
                                                and not user.vol.SuperUser):

            self._security_failure()

        SuperUserGlobal = (domain.id == const.DM_CIC
                           and user.cic.SuperUserGlobal) or (
                               domain.id == const.DM_VOL
                               and user.vol.SuperUserGlobal)

        model_state = request.model_state
        model_state.validators = {
            "FieldID": ciocvalidators.IDValidator(not_empty=True)
        }
        model_state.method = None

        if not model_state.validate():
            # XXX invalid FieldID

            self._error_page(_("Invalid ID", request))

        FieldID = model_state.form.data.get("FieldID")

        field = None
        field_descriptions = {}

        with request.connmgr.get_connection("admin") as conn:
            cursor = conn.execute(
                "EXEC dbo.sp_%s_FieldOption_sf_Help ?, ?" % domain.str,
                FieldID,
                request.dboptions.MemberID,
            )
            field = cursor.fetchone()

            cursor.nextset()

            for lng in cursor.fetchall():
                field_descriptions[lng.Culture.replace("-", "_")] = lng

            cursor.close()

        if not field:
            # not found
            self._error_page(_("Field Not Found", request))

        model_state.form.data["descriptions"] = field_descriptions

        title = _("Manage Field Help", request)
        return self._create_response_namespace(
            title,
            title,
            dict(
                SuperUserGlobal=SuperUserGlobal,
                field=field,
                FieldID=FieldID,
                shown_cultures=shown_cultures,
                domain=domain,
                record_cultures=syslanguage.active_record_cultures(),
            ),
            no_index=True,
        )
示例#30
0
    def edit(self):
        request = self.request
        user = request.user

        if request.params.get("Delete"):
            self._go_to_route(
                "admin_interests",
                action="delete",
                _query=[("AI_ID", request.GET.get("AI_ID"))],
            )

        if not user.vol.SuperUserGlobal:
            self._security_failure()

        model_state = request.model_state
        model_state.validators = {"AI_ID": validators.IDValidator()}
        model_state.method = None

        if not model_state.validate():
            # XXX invalid AI_ID
            self._error_page(_("Invalid ID", request))

        AI_ID = model_state.form.data.get("AI_ID")
        is_add = not AI_ID

        interest = None
        interest_descriptions = {}
        groups = []
        group_descs = []

        with request.connmgr.get_connection("admin") as conn:
            if not is_add:
                cursor = conn.execute("EXEC dbo.sp_VOL_Interest_s ?", AI_ID)
                interest = cursor.fetchone()
                if interest:
                    cursor.nextset()
                    for lng in cursor.fetchall():
                        interest_descriptions[lng.Culture.replace("-", "_")] = lng

                    cursor.nextset()
                    groups = [str(x[0]) for x in cursor.fetchall()]

                    cursor.close()

                if not interest:
                    # not found
                    self._error_page(_("Interest Not Found", request))

            cursor = conn.execute("EXEC dbo.sp_VOL_Interest_s_FormLists")

            group_descs = cursor.fetchall()

            cursor.close()

        domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)

        model_state.form.data["interest"] = interest
        if interest:
            model_state.form.data["Code"] = interest.Code
        model_state.form.data["descriptions"] = interest_descriptions
        model_state.form.data["groups"] = groups

        title = _("Manage Areas of Interest", request)
        return self._create_response_namespace(
            title,
            title,
            dict(
                interest=interest,
                AI_ID=AI_ID,
                is_add=is_add,
                shown_cultures=shown_cultures,
                group_descs=group_descs,
                record_cultures=syslanguage.active_record_cultures(),
            ),
            no_index=True,
        )
示例#31
0
	def save(self):
		request = self.request

		if request.POST.get('Delete'):
			self._go_to_route('admin_interests', action='delete', _query=[('AI_ID', request.POST.get('AI_ID'))])

		user = request.user

		if not user.vol.SuperUserGlobal:
			self._security_failure()

		model_state = request.model_state
		model_state.schema = InterestSchema()
		model_state.form.variable_decode = True

		validator = validators.IDValidator()
		try:
			AI_ID = validator.to_python(request.POST.get('AI_ID'))
		except validators.Invalid:
			self._error_page(_('Invalid Interest ID', request))

		is_add = not AI_ID

		domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)

		if model_state.validate():
			# valid. Save changes and redirect
			args = [AI_ID, user.Mod, model_state.value('Code')]

			root = ET.Element('DESCS')

			for culture, data in model_state.form.data['descriptions'].iteritems():
				if culture.replace('_', '-') not in shown_cultures:
					continue

				desc = ET.SubElement(root, 'DESC')
				ET.SubElement(desc, "Culture").text = culture.replace('_', '-')
				for name, value in data.iteritems():
					if value:
						ET.SubElement(desc, name).text = value

			args.append(ET.tostring(root))

			root = ET.Element('GROUPS')
			for group_id in model_state.form.data['groups']:
				ET.SubElement(root, 'GROUP').text = unicode(group_id)

			args.append(ET.tostring(root))

			with request.connmgr.get_connection('admin') as conn:
				sql = '''
				DECLARE @ErrMsg as nvarchar(500),
				@RC as int,
				@AI_ID as int

				SET @AI_ID = ?

				EXECUTE @RC = dbo.sp_VOL_Interest_u @AI_ID OUTPUT, %s, @ErrMsg=@ErrMsg OUTPUT

				SELECT @RC as [Return], @ErrMsg AS ErrMsg, @AI_ID as AI_ID
				''' % ', '.join('?' * (len(args) - 1))

				cursor = conn.execute(sql, *args)
				result = cursor.fetchone()
				cursor.close()

			if not result.Return:
				AI_ID = result.AI_ID

				self._go_to_route('admin_interests', action='edit',
						_query=[
							('InfoMsg', _('The Interests were successfully updated.', request)),
							("AI_ID", AI_ID), ("ShowCultures", shown_cultures)])

			ErrMsg = _('Unable to save: ') + result.ErrMsg

		else:

			ErrMsg = _('There were validation errors.')

		interest = None
		group_descs = []

		with request.connmgr.get_connection('admin') as conn:
			cursor = conn.execute('EXEC dbo.sp_VOL_Interest_s_FormLists')

			group_descs = cursor.fetchall()

			cursor.close()

			if not is_add:
				cursor = conn.execute('EXEC dbo.sp_VOL_Interest_s ?', AI_ID)

				interest = cursor.fetchone()

				cursor.close()

		record_cultures = syslanguage.active_record_cultures()
		model_state.form.data['groups'] = request.POST.getall('groups')

		title = _('Manage Areas of Interest', request)
		return self._create_response_namespace(
			title,
			title,
			dict(
				interest=interest,
				AI_ID=AI_ID,
				shown_cultures=shown_cultures,
				record_cultures=record_cultures,
				group_descs=group_descs,
				is_add=is_add,
				ErrMsg=ErrMsg),
			no_index=True)
示例#32
0
	def save(self):
		request = self.request
		user = request.user

		list_type = self.request.context.list_type
		self._check_security(list_type, True)

		extra_validators = {}
		if list_type.ID:
			extra_validators = {list_type.ID or 'OldValue': Any(list_type.id_validator, validators.OneOf(['NEW']))}

		extra_validators[list_type.NameField] = validators.UnicodeString(max=list_type.NameFieldMaxLength)

		for field in list_type.ExtraFields or []:
			extra_validators[field['field']] = field['validator']

		base_schema = ListBaseSchema(**extra_validators)
		schema_params = {'listitem': foreach.ForEach(base_schema)}
		schema = PostSchema(**schema_params)

		model_state = request.model_state
		model_state.schema = schema

		model_state.form.variable_decode = True

		if model_state.validate():
			# valid. Save changes and redirect

			root = ET.Element('CHECKLIST')
			for listitem in model_state.form.data['listitem']:
				if list_type.ID and not listitem.get(list_type.ID):
					continue

				if not listitem.get(list_type.NameField):
					continue

				if list_type.CanDelete and listitem.get('delete'):
					continue

				list_el = ET.SubElement(root, 'CHK')

				for key, value in listitem.iteritems():
					if key == list_type.ID and value == 'NEW':
						value = -1

					elif isinstance(value, bool):
						value = int(value)

					if value is not None:
						ET.SubElement(list_el, key).text = unicode(value)

			if list_type.HasModified:
				args = [user.Mod, ET.tostring(root)]
			else:
				args = [ET.tostring(root)]

			with request.connmgr.get_connection('admin') as conn:
				sql = '''
					DECLARE @RC int, @ErrMsg nvarchar(500)
					EXEC @RC = sp_%s_u %s, @ErrMsg OUTPUT
					SELECT @RC AS [Return], @ErrMsg AS ErrMsg''' % (list_type.Table, ','.join('?' * len(args)))
				cursor = conn.execute(sql, *args)
				result = cursor.fetchone()
				cursor.close()

			if not result.Return:

				self._go_to_route(request.matched_route.name,
						_query=(('InfoMsg', _('The record(s) were successfully updated.', request)),
							('list', list_type.FieldCode)))

			ErrMsg = _('Unable to save: ') + result.ErrMsg

		else:
			ErrMsg = _('There were validation errors.')

		listitems = self._get_edit_info(list_type)

		record_cultures = syslanguage.active_record_cultures()
		listitems = variabledecode.variable_decode(request.POST)['listitem']
		model_state.form.data['listitem'] = listitems

		title_template = _(list_type.PageTitleTemplate, self.request)
		title = list_type.ListName if request.viewdata.PrintMode else title_template.format(list_type.ListName)
		return self._create_response_namespace(title, title,
				dict(
					listitems=listitems, record_cultures=record_cultures,
					SuperUserGlobal=request.context.SuperUserGlobal,
					list_type=list_type, ErrMsg=ErrMsg
				), no_index=True)
示例#33
0
    def _get_edit_info(self, num, BTPBID, number, base_params):
        request = self.request
        user = request.user

        publication = None
        publication_descriptions = {}

        fullorg = None
        generalheadings = []
        taxonomyheadings = []
        feedback = []

        with request.connmgr.get_connection("admin") as conn:
            sql = "EXEC dbo.sp_CIC_NUMPub_s ?, ?, ?"
            cursor = conn.execute(sql, BTPBID, user.User_ID,
                                  request.viewdata.cic.ViewType)

            errordata = cursor.fetchone()

            if not errordata.Error:
                cursor.nextset()

                fullorg = cursor.fetchone().ORG_NAME_FULL

                cursor.nextset()

                publication = cursor.fetchone()

                cursor.nextset()

                for lng in cursor.fetchall():
                    publication_descriptions[lng.Culture.replace("-",
                                                                 "_")] = lng

                cursor.nextset()

                generalheadings = cursor.fetchall()

                cursor.nextset()

                taxonomyheadings = cursor.fetchall()

                cursor.nextset()

                feedback = cursor.fetchall()

            cursor.close()

        if errordata.Error:

            self._error_page(errordata.ErrMsg
                             or _("An unknown error occurred.", request))

        linked_headings = {str(x.GH_ID) for x in generalheadings if x.SELECTED}

        record_cultures = [
            x for x in syslanguage.active_record_cultures()
            if x.replace("-", "_") in publication_descriptions
        ]

        return EditValues(
            publication,
            publication_descriptions,
            linked_headings,
            fullorg,
            generalheadings,
            taxonomyheadings,
            feedback,
            num,
            BTPBID,
            number,
            record_cultures,
        )
示例#34
0
	def edit(self):
		request = self.request
		user = request.user

		if not user.SuperUser:
			self._security_failure()

		domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)
		if not domain:
			return self._go_to_page('~/admin/setup.asp')

		if (domain.id == const.DM_CIC and not user.cic.SuperUser) or \
			(domain.id == const.DM_VOL and not user.vol.SuperUser):

			self._security_failure()

		SuperUserGlobal = (domain.id == const.DM_CIC and user.cic.SuperUserGlobal) \
			or (domain.id == const.DM_VOL and user.vol.SuperUserGlobal)

		model_state = request.model_state
		model_state.validators = {
			'FieldID': ciocvalidators.IDValidator(not_empty=True)
		}
		model_state.method = None

		if not model_state.validate():
			# XXX invalid FieldID

			self._error_page(_('Invalid ID', request))

		FieldID = model_state.form.data.get('FieldID')

		field = None
		field_descriptions = {}

		with request.connmgr.get_connection('admin') as conn:
			cursor = conn.execute('EXEC dbo.sp_%s_FieldOption_sf_Help ?, ?' % domain.str, FieldID, request.dboptions.MemberID)
			field = cursor.fetchone()

			cursor.nextset()

			for lng in cursor.fetchall():
				field_descriptions[lng.Culture.replace('-', '_')] = lng

			cursor.close()

		if not field:
			# not found
			self._error_page(_('Field Not Found', request))

		model_state.form.data['descriptions'] = field_descriptions

		title = _('Manage Field Help', request)
		return self._create_response_namespace(
			title, title,
			dict(
				SuperUserGlobal=SuperUserGlobal,
				field=field, FieldID=FieldID,
				shown_cultures=shown_cultures, domain=domain,
				record_cultures=syslanguage.active_record_cultures()
			), no_index=True)
示例#35
0
    def save(self):
        request = self.request
        user = request.user

        chk_type = self.request.context.chk_type
        all_values = not self.request.dboptions.OtherMembersActive
        shared_values = not not (
            all_values
            or not self.request.matched_route.name.endswith("_local"))
        SuperUserGlobal = self._check_security(
            chk_type, chk_type.Shared == "full" or shared_values)

        if shared_values and not SuperUserGlobal:
            self._security_failure()

        if chk_type.ShowAdd:
            extra_validators = {
                chk_type.ID:
                Any(ciocvalidators.IDValidator(), validators.OneOf(["NEW"]))
            }
        else:
            extra_validators = {
                chk_type.ID:
                ciocvalidators.IDValidator(not_empty=chk_type.CanDelete)
            }
        if chk_type.CodeTitle:
            if not chk_type.CodeValidator:
                extra_validators[chk_type.CodeField] = ciocvalidators.String(
                    max=chk_type.CodeMaxLength)
            else:
                extra_validators[chk_type.CodeField] = chk_type.CodeValidator

        if chk_type.DisplayOrder:
            extra_validators["DisplayOrder"] = validators.Int(min=0,
                                                              max=256,
                                                              if_empty=0)
        if chk_type.ShowOnForm:
            extra_validators["ShowOnForm"] = validators.Bool()

        for field in chk_type.ExtraFields or []:
            extra_validators[field["field"]] = field["validator"]

        extra_name_validators = {}
        for field in chk_type.ExtraNameFields or []:
            extra_name_validators[field["field"]] = field["validator"]

        base_schema = make_checklist_base_schema(extra_name_validators,
                                                 **extra_validators)
        schema_params = {"chkitem": foreach.ForEach(base_schema)}
        schema = PostSchema(**schema_params)

        model_state = request.model_state
        model_state.form.state.chk_type = chk_type
        model_state.schema = schema

        model_state.form.variable_decode = True

        domain, shown_cultures = viewbase.get_domain_and_show_cultures(
            request.params)
        if model_state.validate():
            # valid. Save changes and redirect

            root = ET.Element("CHECKLIST")
            for i, chkitem in enumerate(model_state.form.data["chkitem"]):
                if should_skip_item(chk_type, chkitem):
                    continue

                chk_el = ET.SubElement(root, "CHK")
                ET.SubElement(chk_el, "CNT").text = str(i)

                for key, value in chkitem.items():
                    if key == chk_type.ID and value == "NEW":
                        value = -1

                    elif isinstance(value, bool):
                        value = int(value)

                    if key != "Descriptions":
                        if value is not None:
                            ET.SubElement(chk_el, key).text = str(value)
                        continue

                    descs = ET.SubElement(chk_el, "DESCS")
                    for culture, data in value.items():
                        culture = culture.replace("_", "-")
                        if culture not in shown_cultures:
                            continue

                        desc = ET.SubElement(descs, "DESC")
                        ET.SubElement(desc, "Culture").text = culture
                        for key, value in data.items():
                            if value:
                                ET.SubElement(desc, key).text = value

            args = [
                request.dboptions.MemberID,
                user.Mod,
                ET.tostring(root, encoding="unicode"),
            ]

            with request.connmgr.get_connection("admin") as conn:
                sql = chk_type.UpdateSQL(shared_values)
                log.debug("sql: %s", sql)
                log.debug("args: %s", args)
                cursor = conn.execute(sql, *args)
                result = cursor.fetchone()
                cursor.close()

            if not result.Return:

                self._go_to_route(
                    request.matched_route.name,
                    _query=(
                        (
                            "InfoMsg",
                            _("The record(s) were successfully updated.",
                              request),
                        ),
                        ("ShowCultures", shown_cultures),
                        ("chk", chk_type.FieldCode),
                    ),
                )

            ErrMsg = _("Unable to save: ") + result.ErrMsg

        else:
            ErrMsg = _("There were validation errors.")

        chkitems, chkusage = self._get_edit_info(
            chk_type,
            not all_values and not shared_values,
            not all_values and shared_values,
            not SuperUserGlobal,
        )

        record_cultures = syslanguage.active_record_cultures()

        chkitems = variabledecode.variable_decode(request.POST)["chkitem"]
        model_state.form.data["chkitem"] = chkitems

        type_name = ""
        if chk_type.Shared == "partial" and not all_values:
            if shared_values:
                type_name = _("Shared", self.request)
            else:
                type_name = _("Local", self.request)

        title_template = _(chk_type.PageTitleTemplate, self.request) % {
            "type": type_name
        }
        title = (chk_type.CheckListName if request.viewdata.PrintMode else
                 title_template.format(chk_type.CheckListName))
        return self._create_response_namespace(
            title,
            title,
            dict(
                chkitems=chkitems,
                record_cultures=record_cultures,
                shown_cultures=shown_cultures,
                SuperUserGlobal=SuperUserGlobal,
                chkusage=chkusage,
                chk_type=chk_type,
                ErrMsg=ErrMsg,
            ),
            no_index=True,
        )
示例#36
0
	def edit(self):
		request = self.request
		user = request.user

		if request.params.get('Delete'):
			self._go_to_route('admin_interests', action='delete', _query=[('AI_ID', request.GET.get('AI_ID'))])

		if not user.vol.SuperUserGlobal:
			self._security_failure()

		model_state = request.model_state
		model_state.validators = {
			'AI_ID': validators.IDValidator()
		}
		model_state.method = None

		if not model_state.validate():
			# XXX invalid AI_ID
			self._error_page(_('Invalid ID', request))

		AI_ID = model_state.form.data.get('AI_ID')
		is_add = not AI_ID

		interest = None
		interest_descriptions = {}
		groups = []
		group_descs = []

		with request.connmgr.get_connection('admin') as conn:
			if not is_add:
				cursor = conn.execute('EXEC dbo.sp_VOL_Interest_s ?', AI_ID)
				interest = cursor.fetchone()
				if interest:
					cursor.nextset()
					for lng in cursor.fetchall():
						interest_descriptions[lng.Culture.replace('-', '_')] = lng

					cursor.nextset()
					groups = [unicode(x[0]) for x in cursor.fetchall()]

					cursor.close()

				if not interest:
					# not found
					self._error_page(_('Interest Not Found', request))

			cursor = conn.execute('EXEC dbo.sp_VOL_Interest_s_FormLists')

			group_descs = cursor.fetchall()

			cursor.close()

		domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)

		model_state.form.data['interest'] = interest
		if interest:
			model_state.form.data['Code'] = interest.Code
		model_state.form.data['descriptions'] = interest_descriptions
		model_state.form.data['groups'] = groups

		title = _('Manage Areas of Interest', request)
		return self._create_response_namespace(
			title, title,
			dict(
				interest=interest, AI_ID=AI_ID, is_add=is_add,
				shown_cultures=shown_cultures, group_descs=group_descs,
				record_cultures=syslanguage.active_record_cultures()),
			no_index=True)
示例#37
0
	def save(self):
		request = self.request

		user = request.user

		if not user.SuperUser:
			self._security_failure()

		domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)

		if (domain.id == const.DM_CIC and not user.cic.SuperUser) or \
			(domain.id == const.DM_VOL and not user.vol.SuperUser):

			self._security_failure()

		SuperUserGlobal = (domain.id == const.DM_CIC and user.cic.SuperUserGlobal) \
			or (domain.id == const.DM_VOL and user.vol.SuperUserGlobal)

		model_state = request.model_state
		model_state.schema = FieldHelpSchema()
		model_state.form.variable_decode = True

		if model_state.validate():
			FieldID = model_state.form.data.get('FieldID')
			# valid. Save changes and redirect
			args = [FieldID, request.dboptions.MemberID, SuperUserGlobal, user.Mod]

			root = ET.Element('DESCS')

			for culture, data in model_state.form.data['descriptions'].iteritems():
				if culture.replace('_', '-') not in shown_cultures:
					continue

				desc = ET.SubElement(root, 'DESC')
				ET.SubElement(desc, "Culture").text = culture.replace('_', '-')
				for name, value in data.iteritems():
					if value:
						ET.SubElement(desc, name).text = value

			args.append(ET.tostring(root))

			with request.connmgr.get_connection('admin') as conn:
				sql = '''
				DECLARE @ErrMsg as nvarchar(500),
				@RC as int

				EXEC @RC = dbo.sp_%s_FieldOption_u_Help ?, ?, ?, ?, ?, @ErrMsg=@ErrMsg OUTPUT

				SELECT @RC as [Return], @ErrMsg AS ErrMsg
				''' % domain.str

				cursor = conn.execute(sql, *args)
				result = cursor.fetchone()
				cursor.close()

			if not result.Return:
				self._go_to_route('admin_fieldhelp', action='edit', _query=[('DM', domain.id), ('InfoMsg', _('The Field Help was updated successfully.', request)), ("FieldID", FieldID), ("ShowCultures", shown_cultures)])

			ErrMsg = _('Unable to save: ') + result.ErrMsg

		else:

			ErrMsg = _('There were validation errors.')

		field = None

		with request.connmgr.get_connection('admin') as conn:
			cursor = conn.execute('EXEC dbo.sp_%s_FieldOption_sf_Help ?, ?' % domain.str, model_state.value('FieldID'), request.dboptions.MemberID)

			field = cursor.fetchone()

			cursor.close()

		record_cultures = syslanguage.active_record_cultures()

		title = _('Manage Field Help', request)
		return self._create_response_namespace(
			title, title,
			dict(
				SuperUserGlobal=SuperUserGlobal, domain=domain,
				field=field, FieldID=model_state.value('FieldID'),
				shown_cultures=shown_cultures, record_cultures=record_cultures,
				ErrMsg=ErrMsg
			), no_index=True)
示例#38
0
    def save(self):
        request = self.request
        user = request.user

        if not user.SuperUser:
            self._security_failure()

        domain, shown_cultures = viewbase.get_domain_and_show_cultures(
            request.params)
        if not domain:
            return self._go_to_page("~/admin/setup.asp")

        if (domain.id == const.DM_CIC
                and not user.cic.SuperUser) or (domain.id == const.DM_VOL
                                                and not user.vol.SuperUser):

            self._security_failure()

        model_state = request.model_state
        model_state.schema = PostSchema()

        model_state.form.variable_decode = True

        if model_state.validate():
            # valid. Save changes and redirect

            root = ET.Element("FIELDS")
            for field in model_state.form.data["field"]:
                field_el = ET.SubElement(root, "Field")
                for key, value in field.items():
                    if key != "Descriptions":
                        ET.SubElement(field_el, key).text = str(value)
                        continue

                    descs = ET.SubElement(field_el, "DESCS")
                    for culture in shown_cultures:

                        desc = ET.SubElement(descs, "DESC")
                        ET.SubElement(desc, "Culture").text = culture
                        for key, val in (value.get(culture.replace("-", "_"))
                                         or {}).items():
                            if val:
                                ET.SubElement(desc, key).text = val

            args = [
                user.Mod,
                request.dboptions.MemberID,
                (domain.id == const.DM_CIC and user.cic.SuperUserGlobal)
                or (domain.id == const.DM_VOL and user.vol.SuperUserGlobal),
                ET.tostring(root, encoding="unicode"),
            ]

            sql = ("""
            DECLARE @ErrMsg as nvarchar(500),
            @RC as int

            EXECUTE @RC = dbo.sp_%s_Fields_u ?, ?, ?, ?, @ErrMsg OUTPUT

            SELECT @RC as [Return], @ErrMsg AS ErrMsg
            """ % domain.str)

            with request.connmgr.get_connection("admin") as conn:

                cursor = conn.execute(sql, *args)
                result = cursor.fetchone()
                cursor.close()

            if not result.Return:

                self._go_to_route(
                    "admin_fielddisplay",
                    _query=(
                        ("InfoMsg",
                         _("The Fields were sucessfully updated.", request)),
                        ("ShowCultures", shown_cultures),
                        ("DM", domain.id),
                    ),
                )

            ErrMsg = _("Unable to save: ") + result.ErrMsg

        else:
            ErrMsg = _("There were validation errors.")

        fields = []
        with request.connmgr.get_connection("admin") as conn:
            fields = conn.execute(
                "EXEC sp_%s_FieldOption_l_Display ?, 0" %
                ("GBL" if domain.id == const.DM_CIC else domain.str),
                request.MemberID,
            ).fetchall()

        # errors = model_state.form.errors
        # raise Exception()
        # XXX should we refetch the basic info?

        fieldinfo_map = {str(f.FieldID): f for f in fields}

        fields = variabledecode.variable_decode(request.POST)["field"]

        record_cultures = syslanguage.active_record_cultures()

        title = _("Change Field Display", request)
        return self._create_response_namespace(
            title,
            title,
            dict(
                fields=fields,
                record_cultures=record_cultures,
                domain=domain,
                shown_cultures=shown_cultures,
                fieldinfo_map=fieldinfo_map,
                ErrMsg=ErrMsg,
            ),
            no_index=True,
        )
示例#39
0
	def save(self):
		request = self.request
		user = request.user

		chk_type = self.request.context.chk_type
		all_values = not self.request.dboptions.OtherMembersActive
		shared_values = not not (all_values or not self.request.matched_route.name.endswith('_local'))
		SuperUserGlobal = self._check_security(chk_type, chk_type.Shared == 'full' or shared_values)

		if shared_values and not SuperUserGlobal:
			self._security_failure()

		if chk_type.ShowAdd:
			extra_validators = {chk_type.ID: Any(ciocvalidators.IDValidator(), validators.OneOf(['NEW']))}
		else:
			extra_validators = {chk_type.ID: ciocvalidators.IDValidator(not_empty=chk_type.CanDelete)}
		if chk_type.CodeTitle:
			if not chk_type.CodeValidator:
				extra_validators[chk_type.CodeField] = ciocvalidators.String(max=chk_type.CodeMaxLength)
			else:
				extra_validators[chk_type.CodeField] = chk_type.CodeValidator

		if chk_type.DisplayOrder:
			extra_validators['DisplayOrder'] = validators.Int(min=0, max=256, if_empty=0)
		if chk_type.ShowOnForm:
			extra_validators['ShowOnForm'] = validators.Bool()

		for field in chk_type.ExtraFields or []:
			extra_validators[field['field']] = field['validator']

		extra_name_validators = {}
		for field in chk_type.ExtraNameFields or []:
			extra_name_validators[field['field']] = field['validator']

		base_schema = make_checklist_base_schema(extra_name_validators, **extra_validators)
		schema_params = {'chkitem': foreach.ForEach(base_schema)}
		schema = PostSchema(**schema_params)

		model_state = request.model_state
		model_state.form.state.chk_type = chk_type
		model_state.schema = schema

		model_state.form.variable_decode = True

		domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)
		if model_state.validate():
			# valid. Save changes and redirect

			root = ET.Element('CHECKLIST')
			for i, chkitem in enumerate(model_state.form.data['chkitem']):
				if should_skip_item(chk_type, chkitem):
					continue

				chk_el = ET.SubElement(root, 'CHK')
				ET.SubElement(chk_el, "CNT").text = unicode(i)

				for key, value in chkitem.iteritems():
					if key == chk_type.ID and value == 'NEW':
						value = -1

					elif isinstance(value, bool):
						value = int(value)

					if key != 'Descriptions':
						if value is not None:
							ET.SubElement(chk_el, key).text = unicode(value)
						continue

					descs = ET.SubElement(chk_el, 'DESCS')
					for culture, data in value.iteritems():
						culture = culture.replace('_', '-')
						if culture not in shown_cultures:
							continue

						desc = ET.SubElement(descs, 'DESC')
						ET.SubElement(desc, 'Culture').text = culture
						for key, value in data.iteritems():
							if value:
								ET.SubElement(desc, key).text = value

			args = [request.dboptions.MemberID, user.Mod, ET.tostring(root)]

			with request.connmgr.get_connection('admin') as conn:
				sql = chk_type.UpdateSQL(shared_values)
				log.debug('sql: %s', sql)
				log.debug('args: %s', args)
				cursor = conn.execute(sql, *args)
				result = cursor.fetchone()
				cursor.close()

			if not result.Return:

				self._go_to_route(request.matched_route.name,
						_query=(('InfoMsg', _('The record(s) were successfully updated.', request)),
							('ShowCultures', shown_cultures),
							('chk', chk_type.FieldCode)))

			ErrMsg = _('Unable to save: ') + result.ErrMsg

		else:
			ErrMsg = _('There were validation errors.')

		chkitems, chkusage = self._get_edit_info(chk_type, not all_values and not shared_values, not all_values and shared_values, not SuperUserGlobal)

		record_cultures = syslanguage.active_record_cultures()

		chkitems = variabledecode.variable_decode(request.POST)['chkitem']
		model_state.form.data['chkitem'] = chkitems

		type_name = ''
		if chk_type.Shared == 'partial' and not all_values:
			if shared_values:
				type_name = _('Shared', self.request)
			else:
				type_name = _('Local', self.request)

		title_template = _(chk_type.PageTitleTemplate, self.request) % {'type': type_name}
		title = chk_type.CheckListName if request.viewdata.PrintMode else title_template.format(chk_type.CheckListName)
		return self._create_response_namespace(
			title, title,
			dict(
				chkitems=chkitems, record_cultures=record_cultures,
				shown_cultures=shown_cultures, SuperUserGlobal=SuperUserGlobal,
				chkusage=chkusage, chk_type=chk_type, ErrMsg=ErrMsg),
			no_index=True)
示例#40
0
    def save(self):
        request = self.request
        user = request.user

        if not user.SuperUser:
            self._security_failure()

        domain, shown_cultures = viewbase.get_domain_and_show_cultures(
            request.params)
        if not domain:
            return self._go_to_page("~/admin/setup.asp")

        if (domain.id == const.DM_CIC
                and not user.cic.SuperUser) or (domain.id == const.DM_VOL
                                                and not user.vol.SuperUser):

            self._security_failure()

        model_state = request.model_state
        model_state.schema = PostSchema()
        model_state.form.variable_decode = True

        if model_state.validate():
            # valid. Save changes and redirect

            args = [
                request.dboptions.MemberID,
                ",".join(map(str,
                             model_state.value("HideField") or [])),
            ]

            sql = ("""
            DECLARE @ErrMsg as nvarchar(500),
            @RC as int

            EXECUTE @RC = dbo.sp_%s_Fields_u_InactiveByMember ?,?, @ErrMsg OUTPUT

            SELECT @RC as [Return], @ErrMsg AS ErrMsg
            """ % domain.str)

            # raise Exception
            with request.connmgr.get_connection("admin") as conn:

                cursor = conn.execute(sql, *args)
                result = cursor.fetchone()
                cursor.close()

            if not result.Return:

                self._go_to_route(
                    "admin_fieldhide",
                    _query=(
                        ("InfoMsg",
                         _("The Fields were sucessfully updated.", request)),
                        ("ShowCultures", shown_cultures),
                        ("DM", domain.id),
                    ),
                )

            ErrMsg = _("Unable to save: ") + result.ErrMsg

        else:
            ErrMsg = _("There were validation errors.")

        fields = []
        with request.connmgr.get_connection("admin") as conn:
            fields = conn.execute(
                "EXEC sp_%s_FieldOption_l_Hide ?" %
                ("GBL" if domain.id == const.DM_CIC else domain.str),
                request.MemberID,
            ).fetchall()

        # errors = model_state.form.errors
        # raise Exception()
        # XXX should we refetch the basic info?

        for field in fields:
            field.Descriptions = self._culture_dict_from_xml(
                field.Descriptions, "DESC")

        record_cultures = syslanguage.active_record_cultures()

        title = _("Manage Hidden Fields", request)
        return self._create_response_namespace(
            title,
            title,
            dict(
                fields=fields,
                record_cultures=record_cultures,
                domain=domain,
                shown_cultures=shown_cultures,
                ErrMsg=ErrMsg,
            ),
            no_index=True,
        )
示例#41
0
	def save(self):
		request = self.request
		user = request.user

		if not user.SuperUserGlobal:
			self._security_failure()

		is_alt_area = not not request.params.get('altarea')

		CM_ID = self._get_cmid()
		is_add = not CM_ID

		if not is_add and request.POST.get('Delete'):
			self._go_to_route('admin_community', action='delete', _query=[('CM_ID', CM_ID)])

		model_state = request.model_state
		model_state.form.variable_decode = True
		if is_alt_area:
			log.debug('alt area')
			model_state.schema = AltAreasSchema()
		else:
			log.debug('community')
			model_state.schema = CommunitySchema()

		domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)

		if model_state.validate():
			# valid. Save changes and redirect
			data = model_state.form.data
			cm_data = data.get('community', {})
			args = [CM_ID, user.Mod, is_alt_area, cm_data.get('ParentCommunity'),
						cm_data.get('ProvinceState')]

			root = ET.Element('DESCS')

			for culture, description in model_state.form.data['descriptions'].iteritems():
				if culture.replace('_', '-') not in shown_cultures:
					continue

				desc = ET.SubElement(root, 'DESC')
				ET.SubElement(desc, "Culture").text = culture.replace('_', '-')
				for name, value in description.iteritems():
					if value:
						ET.SubElement(desc, name).text = value

			args.append(ET.tostring(root))

			root = ET.Element('NAMES')

			for name in model_state.form.data.get('alt_names') or []:
				if name.get('Delete') or not name.get('AltName') or \
					(not name.get('New') and
						name['Culture'].replace('_', '-') not in shown_cultures):
					continue

				desc = ET.SubElement(root, 'Name')
				ET.SubElement(desc, 'Culture').text = name['Culture']
				ET.SubElement(desc, 'AltName').text = name['AltName']

			args.append(ET.tostring(root))

			if is_alt_area:
				root = ET.Element('ALTAREAS')
				for area in data.get('alt_areas') or []:
					ET.SubElement(root, 'CM_ID').text = unicode(area)

				args.append(ET.tostring(root))

			else:
				args.append(None)

			root = ET.Element('ShownCultures')
			for culture in shown_cultures:
				ET.SubElement(root, 'Culture').text = culture

			args.append(ET.tostring(root))

			sql = '''
				DECLARE @ErrMsg as nvarchar(500),
				@RC as int,
				@CM_ID as int

				SET @CM_ID = ?

				EXECUTE @RC = dbo.sp_GBL_Community_u @CM_ID OUTPUT, %s, @ErrMsg=@ErrMsg OUTPUT

				SELECT @RC as [Return], @ErrMsg AS ErrMsg, @CM_ID as CM_ID
				''' % ', '.join('?' * (len(args) - 1))
			with request.connmgr.get_connection('admin') as conn:
				result = conn.execute(sql, *args).fetchone()

			if not result.Return:
				CM_ID = result.CM_ID
				if is_alt_area:
					if is_add:
						msg = _('The Alternate Search Area was successfully added.', request)
					else:
						msg = _('The Alternate Search Area was successfully updated.', request)
				else:
					if is_add:
						msg = _('The Community was successfully added.', request)
					else:
						msg = _('The Community was successfully updated.', request)

				self._go_to_route('admin_community', action='edit', _query=[('InfoMsg', msg), ("CM_ID", CM_ID), ("ShowCultures", shown_cultures)])

			ErrMsg = _('Unable to save: ') + result.ErrMsg

			alt_areas = data.get('alt_areas') or []

		else:
			ErrMsg = _('There were validation errors.')

			data = model_state.form.data
			decoded = variable_decode(request.POST)
			alt_areas = decoded.get('alt_areas') or []

			data['alt_areas'] = alt_areas
			data['alt_names'] = decoded.get('alt_names') or []

		edit_values = self._get_edit_info(CM_ID, is_add, alt_areas)

		record_cultures = syslanguage.active_record_cultures()

		# XXX should we refetch the basic info?
		title = _('Manage Communities', request)
		return self._create_response_namespace(title, title,
				dict(community=edit_values.community, CM_ID=CM_ID,
					is_alt_area=is_alt_area, prov_state=edit_values.prov_state,
					alt_area_name_map=edit_values.alt_area_name_map,
					shown_cultures=shown_cultures, record_cultures=record_cultures,
					is_add=is_add, ErrMsg=ErrMsg), no_index=True)
示例#42
0
	def _get_edit_info(self, is_add, reminder_id, is_error=False):
		request = self.request

		reminder = None
		reminder_users = []
		reminder_agencies = []
		nums = []
		vnums = []

		agencies = []
		note_types = []

		with request.connmgr.get_connection('admin') as conn:
			if not is_add:
				sql = '''EXEC sp_GBL_Reminder_s ?, ?'''
				cursor = conn.execute(sql, request.dboptions.MemberID, reminder_id)

				reminder = cursor.fetchone()

				if not reminder:
					request.response.status = '404 Not Found'
					return {'ErrMsg': _('Reminder not found', request), 'ErrorPage': True}

				if not is_error:

					cursor.nextset()
					reminder_users = cursor.fetchall()

					cursor.nextset()
					reminder_agencies = cursor.fetchall()

					cursor.nextset()
					nums = cursor.fetchall()

					cursor.nextset()
					vnums = cursor.fetchall()

				cursor.close()

			cursor = conn.execute('''
						EXEC sp_GBL_Agency_l ?, ?
						EXEC sp_GBL_RecordNote_Type_l
						''', request.dboptions.MemberID, False)

			agencies = [x.AgencyCode for x in cursor.fetchall()]

			cursor.nextset()
			note_types = [(x[0], ('[ ! ] ' if x[1] else '') + x[2]) for x in cursor.fetchall()]

			cursor.close()

		org_names = ((x[0], x.ORG_NAME_FULL) for x in nums)
		org_names = {k: v for k, v in org_names if v}
		pos_titles = {str(k): v for k, v in vnums if v}

		data = request.model_state.form.data
		if not is_add:
			if not is_error:
				data['reminder'] = reminder
				data['reminder_user_ID'] = [unicode(x[0]) for x in reminder_users]
				data['reminder_agency_ID'] = [x[0] for x in reminder_agencies]
				data['NUM'] = [x[0] for x in nums]
				data['VNUM'] = [unicode(x[0]) for x in vnums]

		if is_add or is_error:
			data['NUM'] = request.params.getall('NUM')
			data['VNUM'] = request.params.getall('VNUM')

		if not is_add or is_error:
			val = request.model_state.value('reminder.DismissForAll')
			data['reminder.DismissForAll'] = dismiss_options_reverse.get(val, val if val is not None else 'S')

		namespace = {
				'_': lambda x: i18n.gettext(x, request),
				'format_date': lambda x: i18n.format_date(x, request),
				'reminder': reminder,
				'record_cultures': syslanguage.active_record_cultures(),
				'culture_map': syslanguage.culture_map(),
				'agencies': agencies,
				'note_types': note_types,
				'ReminderID': reminder_id,
				'reminder_users': reminder_users,
				'reminder_agencies': reminder_agencies,
				'org_names': org_names,
				'position_titles': pos_titles,
				'renderer': request.model_state.renderer
			}
		return {'form': render(templateprefix + 'edit_form.mak', namespace, request)}
示例#43
0
	def save(self):
		request = self.request

		if request.POST.get('Delete'):
			self._go_to_route('admin_socialmedia', action='delete', _query=[('SM_ID', request.POST.get('SM_ID'))])

		user = request.user

		if not user.SuperUserGlobal:
			self._security_failure()

		model_state = request.model_state
		model_state.schema = SocialMediaSchema()
		model_state.form.variable_decode = True

		validator = ciocvalidators.IDValidator()
		try:
			SM_ID = validator.to_python(request.POST.get('SM_ID'))
		except validators.Invalid:
			self._error_page(_('Invalid Social Media Type ID', request))

		is_add = not SM_ID

		domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params)

		if model_state.validate():
			# valid. Save changes and redirect
			args = [SM_ID, user.Mod]
			socialmedia = model_state.form.data.get('socialmedia', {})
			args.extend(socialmedia.get(x) for x in socialmedia_fields)

			root = ET.Element('DESCS')

			for culture, data in model_state.form.data['descriptions'].iteritems():
				if culture.replace('_', '-') not in shown_cultures:
					continue

				desc = ET.SubElement(root, 'DESC')
				ET.SubElement(desc, "Culture").text = culture.replace('_', '-')
				for name, value in data.iteritems():
					if value:
						ET.SubElement(desc, name).text = value

			args.append(ET.tostring(root))

			with request.connmgr.get_connection('admin') as conn:
				sql = '''
				DECLARE @ErrMsg as nvarchar(500),
				@RC as int,
				@SM_ID as int

				SET @SM_ID = ?

				EXECUTE @RC = dbo.sp_GBL_SocialMedia_u @SM_ID OUTPUT, %s, @ErrMsg=@ErrMsg OUTPUT

				SELECT @RC as [Return], @ErrMsg AS ErrMsg, @SM_ID as SM_ID
				''' % ', '.join('?' * (len(args) - 1))

				cursor = conn.execute(sql, *args)
				result = cursor.fetchone()
				cursor.close()

			if not result.Return:
				SM_ID = result.SM_ID

				if is_add:
					msg = _('The Social Media Type was successfully added.', request)
				else:
					msg = _('The Social Media Type was successfully updated.', request)

				self._go_to_route('admin_socialmedia', action='edit', _query=[('InfoMsg', msg), ("SM_ID", SM_ID), ("ShowCultures", shown_cultures)])

			ErrMsg = _('Unable to save: ') + result.ErrMsg

		else:

			ErrMsg = _('There were validation errors.')

		socialmedia = None

		if not is_add:
			with request.connmgr.get_connection('admin') as conn:
				cursor = conn.execute('EXEC dbo.sp_GBL_SocialMedia_s ?', model_state.value('SM_ID'))

				socialmedia = cursor.fetchone()

				cursor.close()

		record_cultures = syslanguage.active_record_cultures()

		# errors = model_state.form.errors
		# data = model_state.form.data
		# raise Exception
		# XXX should we refetch the basic info?
		title = _('Manage Social Media Types', request)
		return self._create_response_namespace(title, title,
				dict(socialmedia=socialmedia, SM_ID=model_state.value('SM_ID'),
					shown_cultures=shown_cultures, record_cultures=record_cultures,
					is_add=is_add, ErrMsg=ErrMsg), no_index=True)