Example #1
0
  postMessageToAll: async function(req, res, next) {
    req.assert('message', 'Message must be at least 12 characters long').len(2);

    let errors = req.validationErrors();

    if (errors) {
      req.flash('errors', errors);
      return res.redirect('back');
    }

    try {
      let Users = App.getCollection('Users');
      let Conversation = App.getModel('Conversation');
      let Message = App.getModel('Message');

      let from = req.user;
      let allusers = await Users.forge().query('where', 'id', '!=', from.get('id')).fetch();

      allusers.each(function (user) {
        let sentmessage = sendMessage(req.user, user, req.body.message, req.headers.host);
      });

      return res.redirect('back');
    }
    catch (e) {
      console.error(e);
      return res.redirect('back');
    }
  }
Example #2
0
  getConversation: async function(req, res, next) {
    let Messages = App.getCollection('Messages');
    let Conversation = App.getModel('Conversation');

    try {
      let messages = await Messages.forge()
      .query('where', 'conversation_id', '=', req.params.id)
      .fetch({
         withRelated: [
           'from',
           'to'
         ] // Passed to Model#fetchAll
      });

      let conversation = await Conversation.forge({id: req.params.id}).fetch();

      await conversation.markAsRead(req.user.get('id'));

      res.render('users/message', {
        title: 'Messages',
        messages: messages.toJSON(),
        description: 'messages',
        page: 'messages',
        query: {},
        conversation: conversation.toJSON()
      });
    }
    catch (e) {
      console.error(e.stack)
      return res.redirect('back');
    }

  },
Example #3
0
  getRSS: function (req, res, next) {
    let config = App.getConfig('site');
    let Posts = App.getCollection('Posts');

    config.baseUrl = config.baseUrl || 'http://' + req.headers.host;

    let feed = new RSS({
      title: config.siteName,
      description: config.description,
      feed_url: config.baseUrl + '/rss',
      site_url: config.baseUrl,
      language: 'en',
      author: config.siteName
    });

    Posts.forge()
    .fetchBy('published_at', {
      page: 1,
      limit: config.rssLimit
    }, {
      columns: ['id', 'slug', 'title', 'user_id', 'meta_description', 'published_at'],
      withRelated: ['created_by']
    })
    .then(function (collection) {

      collection.forEach(function (post) {
        feed.item({
          guid: post.get('id'),
          title: post.get('title'),
          description: post.get('meta_description'),
          url: config.baseUrl + '/blog/' + post.get('slug'),
          author: post.related('created_by').get('name'),
          date: post.get('published_at')
        });
      });

      res.end(feed.xml());
    })
    .catch(function (error) {
      next(error);
    });
  },
Example #4
0
  updateTags: function (newPost, attr, options) {
    let self = this;
    let Tags  = App.getCollection('Tags');
    let Tag  = App.getModel('Tag');

    options = options || {};

    this.myTags = options.updateTags || [];

    return Post.forge({id: newPost.id})
    .fetch({withRelated: ['tags'], transacting: options.transacting})
    .then( (post) => {
      let tagOps = [];

      // remove all existing tags from the post
      // _.omit(options, 'query') is a fix for using bookshelf 0.6.8
      // (https://github.com/tgriesser/bookshelf/issues/294)
      tagOps.push(post.tags().detach(null, _.omit(options, 'query')));

      if (_.isEmpty(this.myTags)) {
        return Promise.all(tagOps);
      }

      return Tags.forge()
      .query('whereIn', 'name', _.map(this.myTags, 'name'))
      .fetch(options)
      .then( (existingTags) => {
        let doNotExist = [];
        let createAndAttachOperation;

        existingTags = existingTags.toJSON() || [];

        doNotExist = _.reject(this.myTags, function (tag) {
          return existingTags.some(function (existingTag) {
              return existingTag.name === tag.name;
          });
        });

        // Create tags that don't exist and attach to post
        _.each(doNotExist, function (tag) {
          createAndAttachOperation = Tag.forge({name: tag.name, description: tag.description}, options).save().then(function (createdTag) {
            createdTag = createdTag.toJSON();

            // _.omit(options, 'query') is a fix for using bookshelf 0.6.8
            // (https://github.com/tgriesser/bookshelf/issues/294)
            return post.tags().attach(createdTag.id, createdTag.name, _.omit(options, 'query'));
          });

          tagOps.push(createAndAttachOperation);
        });

        // attach the tags that already existed
        _.each(existingTags, function (tag) {
          // _.omit(options, 'query') is a fix for using bookshelf 0.6.8
          // (https://github.com/tgriesser/bookshelf/issues/294)
          tagOps.push(post.tags().attach(tag.id, _.omit(options, 'query')));
        });

        return Promise.all(tagOps);
      });
    });
  },
