Ejemplo n.º 1
0
    def _update(self, portal):
        meta_type = 'Naaya Meeting'
        if not portal.is_pluggable_item_installed(meta_type):
            self.log.debug('Meeting not installed')
            return True

        self.log.debug('Changing meeting schema')
        schema_tool = portal.getSchemaTool()
        schema = schema_tool.getSchemaForMetatype(NyMeeting.meta_type)
        crt_widgets = schema.objectIds()
        if widgetid_from_propname('interval') not in crt_widgets:
            schema.manage_delObjects([widgetid_from_propname('start_date'),
                                      widgetid_from_propname('end_date'),
                                      widgetid_from_propname('time')])
            property_schema = get_pluggable_content()[NyMeeting.meta_type]['default_schema']['interval']
            schema.addWidget('interval', **property_schema)
            self.log.debug(('Naaya Meeting schema changes: '
                            '-start_date -end_date -time +interval'))
        else:
            self.log.debug('Meeting schema already contained interval-property')

        self.log.debug('Patching meeting objects')
        meetings = portal.getCatalogedObjects(meta_type)
        for meeting in meetings:
            if getattr(meeting, 'interval', None) is None:
                self.log.debug('Patching meeting object at %s' %
                               meeting.absolute_url(1))
                time = getattr(meeting, 'time', '')
                start_date = meeting.start_date
                end_date = getattr(meeting, 'end_date', '')
                # old NyMeeting accepted only start_date, interval obj reqs both
                if not end_date:
                    end_date = start_date
                (start_date, end_date) = (start_date.strftime('%d/%m/%Y'),
                                          end_date.strftime('%d/%m/%Y'))

                try:
                    i = interval_from_raw_time(start_date, end_date, time)
                except Exception, e:
                    self.log.error('Can not create Interval: %s' % str(e))
                    try:
                        i = Interval(start_date, '', end_date, '', True)
                    except Exception, e_inner:
                        today = datetime.now().strftime('%d/%m/%Y')
                        i = Interval(today, '', today, '', True)
                        self.log.error('Using TODAY as start/end dates, reason: %s'
                                       % str(e_inner))
                    self.log.error('IMPORTANT: Please manually edit meeting, ' +
                                   ('interval currently set as %s; ' % repr(i))
                                   + ('Old Values: (%s, %s, \'%s\')'
                                    % (start_date, end_date, time)))
                else:
                    self.log.debug(('Successfully converted (%s, %s, \'%s\'), '
                                    % (start_date, end_date, time)) +
                                    'setting meeting.interval: %s' % repr(i))

                meeting.interval = i
                delattr(meeting, 'start_date')
                delattr(meeting, 'end_date')
                delattr(meeting, 'time')
Ejemplo n.º 2
0
    def _update(self, portal):
        self.log.debug('Changing meeting schema')
        schema_tool = portal.getSchemaTool()
        schema = schema_tool.getSchemaForMetatype(NyMeeting.meta_type)

        try:
            schema.getWidget('auto_register')
        except KeyError:
            pass
        else:
            schema.manage_delObjects([widgetid_from_propname('auto_register')])

        property_schema = get_pluggable_content()[NyMeeting.meta_type][
            'default_schema']['auto_register']
        schema.addWidget('auto_register', **property_schema)

        meetings = portal.getCatalogedObjects(meta_type='Naaya Meeting')
        for meeting in meetings:
            self.log.debug('Found meeting object at %s' %
                           meeting.absolute_url(1))
            if not hasattr(meeting, 'auto_register'):
                meeting.auto_register = False
                self.log.debug(
                    'Added auto_register attribute for meeting at %s' %
                    meeting.absolute_url(1))
        return True
