Example #1
0
def evolve(context):
    # add default category and layer to all calendars
    # Prevent 'set_created' event handler from being called since it will,
    # in turn, set the content_modified attribute of community which is used
    # as the "Last Activity" in the user interface.  We don't want this tweak
    # to impact a community's last activity.  This means we need to set created
    # and modified on the new layers and categories ourselves.
    registry = getSiteManager()
    registry.adapters.unsubscribe(
        (IContent, IObjectWillBeAddedEvent), None, set_created)
    try:
        search = ICatalogSearch(context)
        default_category_name = ICalendarCategory.getTaggedValue('default_name')
        default_layer_name = ICalendarLayer.getTaggedValue('default_name')
        now = datetime.now()

        cnt, docids, resolver = search(interfaces=[ICalendar])
        for docid in docids:
            calendar = resolver(docid)
            default_category = create_content(ICalendarCategory, 'Default')
            default_category.created = default_category.modified = now
            if not default_category_name in calendar:
                calendar[default_category_name] = default_category
                local_layer = create_content(ICalendarLayer,
                                             "This Calendar's Events Only", 'blue',
                                             [resource_path(default_category)])
                local_layer.created = local_layer.modified = now
                if not default_layer_name in calendar:
                    calendar[default_layer_name] = local_layer
    finally:
        registry.adapters.subscribe(
            (IContent, IObjectWillBeAddedEvent), None, set_created)
Example #2
0
def calendar_setup_view(context, request):
    default_category_name = ICalendarCategory.getTaggedValue('default_name')
    categories = filter(lambda x: x.__name__ != default_category_name,
                        _get_calendar_categories(context))

    default_layer_name = ICalendarLayer.getTaggedValue('default_name')
    layers = filter(lambda x: x.__name__ != default_layer_name,
                    _get_calendar_layers(context))

    fielderrors = {}
    fielderrors_target = None

    page_title = 'Calendar Setup'
    api = TemplateAPI(context, request, page_title)

    return render_template_to_response(
        'templates/calendar_setup.pt',
        back_to_calendar_url=model_url(context, request),
        categories_url=model_url(context, request, 'categories.html'),
        layers_url=model_url(context, request, 'layers.html'),
        formfields=api.formfields,
        fielderrors=fielderrors,
        fielderrors_target = fielderrors_target,
        api=api,
        editable_categories = categories,
        editable_layers = layers,
        all_categories = _get_all_calendar_categories(context, request),
        colors = _COLORS,
        )
Example #3
0
def evolve(context):
    # add default category and layer to all calendars
    # Prevent 'set_created' event handler from being called since it will,
    # in turn, set the content_modified attribute of community which is used
    # as the "Last Activity" in the user interface.  We don't want this tweak
    # to impact a community's last activity.  This means we need to set created
    # and modified on the new layers and categories ourselves.
    registry = getSiteManager()
    registry.adapters.unsubscribe((IContent, IObjectWillBeAddedEvent), None,
                                  set_created)
    try:
        search = ICatalogSearch(context)
        default_category_name = ICalendarCategory.getTaggedValue(
            'default_name')
        default_layer_name = ICalendarLayer.getTaggedValue('default_name')
        now = datetime.now()

        cnt, docids, resolver = search(interfaces=[ICalendar])
        for docid in docids:
            calendar = resolver(docid)
            default_category = create_content(ICalendarCategory, 'Default')
            default_category.created = default_category.modified = now
            if not default_category_name in calendar:
                calendar[default_category_name] = default_category
                local_layer = create_content(ICalendarLayer,
                                             "This Calendar's Events Only",
                                             'blue',
                                             [resource_path(default_category)])
                local_layer.created = local_layer.modified = now
                if not default_layer_name in calendar:
                    calendar[default_layer_name] = local_layer
    finally:
        registry.adapters.subscribe((IContent, IObjectWillBeAddedEvent), None,
                                    set_created)
Example #4
0
def calendar_setup_layers_view(context, request):
    form = CalendarLayersForm()

    default_layer_name = ICalendarLayer.getTaggedValue('default_name')
    layers = filter(lambda x: x.__name__ != default_layer_name,
                    _get_calendar_layers(context))
    layer_titles = [ x.title for x in layers]
    layer_names = [ x.__name__ for x in layers ]

    default_category_name = ICalendarCategory.getTaggedValue('default_name')
    categories = filter(lambda x: x.__name__ != default_category_name,
                        _get_calendar_categories(context))

    if 'form.delete' in request.POST:
        layer_name = request.POST['form.delete']
        if layer_name == default_layer_name:
            message = 'Cannot delete default layer'
        elif layer_name and layer_name in layer_names:
            title = context[layer_name].title
            del context[layer_name]
            message = '%s layer removed' % title
        else:
            message = 'Layer is invalid'

        location = model_url(context, request, 'layers.html',
                             query={'status_message': message})
        return HTTPFound(location=location)

    fielderrors_target = None
    fielderrors = {}

    if 'form.submitted' in request.POST:
        try:
            converted = form.validate(request.POST)
            category_paths = list(set(request.POST.getall('category_paths')))
            layer_name = generate_name(context)
            layer_title = converted['layer_title']
            layer_color = converted['layer_color']

            if layer_title in layer_titles:
                msg = "Name is already used"
                raise Invalid(value=layer_title, state=None,
                          msg=msg, error_list=None,
                          error_dict={'layer_title': msg})

            layer = create_content(ICalendarLayer,
                                   layer_title, layer_color, category_paths)
            context[layer_name] = layer

            location = model_url(
                context, request,
                'layers.html',
                query={'status_message':'Calendar layer added'})
            return HTTPFound(location=location)

        except Invalid, e:
            fielderrors_target = '__add_layer__'
            fielderrors = e.error_dict
