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'); } }
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'); } },
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); }); },
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); }); }); },
"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', {
/* 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,
"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);
"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; });
"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; }
"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;