Beispiel #1
0
    def _basic_info(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()

        validator = ciocvalidators.IDValidator(not_empty=True)
        try:
            ViewType = validator.to_python(request.params.get("ViewType"))
        except validators.Invalid as e:
            self._error_page(_("Invalid View Type: ", request) + e.msg)

        return ViewType, domain, shown_cultures
Beispiel #2
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:
			self._error_page(_('Invalid Domain', request))

		if domain.id == const.DM_CIC:
			user_dm = user.cic if request.dboptions.UseCIC else user.vol
		else:
			user_dm = user.vol

		if not user_dm.SuperUser:
			self._security_failure()

		with request.connmgr.get_connection('admin') as conn:
			cursor = conn.execute('EXEC sp_%s_View_l ?, ?, 1, NULL' % domain.str, request.dboptions.MemberID, user.Agency)
			views = cursor.fetchall()
			cursor.close()

		title = _('Manage Views (%s)', request) % _(domain.label, request)
		return self._create_response_namespace(title, title, dict(views=views, domain=domain), no_index=True)
Beispiel #3
0
	def delete(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:
			self._error_page(_('Invalid Domain', request))

		if domain.id == const.DM_CIC:
			user_dm = user.cic if request.dboptions.UseCIC else user.vol
		else:
			user_dm = user.vol

		if not user_dm.SuperUser:
			self._security_failure()

		model_state = request.model_state

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

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

		ViewType = model_state.form.data['ViewType']

		request.override_renderer = 'cioc.web:templates/confirmdelete.mak'

		title = _('Manage Views (%s)', request) % _(domain.label, request)
		return self._create_response_namespace(title, title, dict(id_name='ViewType', id_value=ViewType, route='admin_view', action='delete', domain=domain), no_index=True)
Beispiel #4
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,
        )
Beispiel #5
0
	def add_lang(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:
			self._error_page(_('Invalid Domain', request))

		if domain.id == const.DM_CIC:
			user_dm = user.cic if request.dboptions.UseCIC else user.vol
		else:
			user_dm = user.vol

		if not user_dm.SuperUser:
			self._security_failure()

		model_state = request.model_state
		model_state.validators = {
			'ViewType': ciocvalidators.IDValidator(not_empty=True),
			'Culture': ciocvalidators.ActiveCulture(not_empty=True)
		}
		model_state.method = None

		if not model_state.validate():
			# XXX invalid ViewType or Culture

			if 'ViewType' in model_state.form.errors:
				self._error_page(_('Invalid ID', request))

			else:
				self._error_page(_('Invalid Request', request))

		ViewType = model_state.form.data.get('ViewType')
		Culture = model_state.form.data.get('Culture')

		LangID = syslanguage.culture_map()[Culture].LangID

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

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

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

			cursor = conn.execute(sql, ViewType, user.Mod, request.dboptions.MemberID, user.Agency, LangID)
			result = cursor.fetchone()
			cursor.close()

		query = [('ViewType', ViewType), ('DM', domain.id)]
		if result.Return:
			query.append(('ErrMsg', result.ErrMsg))

		self._go_to_route('admin_view', action='edit', _query=query)
Beispiel #6
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,
        )
    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,
        )
Beispiel #8
0
	def delete_confirm(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:
			self._error_page(_('Invalid Domain', request))

		if domain.id == const.DM_CIC:
			user_dm = user.cic if request.dboptions.UseCIC else user.vol
		else:
			user_dm = user.vol

		if not user_dm.SuperUser:
			self._security_failure()

		model_state = request.model_state

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

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

		ViewType = model_state.form.data['ViewType']

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

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

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

			cursor = conn.execute(sql, ViewType, request.dboptions.MemberID, user.Agency)
			result = cursor.fetchone()
			cursor.close()

		if not result.Return:
			self._go_to_route('admin_view_index', _query=[('InfoMsg', _('View Deleted', request)), ('DM', domain.id)])

		if result.Return == 3:
			self._error_page(_('Unable to delete View: ', request) + result.ErrMsg)

		self._go_to_route('admin_view', action='edit', _query=[('ErrMsg', _('Unable to delete View: ') + result.ErrMsg), ('ViewType', ViewType), ('DM', domain.id)])
	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)
Beispiel #10
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,
        )
Beispiel #11
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,
        )
