v1.18.x
psychobunny 9 years ago
parent 8bc80abde6
commit 9e832e006a

@ -0,0 +1,27 @@
"use strict";
/*global define, socket*/
define('admin/general/social', [], function() {
var social = {};
social.init = function() {
$('#save').on('click', function() {
var networks = [];
$('#postSharingNetworks input[type="checkbox"]').each(function() {
if ($(this).prop('checked')) {
networks.push($(this).attr('id'));
}
});
socket.emit('admin.social.savePostSharingNetworks', networks, function(err) {
if (err) {
return app.alertError(err);
}
app.alertSuccess('Successfully saved Post Sharing Networks!');
});
});
};
return social;
});

@ -33,6 +33,8 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator
return app.alertError(err);
}
data.posts.display_move_tools = data.posts.display_move_tools && index !== 0;
data.postSharing = data.postSharing.filter(function(share) { return share.activated === true; });
templates.parse('partials/topic/post-menu-list', data, function(html) {
translator.translate(html, function(html) {
dropdownMenu.html(html);

@ -31,17 +31,19 @@ define('share', function() {
return false;
});
addHandler('.twitter-share', function () {
addHandler('[component="share/twitter"]', function () {
return openShare('https://twitter.com/intent/tweet?text=' + encodeURIComponent(name) + '&url=', getPostUrl($(this)), 550, 420);
});
addHandler('.facebook-share', function () {
addHandler('[component="share/facebook"]', function () {
return openShare('https://www.facebook.com/sharer/sharer.php?u=', getPostUrl($(this)), 626, 436);
});
addHandler('.google-share', function () {
addHandler('[component="share/google"]', function () {
return openShare('https://plus.google.com/share?url=', getPostUrl($(this)), 500, 570);
});
$(window).trigger('action:share.addHandlers', {openShare: openShare});
};
function addHandler(selector, callback) {

@ -22,6 +22,7 @@ var adminController = {
sounds: require('./admin/sounds'),
homepage: require('./admin/homepage'),
navigation: require('./admin/navigation'),
social: require('./admin/social'),
themes: require('./admin/themes'),
users: require('./admin/users'),
uploads: require('./admin/uploads'),

@ -0,0 +1,20 @@
'use strict';
var social = require('../../social');
var socialController = {};
socialController.get = function(req, res, next) {
social.getPostSharing(function(err, posts) {
if (err) {
return next(err);
}
res.render('admin/general/social', {
posts: posts
});
});
};
module.exports = socialController;

@ -48,6 +48,7 @@ function addRoutes(router, middleware, controllers) {
router.get('/general/sounds', middlewares, controllers.admin.sounds.get);
router.get('/general/navigation', middlewares, controllers.admin.navigation.get);
router.get('/general/homepage', middlewares, controllers.admin.homepage.get);
router.get('/general/social', middlewares, controllers.admin.social.get);
router.get('/manage/categories', middlewares, controllers.admin.categories.getAll);
router.get('/manage/categories/:category_id', middlewares, controllers.admin.categories.get);

@ -0,0 +1,58 @@
"use strict";
var plugins = require('./plugins');
var db = require('./database');
var async = require('async');
var social = {};
social.getPostSharing = function(callback) {
var networks = [
{
id: "facebook",
name: "Facebook",
class: "fa-facebook"
},
{
id: "twitter",
name: "Twitter",
class: "fa-twitter"
},
{
id: "google",
name: "Google+",
class: "fa-google-plus"
}
];
async.waterfall([
function(next) {
plugins.fireHook('filter:social.posts', networks, next);
},
function(networks, next) {
db.getSetMembers('social:posts.activated', function(err, activated) {
if (err) {
return next(err);
}
networks.forEach(function(network, i) {
networks[i].activated = (activated.indexOf(network.id) !== -1);
});
next(null, networks);
});
}
], callback);
};
social.setActivePostSharingNetworks = function(networkIDs, callback) {
db.delete('social:posts.activated', function(err) {
if (!networkIDs.length) {
return callback(err);
}
db.setAdd('social:posts.activated', networkIDs, callback);
});
};
module.exports = social;

@ -25,6 +25,7 @@ var async = require('async'),
rewards: require('./admin/rewards'),
navigation: require('./admin/navigation'),
rooms: require('./admin/rooms'),
social: require('./admin/social'),
themes: {},
plugins: {},
widgets: {},

@ -0,0 +1,10 @@
"use strict";
var social = require('../../social'),
SocketSocial = {};
SocketSocial.savePostSharingNetworks = function(socket, data, callback) {
social.setActivePostSharingNetworks(data, callback);
};
module.exports = SocketSocial;

@ -8,6 +8,7 @@ var websockets = require('../index');
var socketTopics = require('../topics');
var privileges = require('../../privileges');
var plugins = require('../../plugins');
var social = require('../../social');
var favourites = require('../../favourites');
module.exports = function(SocketPosts) {
@ -29,6 +30,9 @@ module.exports = function(SocketPosts) {
},
tools: function(next) {
plugins.fireHook('filter:post.tools', {pid: data.pid, uid: socket.uid, tools: []}, next);
},
postSharing: function(next) {
social.getPostSharing(next);
}
}, function(err, results) {
if (err) {

@ -10,7 +10,7 @@ var db = require('./database'),
schemaDate, thisSchemaDate,
// IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema
latestSchema = Date.UTC(2016, 0, 23);
latestSchema = Date.UTC(2016, 1, 25);
Upgrade.check = function(callback) {
db.get('schemaDate', function(err, value) {
@ -410,6 +410,34 @@ Upgrade.upgrade = function(callback) {
winston.info('[2016/01/23] Creating Global moderators group skipped!');
next();
}
},
function(next) {
thisSchemaDate = Date.UTC(2016, 1, 25);
if (schemaDate < thisSchemaDate) {
updatesMade = true;
winston.info('[2016/02/25] Social: Post Sharing');
var social = require('./social');
async.parallel([
function (next) {
social.setActivePostSharingNetworks(['facebook', 'google', 'twitter'], next);
},
function (next) {
db.deleteObjectField('config', 'disableSocialButtons', next);
}
], function(err) {
if (err) {
return next(err);
}
winston.info('[2016/02/25] Social: Post Sharing done!');
Upgrade.update(thisSchemaDate, next);
});
} else {
winston.info('[2016/02/25] Social: Post Sharing skipped!');
next();
}
}
// Add new schema updates here
// IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema IN LINE 24!!!

@ -0,0 +1,24 @@
<div class="social settings" class="row">
<form role="form">
<div class="row">
<div class="col-sm-2 col-xs-12 settings-header">Post Sharing</div>
<div class="col-sm-10 col-xs-12">
<div class="form-group" id="postSharingNetworks">
<!-- BEGIN posts -->
<div class="checkbox">
<label for="{posts.id}" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input type="checkbox" class="mdl-switch__input" id="{posts.id}" data-field="{posts.id}" name="{posts.id}" <!-- IF posts.activated -->checked<!-- ENDIF posts.activated --> />
<span class="mdl-switch__label"><i class="fa {posts.class}"></i> {posts.name}</span>
</label>
</div>
<!-- END posts -->
<small>Plugins can add additional networks for sharing posts.</small>
</div>
</div>
</div>
</form>
</div>
<button id="save" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
<i class="material-icons">save</i>
</button>

@ -7,6 +7,7 @@
<li><a href="{relative_path}/admin/general/navigation">Navigation</a></li>
<li><a href="{relative_path}/admin/general/languages">Languages</a></li>
<li><a href="{relative_path}/admin/general/sounds">Sounds</a></li>
<li><a href="{relative_path}/admin/general/social">Social</a></li>
</ul>
</section>
@ -160,6 +161,7 @@
<li><a href="{relative_path}/admin/general/navigation">Navigation</a></li>
<li><a href="{relative_path}/admin/general/languages">Languages</a></li>
<li><a href="{relative_path}/admin/general/sounds">Sounds</a></li>
<li><a href="{relative_path}/admin/general/social">Social</a></li>
</ul>
</li>
<li class="dropdown menu-item">

Loading…
Cancel
Save