From d9e69110a6491365f7b72f2eeb3a7898fd1595df Mon Sep 17 00:00:00 2001 From: Sacha Greif Date: Thu, 23 Jun 2016 11:40:35 +0900 Subject: [PATCH] removing Posts global --- .../_nova-migrations/lib/server/migrations.js | 1 + .../lib/components/CustomPostsItem.jsx | 1 + .../my-custom-package/lib/custom_fields.js | 2 + packages/nova-api/lib/server/api.js | 2 + .../lib/posts/PostsCommenters.jsx | 1 + .../lib/posts/PostsDay.jsx | 1 + .../lib/posts/PostsEditForm.jsx | 3 +- .../lib/posts/PostsHome.jsx | 1 + .../lib/posts/PostsItem.jsx | 1 + .../lib/posts/PostsNewForm.jsx | 1 + .../lib/posts/PostsPage.jsx | 1 + .../lib/posts/PostsSingle.jsx | 1 + .../lib/posts/PostsThumbnail.jsx | 1 + .../lib/users/UsersProfile.jsx | 1 + packages/nova-categories/lib/callbacks.js | 2 + packages/nova-categories/lib/custom_fields.js | 1 + packages/nova-categories/lib/helpers.js | 1 + packages/nova-categories/lib/methods.js | 2 + .../lib/server/publications.js | 2 + .../nova-cloudinary/lib/server/cloudinary.js | 1 + packages/nova-comments/lib/callbacks.js | 18 +++++++++ packages/nova-comments/lib/custom_fields.js | 1 + packages/nova-comments/lib/methods.js | 2 + packages/nova-comments/lib/notifications.js | 2 + .../nova-comments/lib/published_fields.js | 1 + .../nova-comments/lib/server/publications.js | 2 + packages/nova-core/package.js | 3 +- .../nova-debug/lib/components/Cheatsheet.jsx | 1 + packages/nova-embedly/lib/custom_fields.js | 1 + .../lib/server/get_embedly_data.js | 2 + .../lib/getting_started.js | 2 + .../lib/server/dummy_content.js | 1 + packages/nova-newsletter/lib/custom_fields.js | 1 + .../nova-newsletter/lib/server/campaign.js | 2 + .../nova-newsletter/lib/server/mailchimp.js | 1 + packages/nova-posts/lib/callbacks.js | 18 ++++++++- packages/nova-posts/lib/collection.js | 2 +- packages/nova-posts/lib/emails.js | 2 + packages/nova-posts/lib/export.js | 14 +++++++ packages/nova-posts/lib/helpers.js | 37 ++++++++++++++++++- packages/nova-posts/lib/methods.js | 30 +++++++++++++-- .../lib/{config.js => namespace.js} | 2 +- packages/nova-posts/lib/notifications.js | 2 +- packages/nova-posts/lib/parameters.js | 2 +- packages/nova-posts/lib/published_fields.js | 2 +- .../nova-posts/lib/server/publications.js | 1 + .../lib/server/routes.js | 21 +---------- packages/nova-posts/lib/views.js | 2 +- packages/nova-posts/package.js | 31 +++++++++------- packages/nova-users/lib/methods.js | 22 +++++------ packages/nova-users/lib/permissions.js | 29 --------------- packages/nova-voting/lib/custom_fields.js | 1 + packages/nova-voting/lib/server/cron.js | 2 + 53 files changed, 198 insertions(+), 89 deletions(-) create mode 100644 packages/nova-posts/lib/export.js rename packages/nova-posts/lib/{config.js => namespace.js} (90%) rename packages/{nova-core => nova-posts}/lib/server/routes.js (51%) diff --git a/packages/_nova-migrations/lib/server/migrations.js b/packages/_nova-migrations/lib/server/migrations.js index d3ab5b475..a8a2c2800 100644 --- a/packages/_nova-migrations/lib/server/migrations.js +++ b/packages/_nova-migrations/lib/server/migrations.js @@ -1,4 +1,5 @@ import marked from 'marked'; +import Posts from "meteor/nova:posts"; // TODO: switch over to Tom's migration package. diff --git a/packages/my-custom-package/lib/components/CustomPostsItem.jsx b/packages/my-custom-package/lib/components/CustomPostsItem.jsx index 28ee032b3..f0dee22fb 100644 --- a/packages/my-custom-package/lib/components/CustomPostsItem.jsx +++ b/packages/my-custom-package/lib/components/CustomPostsItem.jsx @@ -4,6 +4,7 @@ import { Button } from 'react-bootstrap'; import moment from 'moment'; import { ModalTrigger } from "meteor/nova:core"; import { Link } from 'react-router'; +import Posts from "meteor/nova:posts"; class CustomPostsItem extends Telescope.components.PostsItem { diff --git a/packages/my-custom-package/lib/custom_fields.js b/packages/my-custom-package/lib/custom_fields.js index f6c4cc331..4ecc6bab2 100644 --- a/packages/my-custom-package/lib/custom_fields.js +++ b/packages/my-custom-package/lib/custom_fields.js @@ -1,3 +1,5 @@ +import Posts from "meteor/nova:posts"; + /* Let's assign a color to each post (why? cause we want to, that's why). We'll do that by adding a custom field to the Posts collection. diff --git a/packages/nova-api/lib/server/api.js b/packages/nova-api/lib/server/api.js index 1657af328..31445be1d 100644 --- a/packages/nova-api/lib/server/api.js +++ b/packages/nova-api/lib/server/api.js @@ -1,3 +1,5 @@ +import Posts from "meteor/nova:posts"; + serveAPI = function(terms){ var posts = []; diff --git a/packages/nova-base-components/lib/posts/PostsCommenters.jsx b/packages/nova-base-components/lib/posts/PostsCommenters.jsx index ee2445ff8..7248b1ab3 100644 --- a/packages/nova-base-components/lib/posts/PostsCommenters.jsx +++ b/packages/nova-base-components/lib/posts/PostsCommenters.jsx @@ -1,5 +1,6 @@ import React from 'react'; import { Link } from 'react-router'; +import Posts from "meteor/nova:posts"; const PostsCommenters = ({post}) => { return ( diff --git a/packages/nova-base-components/lib/posts/PostsDay.jsx b/packages/nova-base-components/lib/posts/PostsDay.jsx index b756150b5..f8b1ede4a 100644 --- a/packages/nova-base-components/lib/posts/PostsDay.jsx +++ b/packages/nova-base-components/lib/posts/PostsDay.jsx @@ -1,6 +1,7 @@ import React, { PropTypes, Component } from 'react'; import { ListContainer } from "meteor/utilities:react-list-container"; import moment from 'moment'; +import Posts from "meteor/nova:posts"; class PostsDay extends Component { diff --git a/packages/nova-base-components/lib/posts/PostsEditForm.jsx b/packages/nova-base-components/lib/posts/PostsEditForm.jsx index b3c95bf85..e6d4b5e20 100644 --- a/packages/nova-base-components/lib/posts/PostsEditForm.jsx +++ b/packages/nova-base-components/lib/posts/PostsEditForm.jsx @@ -4,6 +4,7 @@ import NovaForm from "meteor/nova:forms"; import { DocumentContainer } from "meteor/utilities:react-list-container"; //import { Messages } from "meteor/nova:core"; //import Actions from "../actions.js"; +import Posts from "meteor/nova:posts"; class PostsEditForm extends Component{ @@ -18,7 +19,7 @@ class PostsEditForm extends Component{ const deletePostSuccess = this.context.intl.formatMessage({id: "posts.delete_success"}, {title: post.title}); if (window.confirm(deletePostConfirm)) { - this.context.actions.call('posts.deleteById', post._id, (error, result) => { + this.context.actions.call('posts.remove', post._id, (error, result) => { this.context.messages.flash(deletePostSuccess, "success"); this.context.events.track("post deleted", {'_id': post._id}); }); diff --git a/packages/nova-base-components/lib/posts/PostsHome.jsx b/packages/nova-base-components/lib/posts/PostsHome.jsx index bc27bc5c6..0c461ab4d 100644 --- a/packages/nova-base-components/lib/posts/PostsHome.jsx +++ b/packages/nova-base-components/lib/posts/PostsHome.jsx @@ -1,5 +1,6 @@ import React, { PropTypes, Component } from 'react'; import { ListContainer, DocumentContainer } from "meteor/utilities:react-list-container"; +import Posts from "meteor/nova:posts"; class PostsHome extends Component { diff --git a/packages/nova-base-components/lib/posts/PostsItem.jsx b/packages/nova-base-components/lib/posts/PostsItem.jsx index f60012d1d..3d37563e7 100644 --- a/packages/nova-base-components/lib/posts/PostsItem.jsx +++ b/packages/nova-base-components/lib/posts/PostsItem.jsx @@ -4,6 +4,7 @@ import { Button } from 'react-bootstrap'; import moment from 'moment'; import { ModalTrigger } from "meteor/nova:core"; import { Link } from 'react-router'; +import Posts from "meteor/nova:posts"; class PostsItem extends Component { diff --git a/packages/nova-base-components/lib/posts/PostsNewForm.jsx b/packages/nova-base-components/lib/posts/PostsNewForm.jsx index b2d49072f..e7e82a8b1 100644 --- a/packages/nova-base-components/lib/posts/PostsNewForm.jsx +++ b/packages/nova-base-components/lib/posts/PostsNewForm.jsx @@ -2,6 +2,7 @@ import React, { PropTypes, Component } from 'react'; import { intlShape } from 'react-intl'; import NovaForm from "meteor/nova:forms"; import { withRouter } from 'react-router' +import Posts from "meteor/nova:posts"; const PostsNewForm = (props, context) => { diff --git a/packages/nova-base-components/lib/posts/PostsPage.jsx b/packages/nova-base-components/lib/posts/PostsPage.jsx index cc2b9107f..acedc983e 100644 --- a/packages/nova-base-components/lib/posts/PostsPage.jsx +++ b/packages/nova-base-components/lib/posts/PostsPage.jsx @@ -1,4 +1,5 @@ import React from 'react'; +import Posts from "meteor/nova:posts"; const PostsPage = ({document, currentUser}) => { diff --git a/packages/nova-base-components/lib/posts/PostsSingle.jsx b/packages/nova-base-components/lib/posts/PostsSingle.jsx index ad71f75e5..7fda98adb 100644 --- a/packages/nova-base-components/lib/posts/PostsSingle.jsx +++ b/packages/nova-base-components/lib/posts/PostsSingle.jsx @@ -1,5 +1,6 @@ import React from 'react'; import { DocumentContainer } from "meteor/utilities:react-list-container"; +import Posts from "meteor/nova:posts"; const PostsSingle = (props, context) => { return ( diff --git a/packages/nova-base-components/lib/posts/PostsThumbnail.jsx b/packages/nova-base-components/lib/posts/PostsThumbnail.jsx index 127b8f9d2..228bf851b 100644 --- a/packages/nova-base-components/lib/posts/PostsThumbnail.jsx +++ b/packages/nova-base-components/lib/posts/PostsThumbnail.jsx @@ -1,4 +1,5 @@ import React from 'react'; +import Posts from "meteor/nova:posts"; const PostsThumbnail = ({post}) => { return ( diff --git a/packages/nova-base-components/lib/users/UsersProfile.jsx b/packages/nova-base-components/lib/users/UsersProfile.jsx index 89f5ff28f..f2bfb489f 100644 --- a/packages/nova-base-components/lib/users/UsersProfile.jsx +++ b/packages/nova-base-components/lib/users/UsersProfile.jsx @@ -1,6 +1,7 @@ import React, { PropTypes, Component } from 'react'; import { FormattedMessage } from 'react-intl'; import { ListContainer } from "meteor/utilities:react-list-container"; +import Posts from "meteor/nova:posts"; const UsersProfile = ({user, currentUser}) => { diff --git a/packages/nova-categories/lib/callbacks.js b/packages/nova-categories/lib/callbacks.js index 6fed47c0f..a89a9964c 100644 --- a/packages/nova-categories/lib/callbacks.js +++ b/packages/nova-categories/lib/callbacks.js @@ -1,3 +1,5 @@ +import Posts from "meteor/nova:posts"; + // generate slug on insert Categories.before.insert(function (userId, doc) { // if no slug has been provided, generate one diff --git a/packages/nova-categories/lib/custom_fields.js b/packages/nova-categories/lib/custom_fields.js index cc21bea18..0ab781f72 100644 --- a/packages/nova-categories/lib/custom_fields.js +++ b/packages/nova-categories/lib/custom_fields.js @@ -1,4 +1,5 @@ import PublicationUtils from 'meteor/utilities:smart-publications'; +import Posts from "meteor/nova:posts"; Posts.addField( { diff --git a/packages/nova-categories/lib/helpers.js b/packages/nova-categories/lib/helpers.js index ea2bb183c..b82565b2f 100644 --- a/packages/nova-categories/lib/helpers.js +++ b/packages/nova-categories/lib/helpers.js @@ -1,3 +1,4 @@ +import Posts from "meteor/nova:posts"; /** * @summary Get all of a category's parents diff --git a/packages/nova-categories/lib/methods.js b/packages/nova-categories/lib/methods.js index 54f4e06fd..7b710744a 100644 --- a/packages/nova-categories/lib/methods.js +++ b/packages/nova-categories/lib/methods.js @@ -1,3 +1,5 @@ +import Posts from "meteor/nova:posts"; + Meteor.methods({ "categories.deleteById": function (categoryId) { diff --git a/packages/nova-categories/lib/server/publications.js b/packages/nova-categories/lib/server/publications.js index 161f42156..75553cc4c 100644 --- a/packages/nova-categories/lib/server/publications.js +++ b/packages/nova-categories/lib/server/publications.js @@ -1,3 +1,5 @@ +import Posts from "meteor/nova:posts"; + Meteor.publish('categories', function() { if(Users.can.viewById(this.userId)){ var categories = Categories.find(); diff --git a/packages/nova-cloudinary/lib/server/cloudinary.js b/packages/nova-cloudinary/lib/server/cloudinary.js index 79ff6129e..b3963b828 100644 --- a/packages/nova-cloudinary/lib/server/cloudinary.js +++ b/packages/nova-cloudinary/lib/server/cloudinary.js @@ -1,4 +1,5 @@ import cloudinary from "cloudinary"; +import Posts from "meteor/nova:posts"; const Cloudinary = cloudinary.v2; diff --git a/packages/nova-comments/lib/callbacks.js b/packages/nova-comments/lib/callbacks.js index 18db209fb..44e6d0cfc 100644 --- a/packages/nova-comments/lib/callbacks.js +++ b/packages/nova-comments/lib/callbacks.js @@ -1,4 +1,5 @@ import marked from 'marked'; +import Posts from "meteor/nova:posts"; ////////////////////////////////////////////////////// // Collection Hooks // @@ -58,6 +59,10 @@ Comments.before.update(function (userId, doc, fieldNames, modifier) { ### comments.edit.async +### users.remove.async + +- UsersRemoveDeleteComments + */ // ------------------------------------- comments.new.method -------------------------------- // @@ -277,3 +282,16 @@ Telescope.callbacks.add("comments.edit.method", CommentsEditSubmittedPropertiesC // ------------------------------------- comments.edit.async -------------------------------- // + + +// ------------------------------------- users.remove.async -------------------------------- // + +function UsersRemoveDeleteComments (user, options) { + if (options.deleteComments) { + var deletedComments = Comments.remove({userId: userId}); + } else { + // not sure if anything should be done in that scenario yet + // Comments.update({userId: userId}, {$set: {author: "\[deleted\]"}}, {multi: true}); + } +} +Telescope.callbacks.add("users.remove.async", UsersRemoveDeleteComments); diff --git a/packages/nova-comments/lib/custom_fields.js b/packages/nova-comments/lib/custom_fields.js index fec35c5b3..def57f02b 100644 --- a/packages/nova-comments/lib/custom_fields.js +++ b/packages/nova-comments/lib/custom_fields.js @@ -1,4 +1,5 @@ import PublicationUtils from 'meteor/utilities:smart-publications'; +import Posts from "meteor/nova:posts"; Posts.addField([ /** diff --git a/packages/nova-comments/lib/methods.js b/packages/nova-comments/lib/methods.js index 79eaa843b..50279e41d 100644 --- a/packages/nova-comments/lib/methods.js +++ b/packages/nova-comments/lib/methods.js @@ -1,3 +1,5 @@ +import Posts from "meteor/nova:posts"; + Comments.methods = {}; // ------------------------------------------------------------------------------------------- // // -------------------------------------- Submit Comment ------------------------------------- // diff --git a/packages/nova-comments/lib/notifications.js b/packages/nova-comments/lib/notifications.js index 02f8e8713..acea023fb 100644 --- a/packages/nova-comments/lib/notifications.js +++ b/packages/nova-comments/lib/notifications.js @@ -1,3 +1,5 @@ +import Posts from "meteor/nova:posts"; + Comments.getNotificationProperties = function (data) { const comment = data.comment; var commentAuthor = Meteor.users.findOne(comment.userId); diff --git a/packages/nova-comments/lib/published_fields.js b/packages/nova-comments/lib/published_fields.js index 4a91606d4..769f92131 100644 --- a/packages/nova-comments/lib/published_fields.js +++ b/packages/nova-comments/lib/published_fields.js @@ -1,4 +1,5 @@ import PublicationsUtils from 'meteor/utilities:smart-publications'; +import Posts from "meteor/nova:posts"; Comments.publishedFields = {}; diff --git a/packages/nova-comments/lib/server/publications.js b/packages/nova-comments/lib/server/publications.js index f46beb608..145c63753 100644 --- a/packages/nova-comments/lib/server/publications.js +++ b/packages/nova-comments/lib/server/publications.js @@ -1,3 +1,5 @@ +import Posts from "meteor/nova:posts"; + Comments._ensureIndex({postId: 1}); Comments._ensureIndex({parentCommentId: 1}); diff --git a/packages/nova-core/package.js b/packages/nova-core/package.js index 090b5b087..acafc172b 100644 --- a/packages/nova-core/package.js +++ b/packages/nova-core/package.js @@ -34,8 +34,7 @@ Package.onUse(function(api) { ], 'client'); api.addFiles([ - 'lib/server/start.js', - 'lib/server/routes.js' + 'lib/server/start.js' ], ['server']); api.mainModule("lib/export.js", "server"); diff --git a/packages/nova-debug/lib/components/Cheatsheet.jsx b/packages/nova-debug/lib/components/Cheatsheet.jsx index 6013062d2..d5512a474 100644 --- a/packages/nova-debug/lib/components/Cheatsheet.jsx +++ b/packages/nova-debug/lib/components/Cheatsheet.jsx @@ -1,4 +1,5 @@ import React from 'react'; +import Posts from "meteor/nova:posts"; const methodList = Meteor.isServer ? Meteor.server.method_handlers : Meteor.connection._methodHandlers; diff --git a/packages/nova-embedly/lib/custom_fields.js b/packages/nova-embedly/lib/custom_fields.js index 37124909d..44faf4580 100644 --- a/packages/nova-embedly/lib/custom_fields.js +++ b/packages/nova-embedly/lib/custom_fields.js @@ -1,6 +1,7 @@ import PublicationUtils from 'meteor/utilities:smart-publications'; import EmbedlyURL from './components/EmbedlyURL.jsx'; import ThumbnailURL from './components/ThumbnailURL.jsx'; +import Posts from "meteor/nova:posts"; Posts.addField([ { diff --git a/packages/nova-embedly/lib/server/get_embedly_data.js b/packages/nova-embedly/lib/server/get_embedly_data.js index 1b1118484..d081990e3 100644 --- a/packages/nova-embedly/lib/server/get_embedly_data.js +++ b/packages/nova-embedly/lib/server/get_embedly_data.js @@ -1,3 +1,5 @@ +import Posts from "meteor/nova:posts"; + getEmbedlyData = function (url) { var data = {}; var extractBase = 'http://api.embed.ly/1/extract'; diff --git a/packages/nova-getting-started/lib/getting_started.js b/packages/nova-getting-started/lib/getting_started.js index f362b4a11..d23a11972 100644 --- a/packages/nova-getting-started/lib/getting_started.js +++ b/packages/nova-getting-started/lib/getting_started.js @@ -1,3 +1,5 @@ +import Posts from "meteor/nova:posts"; + Users.addField({ fieldName: 'telescope.isDummy', fieldSchema: { diff --git a/packages/nova-getting-started/lib/server/dummy_content.js b/packages/nova-getting-started/lib/server/dummy_content.js index 7549a38b0..a1c283f68 100644 --- a/packages/nova-getting-started/lib/server/dummy_content.js +++ b/packages/nova-getting-started/lib/server/dummy_content.js @@ -1,4 +1,5 @@ import moment from 'moment'; +import Posts from "meteor/nova:posts"; var toTitleCase = function (str) { return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); diff --git a/packages/nova-newsletter/lib/custom_fields.js b/packages/nova-newsletter/lib/custom_fields.js index cf654e435..2a05c6110 100644 --- a/packages/nova-newsletter/lib/custom_fields.js +++ b/packages/nova-newsletter/lib/custom_fields.js @@ -1,4 +1,5 @@ import NewsletterSubscribe from './components/NewsletterSubscribe.jsx'; +import Posts from "meteor/nova:posts"; Posts.addField({ fieldName: 'scheduledAt', diff --git a/packages/nova-newsletter/lib/server/campaign.js b/packages/nova-newsletter/lib/server/campaign.js index 7bb499130..98ab0c300 100644 --- a/packages/nova-newsletter/lib/server/campaign.js +++ b/packages/nova-newsletter/lib/server/campaign.js @@ -1,5 +1,7 @@ import { Avatar } from 'meteor/nova:core'; import moment from 'moment'; +import Posts from "meteor/nova:posts"; + // import Email from 'meteor/nova:email'; // create new "campaign" view for all posts from the past X days that haven't been scheduled yet diff --git a/packages/nova-newsletter/lib/server/mailchimp.js b/packages/nova-newsletter/lib/server/mailchimp.js index 3801a2704..a49ab741a 100644 --- a/packages/nova-newsletter/lib/server/mailchimp.js +++ b/packages/nova-newsletter/lib/server/mailchimp.js @@ -2,6 +2,7 @@ import htmlToText from 'html-to-text'; // import Email from 'meteor/nova:email'; import Campaign from "./campaign.js"; import moment from 'moment'; +import Posts from "meteor/nova:posts"; const defaultPosts = 5; diff --git a/packages/nova-posts/lib/callbacks.js b/packages/nova-posts/lib/callbacks.js index e5744e51a..4e8740020 100644 --- a/packages/nova-posts/lib/callbacks.js +++ b/packages/nova-posts/lib/callbacks.js @@ -1,4 +1,4 @@ -import Posts from './config' +import Posts from './namespace.js' import marked from 'marked'; ////////////////////////////////////////////////////// @@ -92,6 +92,10 @@ Posts.before.update(function (userId, doc, fieldNames, modifier) { - PostsApprovedNotification +### users.remove.async + +- UsersRemoveDeletePosts + */ // ------------------------------------- posts.new.method -------------------------------- // @@ -345,3 +349,15 @@ function PostsApprovedNotification (post) { } } Telescope.callbacks.add("posts.approve.async", PostsApprovedNotification); + +// ------------------------------------- users.remove.async -------------------------------- // + +function UsersRemoveDeletePosts (user, options) { + if (options.deletePosts) { + var deletedPosts = Posts.remove({userId: userId}); + } else { + // not sure if anything should be done in that scenario yet + // Posts.update({userId: userId}, {$set: {author: "\[deleted\]"}}, {multi: true}); + } +} +Telescope.callbacks.add("users.remove.async", UsersRemoveDeletePosts); diff --git a/packages/nova-posts/lib/collection.js b/packages/nova-posts/lib/collection.js index 23a293591..341a9d974 100644 --- a/packages/nova-posts/lib/collection.js +++ b/packages/nova-posts/lib/collection.js @@ -1,4 +1,4 @@ -import Posts from './config' +import Posts from './namespace.js'; const adminGroup = { name: "admin", diff --git a/packages/nova-posts/lib/emails.js b/packages/nova-posts/lib/emails.js index af33061d4..26b16427a 100644 --- a/packages/nova-posts/lib/emails.js +++ b/packages/nova-posts/lib/emails.js @@ -1,3 +1,5 @@ +import Posts from './namespace.js'; + const getPost = (postId) => { return typeof Posts.findOne(postId) === "undefined" ? {post: Posts.findOne()} : {post: Posts.findOne(postId)}; }; diff --git a/packages/nova-posts/lib/export.js b/packages/nova-posts/lib/export.js new file mode 100644 index 000000000..4918984c2 --- /dev/null +++ b/packages/nova-posts/lib/export.js @@ -0,0 +1,14 @@ +import Posts from './namespace.js'; + +import './namespace.js'; +import './collection.js'; +import './parameters.js'; +import './notifications.js'; +import './views.js'; +import './helpers.js'; +import './published_fields.js'; +import './callbacks.js'; +import './emails.js'; +import './methods.js'; + +export default Posts; \ No newline at end of file diff --git a/packages/nova-posts/lib/helpers.js b/packages/nova-posts/lib/helpers.js index 9dce0c003..c92eaec91 100644 --- a/packages/nova-posts/lib/helpers.js +++ b/packages/nova-posts/lib/helpers.js @@ -1,5 +1,5 @@ import moment from 'moment'; -import Posts from './config'; +import Posts from './namespace.js'; ////////////////// // Link Helpers // @@ -126,4 +126,37 @@ Posts.getThumbnailUrl = (post) => { return thumbnailUrl.indexOf('//') > -1 ? Telescope.utils.addHttp(thumbnailUrl) : Telescope.utils.getSiteUrl().slice(0,-1) + thumbnailUrl; } }; -Posts.helpers({ getThumbnailUrl() { return Posts.getThumbnailUrl(this); } }); \ No newline at end of file +Posts.helpers({ getThumbnailUrl() { return Posts.getThumbnailUrl(this); } }); + +/////////////////// +// Users Helpers // +/////////////////// + +/** + * @summary Check if a given user can view a specific post + * @param {Object} user - can be undefined! + * @param {Object} post + */ +Users.can.viewPost = function (user, post) { + + if (Users.is.admin(user)) { + return true; + } else { + + switch (post.status) { + + case Posts.config.STATUS_APPROVED: + return Users.can.view(user); + + case Posts.config.STATUS_REJECTED: + case Posts.config.STATUS_SPAM: + case Posts.config.STATUS_PENDING: + return Users.can.view(user) && Users.is.owner(user, post); + + case Posts.config.STATUS_DELETED: + return false; + + } + } +} +Users.helpers({canViewPost: function () {return Users.can.viewPost(this, post);}}); diff --git a/packages/nova-posts/lib/methods.js b/packages/nova-posts/lib/methods.js index 11e03c34a..f3a41d5fd 100644 --- a/packages/nova-posts/lib/methods.js +++ b/packages/nova-posts/lib/methods.js @@ -1,4 +1,4 @@ -import Posts from './config' +import Posts from './namespace.js' /** * @@ -48,6 +48,30 @@ Posts.methods.edit = function (postId, modifier, post) { return Posts.findOne(postId); }; +/** + * @summary Increase the number of clicks on a post + * @param {string} postId – the ID of the post being edited + * @param {string} ip – the IP of the current user + */ +Posts.methods.increaseClicks = (postId, ip) => { + + var clickEvent = { + name: 'click', + properties: { + postId: postId, + ip: ip + } + }; + + // make sure this IP hasn't previously clicked on this post + var existingClickEvent = Events.findOne({name: 'click', 'properties.postId': postId, 'properties.ip': ip}); + + if(!existingClickEvent){ + Events.log(clickEvent); + Posts.update(postId, { $inc: { clickCount: 1 }}); + } +}; + // ------------------------------------------------------------------------------------------- // // ----------------------------------------- Methods ----------------------------------------- // // ------------------------------------------------------------------------------------------- // @@ -177,7 +201,7 @@ Meteor.methods({ * @isMethod true * @param {String} postId - the id of the post */ - 'posts.deleteById': function(postId) { + 'posts.remove': function(postId) { check(postId, String); @@ -199,7 +223,7 @@ Meteor.methods({ // delete post Posts.remove(postId); - Telescope.callbacks.runAsync("postDeleteAsync", post); + Telescope.callbacks.runAsync("posts.remove.async", post); }, diff --git a/packages/nova-posts/lib/config.js b/packages/nova-posts/lib/namespace.js similarity index 90% rename from packages/nova-posts/lib/config.js rename to packages/nova-posts/lib/namespace.js index 88fd7417d..074648bd8 100644 --- a/packages/nova-posts/lib/config.js +++ b/packages/nova-posts/lib/namespace.js @@ -11,7 +11,7 @@ const PostsStub = { /* we need to handle two scenarios: when the package is called as a Meteor package, and when it's called as a NPM package */ -Posts = typeof Mongo !== "undefined" ? new Mongo.Collection("posts") : PostsStub; +const Posts = typeof Mongo !== "undefined" ? new Mongo.Collection("posts") : PostsStub; /** * @summary Posts config namespace diff --git a/packages/nova-posts/lib/notifications.js b/packages/nova-posts/lib/notifications.js index 7ac312017..6c384db55 100644 --- a/packages/nova-posts/lib/notifications.js +++ b/packages/nova-posts/lib/notifications.js @@ -1,4 +1,4 @@ -import Posts from './config' +import Posts from './namespace.js' Posts.getNotificationProperties = function (data) { const post = data.post; diff --git a/packages/nova-posts/lib/parameters.js b/packages/nova-posts/lib/parameters.js index 9e62e7a6d..7cf4dc628 100644 --- a/packages/nova-posts/lib/parameters.js +++ b/packages/nova-posts/lib/parameters.js @@ -1,4 +1,4 @@ -import Posts from './config' +import Posts from './namespace.js' import moment from 'moment'; /** diff --git a/packages/nova-posts/lib/published_fields.js b/packages/nova-posts/lib/published_fields.js index c47289fa4..4864644fe 100644 --- a/packages/nova-posts/lib/published_fields.js +++ b/packages/nova-posts/lib/published_fields.js @@ -1,4 +1,4 @@ -import Posts from './config' +import Posts from './namespace.js' import PublicationsUtils from 'meteor/utilities:smart-publications'; Posts.publishedFields = {}; diff --git a/packages/nova-posts/lib/server/publications.js b/packages/nova-posts/lib/server/publications.js index f354c746d..a7c253f31 100644 --- a/packages/nova-posts/lib/server/publications.js +++ b/packages/nova-posts/lib/server/publications.js @@ -1,3 +1,4 @@ +import Posts from '../namespace.js'; import { CursorCounts } from "meteor/utilities:react-list-container"; Posts._ensureIndex({"status": 1, "postedAt": 1}); diff --git a/packages/nova-core/lib/server/routes.js b/packages/nova-posts/lib/server/routes.js similarity index 51% rename from packages/nova-core/lib/server/routes.js rename to packages/nova-posts/lib/server/routes.js index 167188c3d..359c62af8 100644 --- a/packages/nova-core/lib/server/routes.js +++ b/packages/nova-posts/lib/server/routes.js @@ -1,21 +1,4 @@ -var increasePostClicks = function(postId, ip){ - - var clickEvent = { - name: 'click', - properties: { - postId: postId, - ip: ip - } - }; - - // make sure this IP hasn't previously clicked on this post - var existingClickEvent = Events.findOne({name: 'click', 'properties.postId': postId, 'properties.ip': ip}); - - if(!existingClickEvent){ - Events.log(clickEvent); - Posts.update(postId, { $inc: { clickCount: 1 }}); - } -}; +import Posts from '../namespace.js'; Picker.route('/out', function(params, req, res, next) { var query = params.query; @@ -23,7 +6,7 @@ Picker.route('/out', function(params, req, res, next) { var post = Posts.findOne({url: query.url}); if (post) { var ip = req.connection.remoteAddress; - increasePostClicks(post._id, ip); + Posts.methods.increaseClicks(post._id, ip); res.writeHead(302, {'Location': query.url}); res.end(); } else { diff --git a/packages/nova-posts/lib/views.js b/packages/nova-posts/lib/views.js index d954c13b6..5f803355b 100644 --- a/packages/nova-posts/lib/views.js +++ b/packages/nova-posts/lib/views.js @@ -1,4 +1,4 @@ -import Posts from './config' +import Posts from './namespace.js' /** * @summary Post views are filters used for subscribing to and viewing posts diff --git a/packages/nova-posts/package.js b/packages/nova-posts/package.js index 3c6e2b7b7..65738c63a 100644 --- a/packages/nova-posts/package.js +++ b/packages/nova-posts/package.js @@ -28,22 +28,25 @@ Package.onUse(function (api) { ], ['client', 'server'], {weak: true}); api.addFiles([ - 'lib/config.js', - 'lib/collection.js', - 'lib/parameters.js', - 'lib/notifications.js', - 'lib/views.js', - 'lib/helpers.js', - 'lib/published_fields.js', - 'lib/callbacks.js', - 'lib/emails.js', - 'lib/methods.js' + // 'lib/namespace.js', + // 'lib/collection.js', + // 'lib/parameters.js', + // 'lib/notifications.js', + // 'lib/views.js', + // 'lib/helpers.js', + // 'lib/published_fields.js', + // 'lib/callbacks.js', + // 'lib/emails.js', + // 'lib/methods.js' ], ['client', 'server']); api.addFiles([ - 'lib/server/publications.js' + 'lib/server/publications.js', + 'lib/server/routes.js' ], ['server']); + api.mainModule("lib/export.js", "server"); + api.mainModule("lib/export.js", "client"); // var languages = ["ar", "bg", "cs", "da", "de", "el", "en", "es", "et", "fr", "hu", "id", "it", "ja", "kk", "ko", "nl", "pl", "pt-BR", "ro", "ru", "sl", "sv", "th", "tr", "vi", "zh-CN"]; // var languagesPaths = languages.map(function (language) { @@ -51,8 +54,8 @@ Package.onUse(function (api) { // }); // api.addFiles(languagesPaths, ["client", "server"]); - api.export([ - 'Posts' - ]); + // api.export([ + // 'Posts' + // ]); }); diff --git a/packages/nova-users/lib/methods.js b/packages/nova-users/lib/methods.js index 1830f08ce..90faeda25 100644 --- a/packages/nova-users/lib/methods.js +++ b/packages/nova-users/lib/methods.js @@ -12,10 +12,16 @@ var completeUserProfile = function (userId, modifier, user) { Users.methods = {}; +/** + * @summary Edit a user in the database + * @param {string} userId – the ID of the user being edited + * @param {Object} modifier – the modifier object + * @param {Object} user - the current user object + */ Users.methods.edit = (userId, modifier, user) => { if (typeof user === "undefined") { - user = Posts.findOne(userId); + user = Users.findOne(userId); } // ------------------------------ Callbacks ------------------------------ // @@ -128,23 +134,15 @@ Meteor.methods({ }, - 'users.remove'(userId, removePosts) { + 'users.remove'(userId, options) { if (Users.is.adminById(this.userId)) { - removePosts = (typeof removePosts === "undefined") ? false : removePosts; + const user = Users.findOne(userId); Meteor.users.remove(userId); - if (removePosts) { - var deletedPosts = Posts.remove({userId: userId}); - var deletedComments = Comments.remove({userId: userId}); - return "Deleted "+deletedPosts+" posts and "+deletedComments+" comments"; - } else { - // not sure if anything should be done in that scenario yet - // Posts.update({userId: userId}, {$set: {author: "\[deleted\]"}}, {multi: true}); - // Comments.update({userId: userId}, {$set: {author: "\[deleted\]"}}, {multi: true}); - } + Telescope.callbacks.runAsync("users.remove.async", user, options); } diff --git a/packages/nova-users/lib/permissions.js b/packages/nova-users/lib/permissions.js index 60e5d31b4..8fad25110 100644 --- a/packages/nova-users/lib/permissions.js +++ b/packages/nova-users/lib/permissions.js @@ -41,35 +41,6 @@ Users.can.viewById = function (userId) { }; Users.helpers({canViewById: function () {return Users.can.viewById(this);}}); -/** - * @summary Check if a given user can view a specific post - * @param {Object} user - can be undefined! - * @param {Object} post - */ -Users.can.viewPost = function (user, post) { - - if (Users.is.admin(user)) { - return true; - } else { - - switch (post.status) { - - case Posts.config.STATUS_APPROVED: - return Users.can.view(user); - - case Posts.config.STATUS_REJECTED: - case Posts.config.STATUS_SPAM: - case Posts.config.STATUS_PENDING: - return Users.can.view(user) && Users.is.owner(user, post); - - case Posts.config.STATUS_DELETED: - return false; - - } - } -} -Users.helpers({canViewPost: function () {return Users.can.viewPost(this, post);}}); - /** * @summary Check if a given user has permission to submit new posts * @param {Object} user diff --git a/packages/nova-voting/lib/custom_fields.js b/packages/nova-voting/lib/custom_fields.js index 979478738..5f1d14af0 100644 --- a/packages/nova-voting/lib/custom_fields.js +++ b/packages/nova-voting/lib/custom_fields.js @@ -1,4 +1,5 @@ import PublicationUtils from 'meteor/utilities:smart-publications'; +import Posts from "meteor/nova:posts"; // ------------------------------------- Posts -------------------------------- // diff --git a/packages/nova-voting/lib/server/cron.js b/packages/nova-voting/lib/server/cron.js index 7034bf49c..c86cabe92 100644 --- a/packages/nova-voting/lib/server/cron.js +++ b/packages/nova-voting/lib/server/cron.js @@ -1,3 +1,5 @@ +import Posts from "meteor/nova:posts"; + Meteor.startup(function () { var scoreInterval = Telescope.settings.get("scoreUpdateInterval") || 30; if (scoreInterval > 0) {