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)
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, )
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)
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
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
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
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
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
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
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
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
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
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
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