Ejemplo n.º 3
0
    def _update(self, portal):
        self.log.debug('Changing meeting schema')
        schema_tool = portal.getSchemaTool()
        schema = schema_tool.getSchemaForMetatype(NyMeeting.meta_type)

        try:
            schema.getWidget('auto_register')
        except KeyError:
            pass
        else:
            schema.manage_delObjects([widgetid_from_propname('auto_register')])

        property_schema = get_pluggable_content()[
            NyMeeting.meta_type]['default_schema']['auto_register']
        schema.addWidget('auto_register', **property_schema)

        meetings = portal.getCatalogedObjects(meta_type='Naaya Meeting')
        for meeting in meetings:
            self.log.debug('Found meeting object at %s' %
                           meeting.absolute_url(1))
            if not hasattr(meeting, 'auto_register'):
                meeting.auto_register = False
                self.log.debug(
                    'Added auto_register attribute for meeting at %s' %
                    meeting.absolute_url(1))
        return True
Ejemplo n.º 4
0
 def __call__(self, REQUEST):
     chm_terms = REQUEST.get("chm_terms", None)
     if chm_terms:
         for ob in self.aq_parent.objectValues():
             widget = getattr(ob._get_schema(), widgetid_from_propname("chm_terms"), None)
             if widget is None:
                 continue
             current_prop = ob.getLocalProperty("chm_terms")
             new_terms = chm_terms
             if current_prop:
                 current_prop = current_prop.split(widget.separator)
                 new_terms = list(set(new_terms) | set(current_prop))
             new_terms = widget.convert_formvalue_to_pythonvalue(new_terms)
             ob._change_schema_properties(chm_terms=new_terms)
     REQUEST.RESPONSE.redirect(self.aq_parent.absolute_url() + "/bulk_chm_terms_html?success=true")
Ejemplo n.º 5
0
 def __call__(self, REQUEST):
     chm_terms = REQUEST.get('chm_terms', None)
     if chm_terms:
         for ob in self.aq_parent.objectValues():
             widget = getattr(ob._get_schema(),
                              widgetid_from_propname('chm_terms'), None)
             if widget is None: continue
             current_prop = ob.getLocalProperty('chm_terms')
             new_terms = chm_terms
             if current_prop:
                 current_prop = current_prop.split(widget.separator)
                 new_terms = list(set(new_terms) | set(current_prop))
             new_terms = widget.convert_formvalue_to_pythonvalue(new_terms)
             ob._change_schema_properties(chm_terms=new_terms)
     REQUEST.RESPONSE.redirect(self.aq_parent.absolute_url() +
                               '/bulk_chm_terms_html?success=true')
Ejemplo n.º 6
0
    def update_modified_schema_property(self, property_data, REQUEST=None):
        """ """
        for prop in property_data:
            location = prop.split('||')
            portal = location[0]
            content_type = location[1]
            property = location[2]
            property_schema = get_pluggable_content()[content_type]['default_schema'][property]

            portal = self.unrestrictedTraverse(portal, None)
            schema_tool = portal._getOb(ID_SCHEMATOOL, None)
            schema = schema_tool.getSchemaForMetatype(content_type)
            schema.manage_delObjects([widgetid_from_propname(property)])
            schema.addWidget(property, **property_schema)

        if REQUEST:
            REQUEST.RESPONSE.redirect('%s/update_schemas_html?find=true' % self.absolute_url())
Ejemplo n.º 7
0
    def _update(self, portal):
        meta_type = 'Naaya Meeting'
        NETWORK_NAME = get_zope_env('NETWORK_NAME', '')
        if not portal.is_pluggable_item_installed(meta_type):
            self.log.debug('Meeting not installed')
            return True

        self.log.debug('Changing meeting schema')
        schema_tool = portal.getSchemaTool()
        schema = schema_tool.getSchemaForMetatype(NyMeeting.meta_type)
        crt_widgets = schema.objectIds()
        if widgetid_from_propname('is_eionet_meeting') not in crt_widgets:
            property_schema = get_pluggable_content()[NyMeeting.meta_type][
                'default_schema']['is_eionet_meeting']
            if NETWORK_NAME.lower() != 'eionet':
                property_schema['visible'] = False
            schema.addWidget('is_eionet_meeting', **property_schema)
            self.log.debug(('Naaya Meeting schema changes: '
                            'added the "Eionet Meeting" widget'))
        else:
            self.log.debug(
                'Meeting schema already contained is_eionet_meeting-property')

        return True