Beispiel #12
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)
Beispiel #13
0
	def _get_edit_info(self, CM_ID, is_add, alt_area_get_names=None):
		request = self.request

		community = None
		community_descriptions = {}
		alt_names = []
		alt_areas = []
		prov_state = []
		alt_area_name_map = {}

		with request.connmgr.get_connection('admin') as conn:
			if not is_add:
				cursor = conn.execute('EXEC dbo.sp_GBL_Community_s ?', CM_ID)
				community = cursor.fetchone()
				if community:
					cursor.nextset()
					log.debug('descriptions')
					for lng in cursor.fetchall():
						community_descriptions[lng.Culture.replace('-', '_')] = lng

					cursor.nextset()
					alt_names = cursor.fetchall()

					cursor.nextset()
					alt_areas = cursor.fetchall()

				cursor.close()

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

			prov_state = map(tuple, conn.execute('SELECT ProvID, GBL_ProvinceStateCountry FROM dbo.vw_GBL_ProvinceStateCountry').fetchall())
			if alt_area_get_names:
				alt_area_name_map = {str(x[0]): x[1] for x in conn.execute('EXEC sp_GBL_Community_ls_Names ?', ','.join(str(x) for x in alt_area_get_names)).fetchall()}

		if community:
			community.AltSearchArea = xml_to_dict_list(community.AltSearchArea)

		if alt_area_get_names is None:
			alt_area_name_map = {str(x[0]): x[1] for x in alt_areas}

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

		return EditValues(CM_ID, community, community_descriptions, alt_names, alt_areas, prov_state, alt_area_name_map, shown_cultures)
Beispiel #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"] = [
            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,
        )
Beispiel #15
0
	def delete_lang(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:
			self._error_page(_('Invalid Domain', request))

		if domain.id == const.DM_CIC:
			user_dm = user.cic if request.dboptions.UseCIC else user.vol
		else:
			user_dm = user.vol

		if not user_dm.SuperUser:
			self._security_failure()

		model_state = request.model_state
		model_state.validators = {
			'ViewType': ciocvalidators.IDValidator(not_empty=True),
			'Culture': ciocvalidators.ActiveCulture(not_empty=True)
		}
		model_state.method = None

		if not model_state.validate():
			# XXX invalid ViewType or Culture

			if 'ViewType' in model_state.form.errors:
				self._error_page(_('Invalid ID', request))

			else:
				self._error_page(_('Invalid Request', request))

		ViewType = model_state.form.data.get('ViewType')
		Culture = model_state.form.data.get('Culture')

		title = _('Manage Views (%s)', request) % _(domain.label, request)
		return self._create_response_namespace(title, title, dict(ViewType=ViewType, Culture=Culture, domain=domain), no_index=True)
Beispiel #16
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)
Beispiel #17
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)
Beispiel #18
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)
Beispiel #19
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)
Beispiel #20
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)
Beispiel #21
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,
        )
Beispiel #22
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)
Beispiel #23
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)
Beispiel #24
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)
Beispiel #25
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)
Beispiel #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,
        )
Beispiel #27
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,
        )
