From aa820ac0b599af64bbdda38fef232bc135f262b5 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 18 Aug 2015 15:27:14 -0600 Subject: [PATCH] * New message_area.js for Message Area APIs, etc. * msg_area_list.js module for listing/selecting message area (WIP; much to do) --- core/message_area.js | 61 ++++++++++++++++++++++++++++ core/view_controller.js | 1 + mods/art/msg_area_list.ans | Bin 0 -> 193 bytes mods/menu.json | 22 +++++++++++ mods/msg_area_list.js | 79 +++++++++++++++++++++++++++++++++++++ 5 files changed, 163 insertions(+) create mode 100644 core/message_area.js create mode 100644 mods/art/msg_area_list.ans create mode 100644 mods/msg_area_list.js diff --git a/core/message_area.js b/core/message_area.js new file mode 100644 index 00000000..c35b33ac --- /dev/null +++ b/core/message_area.js @@ -0,0 +1,61 @@ +/* jslint node: true */ +'use strict'; + +var msgDb = require('./database.js').dbs.message; + +var async = require('async'); +var _ = require('lodash'); +var assert = require('assert'); + +exports.getAvailableMessageAreas = getAvailableMessageAreas; + +function getAvailableMessageAreas(cb) { + var areas = []; // { areaId, name, groupIds[] } + + async.series( + [ + function getAreas(callback) { + msgDb.all( + 'SELECT area_id, area_name ' + + 'FROM message_area;', + function areaResults(err, areaRows) { + if(err) { + callback(err); + } else { + areaRows.forEach(function entry(ar) { + areas.push( { + areaId : ar.area_id, + name : ar.area_name, + }); + }); + + callback(null); + } + } + ); + }, + function getAreaGroups(callback) { + var query = msgDb.prepare( + 'SELECT group_id ' + + 'FROM message_area_group ' + + 'WHERE area_id=?;'); + + async.each(areas, function area(a, next) { + query.all( [ a.areaId ], function groupRows(err, groups) { + a.groupIds = groups; + next(err); + }); + }, + function complete(err) { + query.finalize(function finalized(err2) { + callback(err); // use orig err + }); + }); + } + ], + function complete(err) { + cb(err, areas); + } + ); + +} \ No newline at end of file diff --git a/core/view_controller.js b/core/view_controller.js index 66966b82..81cb3862 100644 --- a/core/view_controller.js +++ b/core/view_controller.js @@ -245,6 +245,7 @@ function ViewController(options) { function complete(err) { // default to highest ID if no 'submit' entry present if(!submitId) { + // :TODO: fix bug here: If errornous MCI code sare used, we'll reference invalid views -- these should jsut be ignored self.getView(highestId).submit = true; } diff --git a/mods/art/msg_area_list.ans b/mods/art/msg_area_list.ans new file mode 100644 index 0000000000000000000000000000000000000000..2f637e0d801210dbb7263deae17ed6a18f95b3df GIT binary patch literal 193 zcmb1+Hn27^ur@Z&<>gXPP>_x`Hq3P{Eh call @systemMethod -> fallback to menu "messageAreaNewPost" : { "module" : "msg_area_post_fse", diff --git a/mods/msg_area_list.js b/mods/msg_area_list.js new file mode 100644 index 00000000..01f11ec4 --- /dev/null +++ b/mods/msg_area_list.js @@ -0,0 +1,79 @@ +/* jslint node: true */ +'use strict'; + +var MenuModule = require('../core/menu_module.js').MenuModule; +var ViewController = require('../core/view_controller.js').ViewController; +var messageArea = require('../core/message_area.js'); +//var msgDb = require('./database.js').dbs.message; + +var async = require('async'); +var assert = require('assert'); +var _ = require('lodash'); + +exports.getModule = MessageAreaListModule; + +exports.moduleInfo = { + name : 'Message Area List', + desc : 'Module for listing / choosing message areas', + author : 'NuSkooler', +}; + +function MessageAreaListModule(options) { + MenuModule.call(this, options); + + var self = this; + +} + +require('util').inherits(MessageAreaListModule, MenuModule); + +MessageAreaListModule.prototype.mciReady = function(mciData, cb) { + var self = this; + var vc = self.viewControllers.areaList = new ViewController( { client : self.client } ); + + var messageAreas = []; + + async.series( + [ + function callParentMciReady(callback) { + MessageAreaListModule.super_.prototype.mciReady.call(this, mciData, function parentMciReady(err) { + callback(err); + }); + }, + function loadFromConfig(callback) { + var loadOpts = { + callingMenu : self, + mciMap : mciData.menu, + noInput : true, + }; + + vc.loadFromMenuConfig(loadOpts, function startingViewReady(err) { + callback(err); + }); + }, + function fetchAreaData(callback) { + messageArea.getAvailableMessageAreas(function fetched(err, areas) { + messageAreas = areas; + callback(err); + }); + }, + function populateAreaListView(callback) { + var areaListView = vc.getView(1); + + var areaList = []; + messageAreas.forEach(function entry(msgArea) { + // :TODO: make this formattable/themable + areaList.push(msgArea.areaId + ' - ' + msgArea.name); + }); + + console.log(areaList) + + areaListView.setItems(areaList); + areaListView.redraw(); + } + ], + function complete(err) { + + } + ); +}; \ No newline at end of file