Ejemplo n.º 8
0
    def _update(self, portal):
        meta_type = 'Naaya Meeting'
        NETWORK_NAME = get_zope_env('NETWORK_NAME', '')
        if not portal.is_pluggable_item_installed(meta_type):
            self.log.debug('Meeting not installed')
            return True

        self.log.debug('Changing meeting schema')
        schema_tool = portal.getSchemaTool()
        schema = schema_tool.getSchemaForMetatype(NyMeeting.meta_type)
        crt_widgets = schema.objectIds()
        if widgetid_from_propname('is_eionet_meeting') not in crt_widgets:
            property_schema = get_pluggable_content()[
                NyMeeting.meta_type]['default_schema']['is_eionet_meeting']
            if NETWORK_NAME.lower() != 'eionet':
                property_schema['visible'] = False
            schema.addWidget('is_eionet_meeting', **property_schema)
            self.log.debug(('Naaya Meeting schema changes: '
                            'added the "Eionet Meeting" widget'))
        else:
            self.log.debug(
                'Meeting schema already contained is_eionet_meeting-property')

        return True
Ejemplo n.º 9
0
    def _update(self, portal):
        # Update meeting types in map symbols
        if not portal.is_pluggable_item_installed('Naaya Meeting'):
            self.log.debug('Meeting not installed')
            return True

        NETWORK_NAME = get_zope_env('NETWORK_NAME', '')
        eionet = NETWORK_NAME.lower() == 'eionet'
        portal_map = portal.getGeoMapTool()
        if portal_map is not None:
            if eionet:
                new_map_symbols = [('conference.png', 'Conference', 10),
                                   ('nrc_meeting.png', 'NRC meeting', 20),
                                   ('nrc_webinar.png', 'NRC webinar', 30),
                                   ('nfp_meeting.png', 'NFP meeting', 40),
                                   ('nfp_webinar.png', 'NFP webinar', 50),
                                   ('workshop.png', 'Workshop', 60)]
            else:
                new_map_symbols = [('conference.png', 'Conference', 10),
                                   ('workshop.png', 'Workshop', 60)]
            for i in range(len(new_map_symbols)):
                new_map_symbols[i] = (os.path.join(os.path.dirname(__file__),
                                                   'www', 'map_symbols',
                                                   new_map_symbols[i][0]),
                                      new_map_symbols[i][1],
                                      new_map_symbols[i][2])

            map_symbols = portal_map.getSymbolsListOrdered()
            new_map_symbols_titles = [s[1] for s in new_map_symbols]
            new_map_symbols_titles.append('Meeting')
            symbols_to_delete = [sym.id for sym in map_symbols if sym.title in
                                 new_map_symbols_titles]
            symbol_titles = [portal_map.getSymbolTitle(symbol) for symbol in
                             symbols_to_delete]
            portal_map.adminDeleteSymbols(symbols_to_delete)
            self.log.debug('Deleted old symbols for %s' % symbol_titles)

            for filename, symbol_name, sortorder in new_map_symbols:
                file = open(filename, 'r')
                symbol = file.read()
                file.close()

                portal_map.adminAddSymbol(title=symbol_name, picture=symbol,
                                          sortorder=sortorder,
                                          id=filename.replace('.png', ''))
            symbol_titles = [new_symbol[1] for new_symbol in new_map_symbols]
            self.log.debug('Added symbols for %s' % symbol_titles)

        # set meeting type based on the former eionet_meeting flag
        meetings = portal.getCatalogedObjects(meta_type='Naaya Meeting')
        for meeting in meetings:
            if not getattr(meeting, 'added_nrc_meeting_type', None):
                is_eionet_meeting = getattr(meeting, 'is_eionet_meeting', None)
                if is_eionet_meeting:
                    meeting.geo_type = os.path.join(
                        os.path.dirname(__file__), 'www', 'map_symbols',
                        'nrc_meeting')
                    self.log.debug('Meeting %s changed to NRC meeting' %
                                   meeting.absolute_url())
                else:
                    meeting.geo_type = os.path.join(
                        os.path.dirname(__file__), 'www', 'map_symbols',
                        'conference')
                    self.log.debug('Meeting %s changed to conference' %
                                   meeting.absolute_url())
                meeting.added_nrc_meeting_type = True
                if is_eionet_meeting is not None:
                    delattr(meeting, 'is_eionet_meeting')

        schema_tool = portal.getSchemaTool()
        schema = schema_tool.getSchemaForMetatype('Naaya Meeting')
        crt_widgets = schema.objectIds()
        widget_id = widgetid_from_propname('is_eionet_meeting')
        if widget_id in crt_widgets:
            schema.manage_delObjects(widget_id)
            self.log.debug(('Naaya Meeting schema changes: '
                            'removed the "Eionet Meeting" widget'))
        else:
            self.log.debug(
                'is_eionet_meeting-property not present in Meeting schema')

        return True
