Source: index.js

'use strict';
var path = require('path');

/**
 * An Admin interface extension for authoring content.
 * @{@link https://github.com/typesettin/periodicjs.ext.admin}
 * @author Yaw Joseph Etse
 * @copyright Copyright (c) 2014 Typesettin. All rights reserved.
 * @license MIT
 * @exports periodicjs.ext.admin
 * @requires module:path
 * @param  {object} periodic variable injection of resources from current periodic instance
 */
module.exports = function (periodic) {
	// express,app,logger,config,db,mongoose
	var adminRouter = periodic.express.Router(),
		itemRouter = periodic.express.Router(),
		tagRouter = periodic.express.Router(),
		tagAdminRouter = periodic.express.Router(),
		mediaRouter = periodic.express.Router(),
		mediaAdminRouter = periodic.express.Router(),
		userAdminRouter = periodic.express.Router(),
		contenttypeRouter = periodic.express.Router(),
		contenttypeAdminRouter = periodic.express.Router(),
		categoryRouter = periodic.express.Router(),
		categoryAdminRouter = periodic.express.Router(),
		collectionRouter = periodic.express.Router(),
		settingsRouter = periodic.express.Router(),
		extensionAdminRouter = periodic.express.Router(),
		themeAdminRouter = periodic.express.Router(),
		periodicRouter = periodic.express.Router(),
		themeController = require(path.resolve(process.cwd(), './app/controller/theme'))(periodic),
		extController = require(path.resolve(process.cwd(), './app/controller/extension'))(periodic),
		itemController = require(path.resolve(process.cwd(), './app/controller/item'))(periodic),
		tagController = require(path.resolve(process.cwd(), './app/controller/tag'))(periodic),
		mediaassetController = require(path.resolve(process.cwd(), './app/controller/asset'))(periodic),
		categoryController = require(path.resolve(process.cwd(), './app/controller/category'))(periodic),
		userController = require(path.resolve(process.cwd(), './app/controller/user'))(periodic),
		contenttypeController = require(path.resolve(process.cwd(), './app/controller/contenttype'))(periodic),
		collectionController = require(path.resolve(process.cwd(), './app/controller/collection'))(periodic),
		adminController = require('./controller/admin')(periodic),
		adminSettingsController = require('./controller/settings')(periodic),
		authController = require('../periodicjs.ext.login/controller/auth')(periodic),
		uacController = require('../periodicjs.ext.user_access_control/controller/uac')(periodic);
	/**
	 * access control routes
	 */
	adminRouter.all('*', authController.ensureAuthenticated, uacController.loadUserRoles, uacController.check_user_access);
	extensionAdminRouter.all('*', authController.ensureAuthenticated, uacController.loadUserRoles, uacController.check_user_access);
	themeAdminRouter.all('*', authController.ensureAuthenticated, uacController.loadUserRoles, uacController.check_user_access);
	itemRouter.all('*', authController.ensureAuthenticated, uacController.loadUserRoles, uacController.check_user_access);
	collectionRouter.all('*', authController.ensureAuthenticated, uacController.loadUserRoles, uacController.check_user_access);
	tagRouter.all('*', authController.ensureAuthenticated, uacController.loadUserRoles, uacController.check_user_access);
	tagAdminRouter.all('*', authController.ensureAuthenticated, uacController.loadUserRoles, uacController.check_user_access);
	categoryRouter.all('*', authController.ensureAuthenticated, uacController.loadUserRoles, uacController.check_user_access);
	categoryAdminRouter.all('*', authController.ensureAuthenticated, uacController.loadUserRoles, uacController.check_user_access);
	contenttypeRouter.all('*', authController.ensureAuthenticated, uacController.loadUserRoles, uacController.check_user_access);
	contenttypeAdminRouter.all('*', authController.ensureAuthenticated, uacController.loadUserRoles, uacController.check_user_access);
	mediaRouter.all('*', authController.ensureAuthenticated, uacController.loadUserRoles, uacController.check_user_access);
	userAdminRouter.all('*', authController.ensureAuthenticated, uacController.loadUserRoles, uacController.check_user_access);
	settingsRouter.all('*', authController.ensureAuthenticated, uacController.loadUserRoles, uacController.check_user_access);

	/**
	 * admin routes
	 */
	// adminRouter.get('/', adminController.settings_index);
	adminRouter.get('/', function (req, res) {
		res.redirect('/p-admin/user/' + req.user.username);
	});
	adminRouter.get('/items', itemController.loadItemsWithCount, itemController.loadItemsWithDefaultLimit, itemController.loadItems, adminController.items_index);
	adminRouter.get('/collections', collectionController.loadCollectionsWithCount, collectionController.loadCollectionsWithDefaultLimit, collectionController.loadCollections, adminController.collections_index);
	adminRouter.get('/contenttypes', contenttypeController.loadContenttypeWithCount, contenttypeController.loadContenttypeWithDefaultLimit, contenttypeController.loadContenttypes, adminController.contenttypes_index);
	adminRouter.get('/tags', tagController.loadTagsWithCount, tagController.loadTagsWithDefaultLimit, tagController.loadTags, adminController.tags_index);
	adminRouter.get('/categories', categoryController.loadCategoriesWithCount, categoryController.loadCategoriesWithDefaultLimit, categoryController.loadCategories, adminController.categories_index);
	adminRouter.get('/assets', mediaassetController.loadAssetWithCount, mediaassetController.loadAssetWithDefaultLimit, mediaassetController.loadAssets, adminController.assets_index);
	adminRouter.get('/extensions', adminController.loadExtensions, adminController.extensions_index);
	adminRouter.get('/themes', adminController.loadThemes, adminController.themes_index);
	adminRouter.get('/users', uacController.loadUacUsers, adminController.users_index);
	adminRouter.get('/mailer', adminController.mail_index);
	adminRouter.get('/check_periodic_version', adminController.check_periodic_version);
	/**
	 * admin/extension manager routes
	 */
	extensionAdminRouter.get('/install', extController.install);
	extensionAdminRouter.get('/install/log/:extension/:date', extController.install_getOutputLog);
	extensionAdminRouter.get('/upload/log/:extension/:date', extController.upload_getOutputLog);
	extensionAdminRouter.get('/remove/log/:extension/:date', extController.remove_getOutputLog);
	extensionAdminRouter.get('/cleanup/log/:extension/:date', extController.cleanup_log);
	extensionAdminRouter.get('/:id/disable', adminController.loadExtensions, adminController.loadExtension, extController.disable);
	extensionAdminRouter.get('/:id/enable', adminController.loadExtensions, adminController.loadExtension, extController.enable);
	extensionAdminRouter.post('/upload', mediaassetController.upload, extController.upload_install);
	extensionAdminRouter.post('/:id/delete', adminController.loadExtension, extController.remove);
	extensionAdminRouter.get('/:id', adminController.loadExtension, adminSettingsController.load_extension_settings, adminController.extension_show);
	/**
	 * admin/theme manager routes
	 */
	themeAdminRouter.get('/install', themeController.install);
	themeAdminRouter.get('/install/log/:theme/:date', themeController.install_getOutputLog);
	themeAdminRouter.get('/upload/log/:theme/:date', themeController.upload_getOutputLog);
	themeAdminRouter.get('/remove/log/:theme/:date', themeController.remove_getOutputLog);
	themeAdminRouter.get('/cleanup/log/:theme/:date', themeController.cleanup_log);
	themeAdminRouter.get('/:id/enable', themeController.enable);
	themeAdminRouter.post('/upload', mediaassetController.upload, themeController.upload_install);
	themeAdminRouter.post('/:id/delete', themeController.remove);
	themeAdminRouter.get('/:id', adminController.loadTheme, adminController.theme_show);
	/**
	 * admin/post manager routes
	 */
	adminRouter.get('/item/new', adminController.item_new);
	adminRouter.get('/item/edit/:id', itemController.loadFullItem, adminController.item_edit);
	itemRouter.post('/new', itemController.create);
	itemRouter.post('/edit', itemController.update);
	itemRouter.post('/:id/delete', itemController.loadItem, itemController.remove);
	/**
	 * admin/collection manager routes
	 */
	adminRouter.get('/collection/new', adminController.collection_new);
	adminRouter.get('/collection/edit/:id', collectionController.loadCollection, adminController.collection_edit);
	collectionRouter.post('/new', collectionController.create);
	collectionRouter.post('/edit', collectionController.update);
	collectionRouter.post('/append/:id', collectionController.loadCollection, collectionController.append);
	collectionRouter.post('/:id/delete', collectionController.loadCollection, collectionController.remove);

	/**
	 * admin/tag manager routes
	 */
	tagRouter.post('/new/:id', tagController.loadTag, tagController.create);
	tagRouter.post('/new', tagController.loadTag, tagController.create);
	tagRouter.post('/:id/delete', tagController.loadTag, tagController.remove);
	tagRouter.post('/edit', tagController.update);
	tagAdminRouter.get('/edit/:id', tagController.loadTag, adminController.tag_show);
	tagAdminRouter.get('/:id', tagController.loadTag, adminController.tag_show);
	tagAdminRouter.get('/:id/parent', tagController.loadTag, adminController.tag_parent);
	/**
	 * admin/category manager routes
	 */
	categoryRouter.post('/new/:id', categoryController.loadCategory, categoryController.create);
	categoryRouter.post('/new', categoryController.loadCategory, categoryController.create);
	categoryRouter.post('/:id/delete', categoryController.loadCategory, categoryController.remove);
	categoryRouter.post('/edit', categoryController.update);
	categoryAdminRouter.get('/edit/:id', categoryController.loadCategory, adminController.category_show);
	categoryAdminRouter.get('/:id', categoryController.loadCategory, adminController.category_show);
	categoryAdminRouter.get('/:id/parent', categoryController.loadCategory, adminController.category_parent);
	/**
	 * admin/categorytype manager routes
	 */
	contenttypeRouter.post('/new/:id', contenttypeController.loadContenttype, contenttypeController.create);
	contenttypeRouter.post('/new', contenttypeController.loadContenttype, contenttypeController.create);
	contenttypeRouter.post('/:id/delete', contenttypeController.loadContenttype, contenttypeController.remove);
	contenttypeRouter.post('/append/:id', contenttypeController.loadContenttype, contenttypeController.append);
	contenttypeRouter.post('/removeitem/:id', contenttypeController.loadContenttype, contenttypeController.removeitem);
	contenttypeAdminRouter.get('/edit/:id', contenttypeController.loadContenttype, adminController.contenttype_show);
	contenttypeAdminRouter.get('/:id', contenttypeController.loadContenttype, adminController.contenttype_show);
	/**
	 * admin/media manager routes
	 */
	mediaRouter.post('/new', mediaassetController.upload, mediaassetController.createassetfile);
	mediaRouter.post('/:id/delete', mediaassetController.loadAsset, mediaassetController.remove);
	mediaRouter.post('/edit', mediaassetController.update);
	mediaAdminRouter.get('/edit/:id', mediaassetController.loadAsset, adminController.asset_show);
	mediaAdminRouter.get('/:id', mediaassetController.loadAsset, adminController.asset_show);

	/**
	 * admin/user routes
	 */
	userAdminRouter.get('/new', adminController.users_new);
	userAdminRouter.get('/:id', userController.loadUser, adminController.users_show);
	userAdminRouter.get('/:id/edit', userController.loadUser, adminController.users_edit);
	userAdminRouter.post('/edit', userController.update);
	userAdminRouter.post('/new', userController.create);
	userAdminRouter.post('/:id/delete', userController.loadUser, userController.remove);


	/**
	 * admin/settings routes
	 */
	settingsRouter.get('/', adminSettingsController.load_app_settings, adminSettingsController.load_theme_settings, adminController.settings_index);
	settingsRouter.get('/faq', adminController.settings_faq);
	settingsRouter.post('/restart', adminSettingsController.restart_app);
	settingsRouter.post('/updateapp', adminSettingsController.update_app);
	settingsRouter.post('/updateappsettings', adminSettingsController.update_app_settings);
	settingsRouter.post('/updatethemesettings', adminSettingsController.update_theme_settings);

	settingsRouter.post('/updateextfiledata', adminSettingsController.update_ext_filedata);

	/**
	 * periodic routes
	 */
	periodicRouter.get('/user/search.:ext', userController.loadUsers, userController.searchResults);
	periodicRouter.get('/user/search', userController.loadUsers, userController.searchResults);
	periodicRouter.get('/category/search.:ext', categoryController.loadCategories, categoryController.searchResults);
	periodicRouter.get('/category/search', categoryController.loadCategories, categoryController.searchResults);
	periodicRouter.get('/category/:id/children', categoryController.loadCategory, categoryController.loadChildren, categoryController.showChildren);
	periodicRouter.get('/contenttype/search.:ext', contenttypeController.loadContenttypes, contenttypeController.searchResults);
	periodicRouter.get('/contenttype/search', contenttypeController.loadContenttypes, contenttypeController.searchResults);
	periodicRouter.get('/tag/search.:ext', tagController.loadTags, tagController.searchResults);
	periodicRouter.get('/tag/search', tagController.loadTags, tagController.searchResults);
	periodicRouter.get('/tag/:id/children', tagController.loadTag, tagController.loadChildren, tagController.showChildren);

	adminRouter.use('/asset', mediaAdminRouter);
	adminRouter.use('/extension', extensionAdminRouter);
	adminRouter.use('/theme', themeAdminRouter);
	adminRouter.use('/contenttype', contenttypeAdminRouter);
	adminRouter.use('/tag', tagAdminRouter);
	adminRouter.use('/category', categoryAdminRouter);
	adminRouter.use('/user', userAdminRouter);
	adminRouter.use('/settings', settingsRouter);
	periodic.app.use('/p-admin', adminRouter);
	periodic.app.use('/item', itemRouter);
	periodic.app.use('/collection', collectionRouter);
	periodic.app.use('/tag', tagRouter);
	periodic.app.use('/category', categoryRouter);
	periodic.app.use('/contenttype', contenttypeRouter);
	periodic.app.use('/contenttype', contenttypeRouter);
	periodic.app.use('/mediaasset', mediaRouter);
	periodic.app.use(periodicRouter);
};