Beispiel #28
0
	def save(self):
		request = self.request

		if request.POST.get('Delete'):
			self._go_to_route('admin_view', action='delete', _query=[('ViewType', request.POST.get('ViewType')), ('DM', request.POST.get('DM'))])

		user = request.user

		if not user.SuperUser:
			self._security_failure()

		domain, shown_cultures = viewbase.get_domain_and_show_cultures(request.params, ensure_active_cultures=False, record_cultures=False)
		if not domain:
			self._error_page(_('Invalid Domain', request))

		if domain.id == const.DM_CIC:
			user_dm = user.cic if request.dboptions.UseCIC else user.vol
			schema = ViewSchemaCIC()
		else:
			user_dm = user.vol
			schema = ViewSchemaVOL()

		if not user_dm.SuperUser:
			self._security_failure()

		model_state = request.model_state

		model_state.schema = schema
		model_state.form.variable_decode = True

		if domain.id == const.DM_CIC and not request.dboptions.UseCIC:
			request.POST['item.QuickListDropDown'] = 1
			request.POST['item.QuickListWrapAt'] = 1
			request.POST['item.QuickListMatchAll'] = 'ANY'

		if model_state.validate():
			# valid. Save changes and redirect
			form_data = model_state.form.data
			ViewType = form_data['ViewType']

			args = [ViewType, user.Mod, request.dboptions.MemberID, user.Agency]

			view_fields = schema.fields['item'].fields.keys()
			view = form_data.get('item', {})

			args.extend(view.get(k) for k in view_fields)

			dopts_fields = DisplayOptionSchema.fields.keys()
			dopts_fields.remove('FieldIDs')
			dopts = form_data.get('dopts', {})

			args.extend(dopts.get(k) for k in dopts_fields)

			argnames = view_fields + dopts_fields

			if domain.id == const.DM_CIC:
				root = ET.Element('PubIDs')
				if view.get('CanSeeNonPublicPub') is None:
					for pub in form_data['PUB_ID']:
						ET.SubElement(root, "PBID").text = unicode(pub)

				args.append(ET.tostring(root))
				argnames.append('Publications')

				root = ET.Element('PubIDs')
				for pub in form_data['ADDPUB_ID']:
					ET.SubElement(root, "PBID").text = unicode(pub)

				args.append(ET.tostring(root))
				argnames.append('AddPublications')

			root = ET.Element('DESCS')

			has_label_overrides = form_data.get('HasLabelOverrides')
			for culture, data in (form_data['descriptions'] or {}).iteritems():
				desc = ET.SubElement(root, 'DESC')
				ET.SubElement(desc, "Culture").text = culture.replace('_', '-')
				for name, value in data.iteritems():
					if not has_label_overrides and name in label_override_fields:
						continue
					if value:
						ET.SubElement(desc, name).text = unicode(value)

			args.append(ET.tostring(root))

			root = ET.Element('VIEWS')
			for view_type in form_data['Views']:
				ET.SubElement(root, 'VIEW').text = unicode(view_type)

			args.append(ET.tostring(root))

			root = ET.Element('AdvSearchCheckLists')
			for field in form_data['AdvSearchCheckLists']:
				ET.SubElement(root, "Chk").text = unicode(field)

			args.append(ET.tostring(root))

			args.append(",".join(str(x) for x in dopts['FieldIDs']))

			argnames.extend(['Descriptions', 'Views', 'AdvSrchCheckLists', 'DisplayOptFields'])

			argnames = ', '.join(k.join(('@', '=?')) for k in argnames)

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

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

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

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

			if not result.Return:
				self._go_to_route('admin_view', action='edit', _query=[('InfoMsg', _('The View has been successfully updated.', request)), ("ViewType", ViewType), ('DM', domain.id)])

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

		else:
			if model_state.is_error('ViewType'):
				self._error_page(_('Invalid View ID', request))

			ErrMsg = _('There were validation errors.')
			log.debug('errors: %s', model_state.form.errors)

		usage = None
		security_levels = []
		view_cultures = set()
		templates = []
		agencies = []
		view_descs = []
		chk_field_descs = []
		inclusion_policies = []
		search_tips = []
		disp_opt_field_descs = []
		print_profiles = []

		publication_descs = []

		community_sets = []

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

			usage = cursor.fetchone()

			cursor.nextset()

			security_levels = cursor.fetchall()

			cursor.nextset()

			view_cultures = set(x.Culture for x in cursor.fetchall())

			cursor.nextset()

			templates = [tuple(x) for x in cursor.fetchall()]

			cursor.nextset()

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

			cursor.nextset()

			view_descs = cursor.fetchall()

			cursor.nextset()

			chk_field_descs = cursor.fetchall()

			cursor.nextset()

			inclusion_policies = cursor.fetchall()

			cursor.nextset()

			search_tips = cursor.fetchall()

			cursor.nextset()

			disp_opt_field_descs = cursor.fetchall()

			cursor.nextset()

			print_profiles = cursor.fetchall()

			if domain.id == const.DM_CIC:
				cursor.nextset()

				publication_descs = cursor.fetchall()

			else:
				cursor.nextset()

				community_sets = [tuple(x) for x in cursor.fetchall()]

			cursor.close()

		data = model_state.form.data

		publications = []
		auto_add_pubs = []
		if domain.id == const.DM_CIC:
			val = model_state.value('item.CanSeeNonPublicPub')
			data['item.CanSeeNonPublicPub'] = RCanSeeNonPublicPubOptions.get(val, val)

			val = model_state.value('item.QuickListMatchAll')
			data['item.QuickListMatchAll'] = RQuickListMatchAllOptions.get(val, val)

			val = model_state.value('item.SrchCommunityDefault')
			data['item.SrchCommunityDefault'] = RSrchCommunityDefaultOptions.get(val, val)

			val = model_state.value('item.CCRFields')
			data['item.CCRFields'] = RCCRFieldsOptions.get(val, val)

			data['PUB_ID'] = publications = request.POST.getall('PUB_ID')
			data['ADDPUB_ID'] = auto_add_pubs = request.POST.getall('ADDPUB_ID')

			pubs_with_headings = [x for x in publication_descs if x.HasHeadings]

		data['Views'] = request.POST.getall('Views')
		data['AdvSearchCheckLists'] = request.POST.getall('AdvSearchCheckLists')
		data['dopts.FieldIDs'] = request.POST.getall('dopts.FieldIDs')

		title = _('Manage Views (%s)', request) % _(domain.label, request)
		return self._create_response_namespace(
			title, title,
			dict(ViewType=ViewType, usage=usage,
				security_levels=security_levels,
				view_cultures=view_cultures, templates=templates, agencies=agencies,
				community_sets=community_sets, publications=publications,
				auto_add_pubs=auto_add_pubs,
				publication_descs=format_pub_list(publication_descs, True),
				pubs_with_headings=format_pub_list(pubs_with_headings, True),
				inclusion_policies=inclusion_policies, domain=domain,
				search_tips=search_tips, chk_field_descs=chk_field_descs,
				view_descs=view_descs, ErrMsg=ErrMsg,
				disp_opt_field_descs=[tuple(x) for x in disp_opt_field_descs],
				print_profiles=[tuple(x) for x in print_profiles]),
			no_index=True)