Ejemplo n.º 10
0
    def _update(self, portal):
        # Update meeting types in map symbols
        if not portal.is_pluggable_item_installed('Naaya Meeting'):
            self.log.debug('Meeting not installed')
            return True

        NETWORK_NAME = get_zope_env('NETWORK_NAME', '')
        eionet = NETWORK_NAME.lower() == 'eionet'
        portal_map = portal.getGeoMapTool()
        if portal_map is not None:
            if eionet:
                new_map_symbols = [('conference.png', 'Conference', 10),
                                   ('nrc_meeting.png', 'NRC meeting', 20),
                                   ('nrc_webinar.png', 'NRC webinar', 30),
                                   ('nfp_meeting.png', 'NFP meeting', 40),
                                   ('nfp_webinar.png', 'NFP webinar', 50),
                                   ('workshop.png', 'Workshop', 60)]
            else:
                new_map_symbols = [('conference.png', 'Conference', 10),
                                   ('workshop.png', 'Workshop', 60)]
            for i in range(len(new_map_symbols)):
                new_map_symbols[i] = (os.path.join(os.path.dirname(__file__),
                                                   'www', 'map_symbols',
                                                   new_map_symbols[i][0]),
                                      new_map_symbols[i][1],
                                      new_map_symbols[i][2])

            map_symbols = portal_map.getSymbolsListOrdered()
            new_map_symbols_titles = [s[1] for s in new_map_symbols]
            new_map_symbols_titles.append('Meeting')
            symbols_to_delete = [
                sym.id for sym in map_symbols
                if sym.title in new_map_symbols_titles
            ]
            symbol_titles = [
                portal_map.getSymbolTitle(symbol)
                for symbol in symbols_to_delete
            ]
            portal_map.adminDeleteSymbols(symbols_to_delete)
            self.log.debug('Deleted old symbols for %s' % symbol_titles)

            for filename, symbol_name, sortorder in new_map_symbols:
                file = open(filename, 'r')
                symbol = file.read()
                file.close()

                portal_map.adminAddSymbol(title=symbol_name,
                                          picture=symbol,
                                          sortorder=sortorder,
                                          id=filename.replace('.png', ''))
            symbol_titles = [new_symbol[1] for new_symbol in new_map_symbols]
            self.log.debug('Added symbols for %s' % symbol_titles)

        # set meeting type based on the former eionet_meeting flag
        meetings = portal.getCatalogedObjects(meta_type='Naaya Meeting')
        for meeting in meetings:
            if not getattr(meeting, 'added_nrc_meeting_type', None):
                is_eionet_meeting = getattr(meeting, 'is_eionet_meeting', None)
                if is_eionet_meeting:
                    meeting.geo_type = os.path.join(os.path.dirname(__file__),
                                                    'www', 'map_symbols',
                                                    'nrc_meeting')
                    self.log.debug('Meeting %s changed to NRC meeting' %
                                   meeting.absolute_url())
                else:
                    meeting.geo_type = os.path.join(os.path.dirname(__file__),
                                                    'www', 'map_symbols',
                                                    'conference')
                    self.log.debug('Meeting %s changed to conference' %
                                   meeting.absolute_url())
                meeting.added_nrc_meeting_type = True
                if is_eionet_meeting is not None:
                    delattr(meeting, 'is_eionet_meeting')

        schema_tool = portal.getSchemaTool()
        schema = schema_tool.getSchemaForMetatype('Naaya Meeting')
        crt_widgets = schema.objectIds()
        widget_id = widgetid_from_propname('is_eionet_meeting')
        if widget_id in crt_widgets:
            schema.manage_delObjects(widget_id)
            self.log.debug(('Naaya Meeting schema changes: '
                            'removed the "Eionet Meeting" widget'))
        else:
            self.log.debug(
                'is_eionet_meeting-property not present in Meeting schema')

        return True
