def page_privacy(context, data_dict): if db.pages_table is None: db.init_db(context['model']) org_id = data_dict.get('org_id') page = data_dict.get('page') out = db.Page.get(group_id=org_id, name=page) if out and out.private == False: return {'success': True} # no org_id means it's a universal page if not org_id: if out and out.private: return {'success': False} return {'success': True} group = context['model'].Group.get(org_id) user = context['user'] authorized = authz.has_user_permission_for_group_or_org( group.id, user, 'read') if not authorized: return { 'success': False, 'msg': p.toolkit._('User %s not authorized to read this page') % user } else: return {'success': True}
def _pages_show(context, data_dict): if db.pages_table is None: db.init_db(context['model']) org_id = data_dict.get('org_id') page = data_dict.get('page') out = db.Page.get(group_id=org_id, name=page) if out: out = db.table_dictize(out, context) return out
def _pages_delete(context, data_dict): if db.pages_table is None: db.init_db(context['model']) org_id = data_dict.get('org_id') page = data_dict.get('page') out = db.Page.get(group_id=org_id, name=page) if out: session = context['session'] session.delete(out) session.commit()
def _pages_list(context, data_dict): search = {} if db.pages_table is None: db.init_db(context['model']) org_id = data_dict.get('org_id') ordered = data_dict.get('order') order_publish_date = data_dict.get('order_publish_date') page_type = data_dict.get('page_type') private = data_dict.get('private', True) if ordered: search['order'] = True if page_type: search['page_type'] = page_type if order_publish_date: search['order_publish_date'] = True if not org_id: search['group_id'] = None try: p.toolkit.check_access('ckanext_pages_update', context, data_dict) if not private: search['private'] = False except p.toolkit.NotAuthorized: search['private'] = False else: group = context['model'].Group.get(org_id) user = context['user'] member = authz.has_user_permission_for_group_or_org( group.id, user, 'read') search['group_id'] = org_id if not member: search['private'] = False out = db.Page.pages(**search) out_list = [] for pg in out: parser = HTMLFirstImage() parser.feed(pg.content) img = parser.first_image pg_row = {'title': pg.title, 'content': pg.content, 'name': pg.name, 'publish_date': pg.publish_date.isoformat() if pg.publish_date else None, 'group_id': pg.group_id, 'page_type': pg.page_type, } if img: pg_row['image'] = img extras = pg.extras if extras: pg_row.update(json.loads(pg.extras)) out_list.append(pg_row) return out_list
def _pages_update(context, data_dict): if db.pages_table is None: db.init_db(context['model']) org_id = data_dict.get('org_id') page = data_dict.get('page') # we need the page in the context for name validation context['page'] = page context['group_id'] = org_id schema = update_pages_schema() data, errors = df.validate(data_dict, schema, context) if errors: raise p.toolkit.ValidationError(errors) out = db.Page.get(group_id=org_id, name=page) if not out: out = db.Page() out.group_id = org_id out.name = page items = ['title', 'content', 'name', 'private', 'order', 'page_type', 'publish_date'] for item in items: setattr(out, item, data.get(item,'page' if item =='page_type' else None)) #backward compatible with older version where page_type does not exist extras = {} extra_keys = set(schema.keys()) - set(items + ['id', 'created']) for key in extra_keys: if key in data: extras[key] = data.get(key) out.extras = json.dumps(extras) out.modified = datetime.datetime.utcnow() user = model.User.get(context['user']) out.user_id = user.id out.save() session = context['session'] session.add(out) session.commit()
def setup(self): super(TestUpdate, self).setup() if db.pages_table is None: db.init_db(model) self.user = factories.Sysadmin() self.app = self._get_test_app()
def setup(self): super(TestUpdate, self).setup() db.init_db(model) self.user = factories.Sysadmin() self.app = self._get_test_app()
def pages_setup(): if db.pages_table is None: db.init_db(model)