Beispiel #29
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)
Beispiel #30
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,
        )
Beispiel #31
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,
        )
Beispiel #32
0
    def _get_edit_info(self, CM_ID, is_add, alt_area_get_names=None):
        request = self.request

        community = None
        community_descriptions = {}
        alt_names = []
        alt_areas = []
        prov_state = []
        alt_area_name_map = {}

        with request.connmgr.get_connection("admin") as conn:
            if not is_add:
                cursor = conn.execute("EXEC dbo.sp_GBL_Community_s ?", CM_ID)
                community = cursor.fetchone()
                if community:
                    cursor.nextset()
                    log.debug("descriptions")
                    for lng in cursor.fetchall():
                        community_descriptions[lng.Culture.replace("-",
                                                                   "_")] = lng

                    cursor.nextset()
                    alt_names = cursor.fetchall()

                    cursor.nextset()
                    alt_areas = cursor.fetchall()

                cursor.close()

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

            prov_state = list(
                map(
                    tuple,
                    conn.execute(
                        "SELECT ProvID, GBL_ProvinceStateCountry FROM dbo.vw_GBL_ProvinceStateCountry"
                    ).fetchall(),
                ))
            if alt_area_get_names:
                alt_area_name_map = {
                    str(x[0]): x[1]
                    for x in conn.execute(
                        "EXEC sp_GBL_Community_ls_Names ?",
                        ",".join(str(x) for x in alt_area_get_names),
                    ).fetchall()
                }

        if community:
            community.AltSearchArea = xml_to_dict_list(community.AltSearchArea)

        if alt_area_get_names is None:
            alt_area_name_map = {str(x[0]): x[1] for x in alt_areas}

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

        return EditValues(
            CM_ID,
            community,
            community_descriptions,
            alt_names,
            alt_areas,
            prov_state,
            alt_area_name_map,
            shown_cultures,
        )