Ejemplo n.º 11
0
    def _update(self, portal):
        meta_type = 'Naaya Meeting'
        if not portal.is_pluggable_item_installed(meta_type):
            self.log.debug('Meeting not installed')
            return True

        self.log.debug('Changing meeting schema')
        schema_tool = portal.getSchemaTool()
        schema = schema_tool.getSchemaForMetatype(NyMeeting.meta_type)
        crt_widgets = schema.objectIds()
        if widgetid_from_propname('interval') not in crt_widgets:
            schema.manage_delObjects([
                widgetid_from_propname('start_date'),
                widgetid_from_propname('end_date'),
                widgetid_from_propname('time')
            ])
            property_schema = get_pluggable_content()[
                NyMeeting.meta_type]['default_schema']['interval']
            schema.addWidget('interval', **property_schema)
            self.log.debug(('Naaya Meeting schema changes: '
                            '-start_date -end_date -time +interval'))
        else:
            self.log.debug(
                'Meeting schema already contained interval-property')

        self.log.debug('Patching meeting objects')
        meetings = portal.getCatalogedObjects(meta_type)
        for meeting in meetings:
            if getattr(meeting, 'interval', None) is None:
                self.log.debug('Patching meeting object at %s' %
                               meeting.absolute_url(1))
                time = getattr(meeting, 'time', '')
                start_date = meeting.start_date
                end_date = getattr(meeting, 'end_date', '')
                # old NyMeeting accepted only start_date, interval obj
                # requires both
                if not end_date:
                    end_date = start_date
                (start_date, end_date) = (start_date.strftime('%d/%m/%Y'),
                                          end_date.strftime('%d/%m/%Y'))

                try:
                    i = interval_from_raw_time(start_date, end_date, time)
                except Exception, e:
                    self.log.error('Can not create Interval: %s' % str(e))
                    try:
                        i = Interval(start_date, '', end_date, '', True)
                    except Exception, e_inner:
                        today = datetime.now().strftime('%d/%m/%Y')
                        i = Interval(today, '', today, '', True)
                        self.log.error(
                            'Using TODAY as start/end dates, reason: %s' %
                            str(e_inner))
                    self.log.error(
                        'IMPORTANT: Please manually edit meeting, ' +
                        ('interval currently set as %s; ' % repr(i)) +
                        ('Old Values: (%s, %s, \'%s\')' %
                         (start_date, end_date, time)))
                else:
                    self.log.debug(
                        ('Successfully converted (%s, %s, \'%s\'), ' %
                         (start_date, end_date, time)) +
                        'setting meeting.interval: %s' % repr(i))

                meeting.interval = i
                delattr(meeting, 'start_date')
                delattr(meeting, 'end_date')
                delattr(meeting, 'time')