Vulcan/packages/_nova-post-by-feed/lib/feeds.js

111 lines
No EOL
2.5 KiB
JavaScript

Feeds = new Mongo.Collection('feeds');
Feeds.schema = new SimpleSchema({
url: {
type: String,
regEx: SimpleSchema.RegEx.Url,
insertableIf: Users.is.admin,
editableIf: Users.is.admin
},
userId: {
type: String,
label: 'feedUser',
insertableIf: Users.is.admin,
editableIf: Users.is.admin,
autoform: {
instructions: 'Posts will be assigned to this user.',
options: function () {
var users = Meteor.users.find().map(function (user) {
return {
value: user._id,
label: Users.getDisplayName(user)
};
});
return users;
}
}
},
categories: {
type: [String],
label: 'categories',
optional: true,
insertableIf: Users.is.admin,
editableIf: Users.is.admin,
autoform: {
instructions: 'Posts will be assigned to this category.',
noselect: true,
editable: true,
options: function () {
var categories = Categories.find().map(function (category) {
return {
value: category._id,
label: category.name
};
});
return categories;
}
}
}
});
Meteor.startup(function(){
Feeds.internationalize();
});
Feeds.attachSchema(Feeds.schema);
// used to keep track of which feed a post was imported from
var feedIdProperty = {
fieldName: 'feedId',
fieldSchema: {
type: String,
label: 'feedId',
optional: true,
autoform: {
omit: true
}
}
};
Posts.addField(feedIdProperty);
// the RSS ID of the post in its original feed
var feedItemIdProperty = {
fieldName: 'feedItemId',
fieldSchema: {
type: String,
label: 'feedItemId',
optional: true,
autoform: {
omit: true
}
}
};
Posts.addField(feedItemIdProperty);
Meteor.startup(function () {
Feeds.allow({
insert: Users.is.adminById,
update: Users.is.adminById,
remove: Users.is.adminById
});
Meteor.methods({
insertFeed: function(feedUrl){
check(feedUrl, Feeds.schema);
if (Feeds.findOne({url: feedUrl.url}))
throw new Meteor.Error('already-exists', __('feed_already_exists'));
if (!Meteor.user() || !Users.is.admin(Meteor.user()))
throw new Meteor.Error('login-required', __('you_need_to_login_and_be_an_admin_to_add_a_new_feed'));
return Feeds.insert(feedUrl);
}
});
});
Telescope.menuItems.add("adminMenu", {
route: "adminFeeds",
label: "feeds",
description: "import_new_posts_from_feeds"
});