Example #5
0
File: site.py Project: hj91/karl
def _get_texts(object, default):
    if IPhoto.providedBy(object):
        return default

    adapter = queryAdapter(object, ITextIndexData)
    if adapter is None:
        if not IContent.providedBy(object) or ICalendarLayer.providedBy(object) or ICalendarCategory.providedBy(object):
            return default
        adapter = FlexibleTextIndexData(object)
    texts = adapter()
    if not texts:
        return default
    return texts
Example #6
0
    def add(self, context, request):
        default_category_name = ICalendarCategory.getTaggedValue('default_name')
        default_layer_name = ICalendarLayer.getTaggedValue('default_name')

        calendar = create_content(ICalendar)
        context['calendar'] = calendar
        calendar = context['calendar']
        default_category = create_content(ICalendarCategory, 'Default')
        calendar[default_category_name] = default_category
        local_layer = create_content(ICalendarLayer,
                                     "This Calendar's Events Only",' blue',
                                     [resource_path(default_category)])
        calendar[default_layer_name] = local_layer
Example #7
0
def _get_calendar_layers(context):
    layers = [ x for x in context.values() if ICalendarLayer.providedBy(x) ]
    for layer in layers:
        layer._v_categories = []
        for path in layer.paths:
            category = {}
            try:
                calendar = find_model(context, path)
                title = _calendar_category_title(calendar)
                category['title'] = title
                layer._v_categories.append(category)
            except KeyError:
                continue
    return layers
Example #8
0
    def add(self, context, request):
        default_category_name = ICalendarCategory.getTaggedValue(
            'default_name')
        default_layer_name = ICalendarLayer.getTaggedValue('default_name')

        calendar = create_content(ICalendar)
        context['calendar'] = calendar
        calendar = context['calendar']
        default_category = create_content(ICalendarCategory, 'Default')
        calendar[default_category_name] = default_category
        local_layer = create_content(ICalendarLayer,
                                     "This Calendar's Events Only", ' blue',
                                     [resource_path(default_category)])
        calendar[default_layer_name] = local_layer
Example #9
0
def _get_texts(object, default):
    if IPhoto.providedBy(object):
        return default

    adapter = queryAdapter(object, ITextIndexData)
    if adapter is None:
        if (not IContent.providedBy(object)
                or ICalendarLayer.providedBy(object)
                or ICalendarCategory.providedBy(object)):
            return default
        adapter = FlexibleTextIndexData(object)
    texts = adapter()
    if not texts:
        return default
    return texts
Example #10
0
def get_textrepr(object, default):
    adapter = queryAdapter(object, ITextIndexData)
    if adapter is not None:
        text = adapter()
        return text
    elif (IContent.providedBy(object) and
          not (ICalendarLayer.providedBy(object) or
               ICalendarCategory.providedBy(object))):
        fmt = "%s %s"
        tr = fmt % (
            getattr(object, 'title', ''),
            getattr(object, 'description', ''),
            )
        return tr
    return default
Example #11
0
def evolve(context):
    catalog = find_catalog(context)
    index = catalog['texts']
    for docid in index.index._docweight.keys():
        try:
            path = catalog.document_map.address_for_docid(docid)
            context = find_resource(context, path)
            if (ICalendarLayer.providedBy(context) or
                ICalendarCategory.providedBy(context) or
                not IContent.providedBy(context)):
                index.unindex_doc(docid)

            if hasattr(context, '_p_deactivate'):
                context._p_deactivate()
        except KeyError:
            # Work around some bad data in the db--some calendar categories
            # got added with '/' characters in their ids.  Skip them for now
            # until we can figure out what to do with them.
            print "Bad path in catalog: ", path
Example #12
0
def evolve(context):
    catalog = find_catalog(context)
    index = catalog['texts']
    for docid in index.index._docweight.keys():
        try:
            path = catalog.document_map.address_for_docid(docid)
            context = find_model(context, path)
            if (ICalendarLayer.providedBy(context) or
                ICalendarCategory.providedBy(context) or
                not IContent.providedBy(context)):
                index.unindex_doc(docid)

            if hasattr(context, '_p_deactivate'):
                context._p_deactivate()
        except KeyError:
            # Work around some bad data in the db--some calendar categories
            # got added with '/' characters in their ids.  Skip them for now
            # until we can figure out what to do with them.
            print "Bad path in catalog: ", path