Example #5
0
"use strict";

const App = require('widget-cms');
const Roles = App.getCollection('Roles');
const Role = App.getModel('Role');


const RolesController = App.Controller.extend({

  /*
   * GET /roles/new
   * Load new user form
  **/
  getNewRole: function (req, res, next) {
    res.render('roles/new', {
      title: 'New Role',
      description: 'New Role',
      page: 'newrole'
    });
  },


  /*
   * GET /roles/edit/:id
   * Load new user form
  **/
  getEditRole: function (req, res, next) {
    Role.forge({id: req.params.id})
    .fetch()
    .then(function (role) {
      res.render('roles/edit', {
Example #6
0
File: rss.js Project: NodeZA/nodeza
/*
  This file contains the program for creating an rss feed
*/

const App = require('widget-cms');
const RSS = require('rss');
const config = App.getConfig('site');
const Posts = App.getCollection('Posts');


/*
    Creates rss feed
*/
module.exports = function (req, res) {
  "use strict";

  config.baseUrl = config.baseUrl || 'http://' + req.headers.host;

  let feed = new RSS({
    title: config.siteName,
    description: config.description,
    feed_url: config.baseUrl + '/rss',
    site_url: config.baseUrl,
    language: 'en',
    author: config.siteName
  });

  return Posts.forge()
  .fetchBy('published_at', {
    page: 1,
Example #7
0
"use strict";

const GitHubStrategy = require('passport-github').Strategy;
const LocalStrategy = require('passport-local').Strategy;
const App = require('widget-cms');
const passport = App.passport;
const User = App.getModel('User');
const Tokens = App.getCollection('Tokens');
const Token = App.getModel('Token');
const config = App.getConfig('github');
const githubConfig = App.getConfig('github');


passport.deserializeUser(async function(id, done) {
  try {
    let user = await User.forge({id: id}).fetch({withRelated: ['role', 'tokens','unreadmessages'],require: true});

    done(false, user);
  }
  catch (error) {
    done(error);
  }
});

passport.serializeUser(function(user, done) {
  done(null, user.get('id'));
});


passport.use(new GitHubStrategy(githubConfig, async function (req, accessToken, refreshToken, profile, done) {
  console.log(profile);
Example #8
0
"use strict";

const App = require('widget-cms');
const Routes = App.getCollection('Routes');
const Menus = App.getCollection('Menus');
const LinkModel = App.getModel('Link');
const Links = App.getCollection('Links');


const LinksController = App.Controller.extend({

  /*
   * GET /links/new
   * load new blog post form
   */
  getNewLink: function (req, res) {
    let menus = new Menus();
    let routes = new Routes();
    let data = {};

    routes.fetch()
    .then(function (collection) {
      return collection;
    })
    .then(function (routesCollection) {
      data.routes = routesCollection.toJSON();

      return menus.fetch()
      .then(function (collection) {
        return collection;
      });
Example #9
0
"use strict";

const App = require('widget-cms');
const Posts = App.getCollection('Posts');
const Categories = App.getCollection('Categories');
const Post = App.getModel('Post');
const Category = App.getModel('Category');
const moment = require('moment');
const path =  require('path');
const _ = require('lodash');
const redis = require('redis');
const Queue = redis.createClient();
const xmlrpc = require('../lib/xmlrpc');
const TwitBot = require('../bots/twit');


function processTags(tags) {
  if (!tags) {
    return [{name: 'uncategorised', description: 'uncategorised'}];
  }

  tags = tags.split(',');

  tags = tags.map(function (tag) {
    return {name: tag.trim(), description: tag.trim()};
  });

  return tags;
}

Example #10
0
"use strict";


const App = require('widget-cms');
const Events = App.getCollection('Events');
const nodeEvent = App.getModel('Event');
const moment = require('moment');
const TwitBot = require('../bots/twit');


const EventsController = App.Controller.extend({

  /*
   * GET /events/new
   * load new event page
  **/
  getNew: function (req, res) {
    res.render('events/new', {
      title: 'New Event',
      description: 'Create a new Node.js event',
      page: 'newevent'
    });
  },


  /*
   * GET /events/:id
   * loads an event by id
   */
  getEvent: function (req, res, next) {
    let slug = req.params.slug;