Beispiel #33
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)
Beispiel #34
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)
Beispiel #35
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:
			self._error_page(_('Invalid Domain', request))

		if domain.id == const.DM_CIC:
			user_dm = user.cic if request.dboptions.UseCIC else user.vol
		else:
			user_dm = user.vol

		if not user_dm.SuperUser:
			self._security_failure()

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

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

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

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

		view = None
		descriptions = {}
		views = []
		publications = []
		auto_add_pubs = []
		chk_fields = []
		disp_opt = None
		disp_opt_fields = []
		print_profiles = []

		usage = None
		security_levels = []
		view_cultures = set()
		templates = []
		agencies = []
		view_descs = []
		chk_field_descs = []
		inclusion_policies = []
		search_tips = []
		disp_opt_field_descs = []

		publication_descs = []
		pubs_with_headings = []

		community_sets = []

		with request.connmgr.get_connection('admin') as conn:
			cursor = conn.execute('EXEC dbo.sp_%s_View_s ?, ?' % domain.str, ViewType, request.dboptions.MemberID)
			view = cursor.fetchone()
			if view:
				cursor.nextset()
				for lng in cursor.fetchall():
					descriptions[lng.Culture.replace('-', '_')] = lng

				cursor.nextset()

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

				cursor.nextset()

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

				cursor.nextset()

				disp_opt = cursor.fetchone()

				cursor.nextset()

				disp_opt_fields = set(x[0] for x in cursor.fetchall())

				if domain.id == const.DM_CIC:
					cursor.nextset()

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

					cursor.nextset()

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

			cursor.close()

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

			cursor = conn.execute('EXEC dbo.sp_%s_View_s_FormLists ?, ?, ?' % domain.str, request.dboptions.MemberID, user.Agency, ViewType)

			usage = cursor.fetchone()

			cursor.nextset()

			security_levels = cursor.fetchall()

			cursor.nextset()

			view_cultures = set(x.Culture for x in cursor.fetchall())

			cursor.nextset()

			templates = [tuple(x) for x in cursor.fetchall()]

			cursor.nextset()

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

			cursor.nextset()

			view_descs = cursor.fetchall()

			cursor.nextset()

			chk_field_descs = cursor.fetchall()

			cursor.nextset()

			inclusion_policies = cursor.fetchall()

			cursor.nextset()

			search_tips = cursor.fetchall()

			cursor.nextset()

			disp_opt_field_descs = cursor.fetchall()

			cursor.nextset()

			print_profiles = cursor.fetchall()

			if domain.id == const.DM_CIC:
				cursor.nextset()

				publication_descs = cursor.fetchall()

			else:
				cursor.nextset()

				community_sets = [tuple(x) for x in cursor.fetchall()]

			cursor.close()

		data = model_state.form.data
		data['item'] = view
		data['descriptions'] = descriptions
		data['Views'] = views
		data['AdvSearchCheckLists'] = chk_fields
		data['dopts'] = disp_opt
		data['dopts.FieldIDs'] = disp_opt_fields
		data['HasLabelOverrides'] = any(getattr(x, y, None) for x in descriptions.values() for y in label_override_fields)

		if domain.id == const.DM_CIC:
			data['PUB_ID'] = publications
			data['ADDPUB_ID'] = auto_add_pubs

			val = view.CanSeeNonPublicPub
			data['item.CanSeeNonPublicPub'] = RCanSeeNonPublicPubOptions.get(val, val)

			val = view.QuickListMatchAll
			data['item.QuickListMatchAll'] = RQuickListMatchAllOptions.get(val, val)

			val = view.SrchCommunityDefault
			data['item.SrchCommunityDefault'] = RSrchCommunityDefaultOptions.get(val, val)

			val = view.CCRFields
			data['item.CCRFields'] = RCCRFieldsOptions.get(val, val)

			pubs_with_headings = [x for x in publication_descs if x.HasHeadings]

		title = _('Manage Views (%s)', request) % _(domain.label, request)
		return self._create_response_namespace(
			title, title,
			dict(
				view=view, descriptions=descriptions, ViewType=ViewType,
				usage=usage, security_levels=security_levels,
				view_cultures=view_cultures, templates=templates, agencies=agencies,
				community_sets=community_sets, publications=publications,
				auto_add_pubs=auto_add_pubs,
				publication_descs=format_pub_list(publication_descs, True),
				pubs_with_headings=format_pub_list(pubs_with_headings, True),
				inclusion_policies=inclusion_policies, domain=domain,
				search_tips=search_tips, disp_opt_field_descs=[tuple(x) for x in disp_opt_field_descs],
				print_profiles=[tuple(x) for x in print_profiles],
				chk_field_descs=chk_field_descs, view_descs=view_descs),
			no_index=True)
Beispiel #36
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,
        )
Beispiel #37
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,
        )
Beispiel #38
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,
        )
Beispiel #39
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,
        )