Example #13
0
def calendar_setup_categories_view(context, request):
    default_category_name = ICalendarCategory.getTaggedValue('default_name')
    default_category = context[default_category_name]
    default_category_path = model_path(default_category)
    categories = _get_calendar_categories(context)
    editable_categories = filter(lambda x: x.__name__ != default_category_name,
                                 categories)
    category_names = [ x.__name__ for x in categories ]

    default_layer_name = ICalendarLayer.getTaggedValue('default_name')
    default_layer = context[default_layer_name]
    layers = _get_calendar_layers(context)
    editable_layers = filter(lambda x: x.__name__ != default_layer_name,
                             layers)

    if 'form.delete' in request.POST:
        category_name = request.POST['form.delete']
        if category_name == default_category_name:
            message = 'Cannot delete default category'
        elif category_name and category_name in category_names:
            categ = context[category_name]
            title = categ.title
            categ_path = model_path(categ)
            if categ_path in default_layer.paths:
                default_layer.paths.remove(categ_path)
                default_layer._p_changed = True

            # uncategorize events that were previously in this
            # category (put them in the default category)
            query = dict(
                interfaces=[ICalendarEvent],
                virtual = categ_path,
                )
            searcher = ICatalogSearch(context)
            total, docids, resolver = searcher(**query)
            for event in [ resolver(x) for x in docids ]:
                event.calendar_category = default_category_path
                objectEventNotify(ObjectModifiedEvent(event))

            del context[category_name]

            message = '%s category removed' % title
        else:
            message = 'Category is invalid'

        location = model_url(context, request, 'categories.html',
                             query={'status_message': message})
        return HTTPFound(location=location)

    fielderrors = {}
    fielderrors_target = None

    if 'form.edit' in request.POST:
        category_name = request.POST['category__name__']

        if category_name == default_category_name:
            location = model_url(
                context,
                request, 'categories.html',
                query={'status_message':'Cannot edit default category'})
            return HTTPFound(location=location)

        if not category_name or not category_name in category_names:
            location = model_url(
                context,
                request, 'categories.html',
                query={'status_message':'Could not find category to edit'})
            return HTTPFound(location=location)

        category = context[category_name]

        try:
            title = request.POST['category_title'].strip()
            if not title:
                msg = 'Please enter a value'
                raise Invalid(msg, error_dict={'category_title': msg})
            title = convert_to_unicode(title, 'category_title')

            if title in [ x.title for x in categories]:
                msg = "Name is already used"
                raise Invalid(msg=msg, error_dict={'category_title': msg})

            else:
                category.title = title
                location = model_url(
                    context, request,
                    'categories.html',
                    query={'status_message':'Calendar category updated'})
                return HTTPFound(location=location)

        except Invalid, e:
            fielderrors_target = ("%s_category" % category_name)
            fielderrors = e.error_dict
Example #14
0
def calendar_setup_layers_view(context, request):
    default_layer_name = ICalendarLayer.getTaggedValue('default_name')
    layers = filter(lambda x: x.__name__ != default_layer_name,
                    _get_calendar_layers(context))
    layer_titles = [ x.title for x in layers]
    layer_names = [ x.__name__ for x in layers ]

    default_category_name = ICalendarCategory.getTaggedValue('default_name')
    categories = filter(lambda x: x.__name__ != default_category_name,
                        _get_calendar_categories(context))

    if 'form.delete' in request.POST:
        layer_name = request.POST['form.delete']
        if layer_name == default_layer_name:
            message = 'Cannot delete default layer'
        elif layer_name and layer_name in layer_names:
            title = context[layer_name].title
            del context[layer_name]
            message = '%s layer removed' % title
        else:
            message = 'Layer is invalid'

        location = model_url(context, request, 'layers.html',
                             query={'status_message': message})
        return HTTPFound(location=location)

    fielderrors_target = None
    fielderrors = {}

    if 'form.submitted' in request.POST:
        try:
            error_dict = {}
            category_paths = list(set(request.POST.getall('category_paths')))
            category_paths = [path for path in category_paths if path]
            if not category_paths:
                error_dict['category_paths'] = 'Please enter a value'
            layer_title = request.POST['layer_title']
            if not layer_title:
                error_dict['layer_title'] = 'Please enter a value'
            layer_color = request.POST.get('layer_color')
            if not layer_color:
                error_dict['layer_color'] = 'Please enter a value'
            if error_dict:
                raise Invalid(msg='Please correct the following errors',
                              error_dict=error_dict)
            layer_title = convert_to_unicode(layer_title, 'layer_title')
            layer_color = convert_to_unicode(layer_color, 'layer_color')

            layer_name = generate_name(context)
            if layer_title in layer_titles:
                msg = "Name is already used"
                raise Invalid(msg=msg, error_dict={'layer_title': msg})

            layer = create_content(ICalendarLayer,
                                   layer_title, layer_color, category_paths)
            context[layer_name] = layer

            location = model_url(
                context, request,
                'layers.html',
                query={'status_message':'Calendar layer added'})
            return HTTPFound(location=location)

        except Invalid, e:
            fielderrors_target = '__add_layer__'
            fielderrors = e.error_dict